Jeg bøvler med ovenstående, og jg kan bare ikke få det til at virke. Jeg har været alle følgende muligheder igennem, og enten sker der ingenting, eller også får jeg en Run-time error 2118. Hvad går der galt ?
Det er rigtig, at den hedder SkemaNr, og den ligger på en anden formular (frmProdukt). Hvis man på den formular vælger et ikke eksisterende SkemaNr, kan man vælge at oprette et nyt, så bliver man sendt videre til en anden formular, og derfra til den, som jeg har prøvet alt ovenstående på. SkemaNr bliver opdateret i tabellen når man fra den anden til den tredie formular, samtidigt lukkes den anden. Problemet er jo så, når jeg kommer tilbage til den første, siger den stadig at SkemaNr er ikke på listen, selvom det er det.
Den er lidt heftig, så jeg skal vist lige have lavet en kopi, hvor jeg fjerner alt overfødigt, det når jeg ikke i dag. Men problematikken er sådan set "bare" den samme, som i det spørgsmål jeg linker til.
Synes godt om
Slettet bruger
18. september 2010 - 15:23#5
Alle databaser skal sendes til Mugs (og Terry)!
Værdien af at spørgeren motiveres for at beskrive sit problem detaljeret, til generel oplysning om emnet, er ligegyldigt - en database app siger bedre end noget hvad spørgeren mener.
Emnet i sig selv rager ikke ekspert forumets læsere - hovedsagen er at spørgerens problem bliver løst.
rosco: Jeg er nok nødt til, at have det skåret lidt mere ud i pap. Den kode du har lagt her, er det en du bruger "hvis ikke på liste" ? eller er det når du returnerer til den formular, hvor man startede med at det var ikke på liste ? Jeg prøver lige at forklare mit problem en gang til. Jeg har en formular (lad os kalde den Form1), hvor der er en comboboks "skemaNr" Hvis man vælger et SkemaNr, som ikke er på listen, bliver man spurgt om man vil oprette et nyt. Hvis man vælger ja, bliver man sendt videre til en anden formular (Form2)og skemanummret bliver oprettet. Da der også skal noget fyld i skemaet kommer man så videre til en tredie formular (Form3), hvor der kan fyldes på. Idet man går videre til Form3 lukkes Form2, og når man lukker Form3 returnerer man til Form1. Nu eksisterer det SkemaNr, man før fik at vide "Ikke på liste", det har comboboksen bare ikke opdaget, og det er det der er hele humlen i mit problem. Form3 er i dataarkvisning. Og hvis jeg på dens Form_Close ligger denne f.eks kode: Forms![Form1]![Skemanr].Requery synes jeg jo, at min comboboks burde opdateres, ikk? I stedet får jeg denne fejlmeddelse:
Run-time error '2118':
Handlingen Genforespørg kan ikke afspilles, før du gemmer det aktuelle felt.@* Hvis du afspiller makroen fra databasevinduet, skal du først gemme feltet og derefter afspille makroen. *Hvis makronavn er lig med indstillingen af egenskaben BeforeUpdate i en Visual Basic-funktion, skal du i stedet angive egenskaben til makroens navn.@1@603033@1
Denne fungerer således. Hvis du indtaster et skemanummer der ikke eksistere bliver du spurgt om det skal oprettes. Hvis du svarer ja oprettes det og din formular til at komme fyld i det nylig oprettede skemanummer åbnes.
Private Sub cmbSkemanr_NotInList(NewData As String, Response As Integer) On Error GoTo err_cmbSkemanr_NotInList
Dim ctl As Control Dim strSQL As String Dim stDocName As String Dim stLinkCriteria As String
' Returner markeringen til combo box. Set ctl = Me!cmbSkemanr ' Anmoder brugeren bekræfte at ny data skal tilføjes. If MsgBox("Indtastede Skemanummer er ikke på listen, skal den tilføjes?", vbOKCancel) = vbOK Then ' Set Response argument, for at vise at data bliver tilføjet. Response = acDataErrAdded ' Tilføj tekst til ny post i cmbSkemanr tabellen. NewData = (NewData) strSQL = " INSERT INTO tblSkemanumre (Skemanr ) SELECT '" & (NewData) & "'" DoCmd.SetWarnings False DoCmd.RunSQL strSQL ctl.Value = NewData DoCmd.SetWarnings True ' Åbner formularen formSkemanr så yderligere data kan tilføjes. stDocName = "formSkemanr" DoCmd.OpenForm stDocName, , , stLinkCriteria ‘Går til den nylig oprettede post. DoCmd.GoToRecord , , acLast
Else ' Hvis bruger vælger Cancel, udelad fejlmeddelelse og slet ændringer. Response = acDataErrContinue ctl.Undo End If
exit_cmbSkemanr_NotInList: Exit Sub
err_cmbSkemanr_NotInList: If Err = 2113 Then Err = 0 Resume Next Else MsgBox Str(Err) MsgBox Err.Description Resume exit_cmbSkemanr_NotInList End If End Sub
Yderligere: Ved at bruge NotInList funktionen behøver du ikke formular2 tiloprettelse af nyt Skemanr. det oprettes direkte i din comboboks med denne SQL. og du kan gå direkte videre til Formular3, stDocName = "formSkemanr"
Jeg har ikke glemt denne, jeg har bare lige været væltet af pinden nogle dage
Dit forslag er der for så vidt ikke noget i vejen med, jeg kan bare ikke undvære Form2, da jeg dels kan komme til den ad anden vej også, dels har den også nogle funktionaliteter indbygget.
Det der især undrer mig, er at hvis jeg ikke lukker Form2, hvor der også er en comboboks med Skemanr, så bliver den komboboks opdateret, når jeg fortsætter til Form3 (frmSkemaSkabelon) med denne kode, men hvis jeg også prøver, at opdater frmProdukt, altså Form1 herfra, får jeg stadig fejl.
Private Sub cmdÅbnSkemaSkabelon_Click() On Error GoTo Err_cmdÅbnSkemaSkabelon_Click
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tblSkemaNr(SkemaNr) SELECT '" & Me.txtSkemaNr & "'"
Jeg skal måske lige tilføje, at min "Ved ikke på liste" ligger på Form1 (frmProdukt) og fungerer fint efter hensigten
Private Sub SkemaNr_NotInList(NewData As String, Response As Integer)
Dim promt As String
DoCmd.SetWarnings False
promt = "Skemanummeret eksisterer ikke, vil du oprette et nyt med skemanr " & NewData & "?"
If MsgBox(promt, vbYesNo, "Not found!") = vbYes Then DoCmd.OpenForm "startSkemaSkabelon" Form_StartSkemaSkabelon.txtSkemaNr.Value = NewData Form_StartSkemaSkabelon.cmdÅbnSkemaSkabelon.Enabled = True Form_StartSkemaSkabelon.Etiket10.ForeColor = 0 Response = acDataErrContinue Else Response = acDataErrContinue Me.SkemaNr.Undo End If
DoCmd.SetWarnings True
End Sub
Og at man, hvis man kommer den anden vej til Form2, taster sit skemanr i en tekstboks med denne kode
Private Sub txtSkemaNr_BeforeUpdate(Cancel As Integer)
Dim VARa As String
VARa = Me.txtSkemaNr
If DCount("*", "tblSkemaNr", "SkemaNr='" & VARa & "'") > 0 Then Me.cmdÅbnSkemaSkabelon.Enabled = False Me.Etiket10.ForeColor = 8421504 MsgBox "Skemanummeret er allerede i brug, vælg et andet." Me.Undo Else Me.cmdÅbnSkemaSkabelon.Enabled = True Me.Etiket10.ForeColor = 0 End If
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.