Avatar billede sigyn Seniormester
17. september 2010 - 08:38 Der er 11 kommentarer og
1 løsning

Opdatere kombinationsboks

http://www.eksperten.dk/spm/489517

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 ?

Private Sub Form_Close()

RunCommand acCmdSaveRecord

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

Form_frmProdukt.Requery

Forms![frmProdukt]![SkemaNr].Requery

Form_frmProdukt.SkemaNr.Requery

End Sub
Avatar billede mugs Novice
17. september 2010 - 09:38 #1
Jeg antager, at din combo der skal opdateres hedded SkemaNr.

Hvor ligger den - Evt. i en underformular?
Er der tale om et nyt element på comboen?
Avatar billede sigyn Seniormester
17. september 2010 - 09:54 #2
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.
Avatar billede mugs Novice
17. september 2010 - 10:12 #3
Der lyder lidt forvirrende. Kan jeg se db? Send den i ACC2000 som en .zip fil til:

mugs snabelting mail.dk

så ser jeg på den senere.
Avatar billede sigyn Seniormester
17. september 2010 - 10:20 #4
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.
Avatar billede 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.
Avatar billede rosco Novice
18. september 2010 - 19:55 #6
Jeg har benyttet denne, hvis opdatering af Combobox kræver at man sendes til en anden formular.

Private Sub cmbProdukt_NotInList(NewData As String, Response As Integer)
On Error GoTo err_cmbProdukt_NotInList

  Dim lngcmbProdukt As Long
  Dim ctl As Control
 
  Set ctl = Me.cmbProdukt
 
  If IsNull(Me.cmbProdukt) Then
    Me![cmbProdukt].Text = ""
    Response = acDataErrAdded
  Else
    lngcmbProdukt = Me![cmbProdukt]
    Me.cmbProdukt = Null
  'Hvis brugeren vælger cansel, undertryk fejlmeddelelser og slet ændringer.
    Response = acDataErrContinue
    ctl.Undo
  End If
    DoCmd.OpenForm "frmRedigerProdukt", , , , , acDialog, "Gotonew"
    Me.cmbProdukt.Requery
    If lngcmbProdukt <> 0 Then Me![cmbProdukt] = lngcmbProdukt
    DoCmd.SetWarnings False
    ctl.Value = NewData
    DoCmd.SetWarnings True
   
exit_cmbProdukt_NotInList:
    Exit Sub
   
err_cmbProdukt_NotInList:
        If Err = 2113 Then
        Err = 0
        Resume Next
        MsgBox Err.Description
        Resume exit_cmbProdukt_NotInList
End If
End Sub
Avatar billede sigyn Seniormester
20. september 2010 - 09:32 #7
ellebe: Ikke forstået?

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
Avatar billede rosco Novice
20. september 2010 - 17:51 #8
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
Avatar billede rosco Novice
20. september 2010 - 18:04 #9
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"

strSQL = " INSERT INTO tblSkemanumre (Skemanr ) SELECT '" & (NewData) & "'"
Avatar billede sigyn Seniormester
27. september 2010 - 12:01 #10
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 & "'"
   
    DoCmd.RunSQL "INSERT INTO tblSkema(SkemaNr, StDataKt, Min, Maks, Target, Enhed, BatchfrekvensId, AnalysefrekvensId, Bemærkninger) SELECT  '" & Me.txtSkemaNr & "', StDataKt, Min, Maks, Target, Enhed, BatchfrekvensId, AnalysefrekvensId, Bemærkninger FROM tblSkema WHERE SkemaNr = '" & Me.cboSkemaNr & "'"
   
    DoCmd.OpenForm "frmSkemaSkabelon", acFormDS
    Forms!frmSkemaSkabelon.RecordSource = "SELECT * FROM tblSkema WHERE SkemaNr = '" & Me.txtSkemaNr & "'"
   
    Forms![StartSkemaSkabelon]![cboSkemaNr].Requery
           
    Me.txtSkemaNr = ""
    Me.cboSkemaNr = ""
    DoCmd.SetWarnings True
   
    'DoCmd.Close acForm, "StartSkemaSkabelon"
   
Exit_cmdÅbnSkemaSkabelon_Click:
    Exit Sub

Err_cmdÅbnSkemaSkabelon_Click:
    MsgBox Err.Description
    Resume Exit_cmdÅbnSkemaSkabelon_Click
   
End Sub
Avatar billede sigyn Seniormester
27. september 2010 - 12:04 #11
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

End Sub
Avatar billede sigyn Seniormester
13. oktober 2010 - 16:42 #12
Lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester