26. april 2004 - 15:09Der er
13 kommentarer og 1 løsning
Problem med "Metoden Update eller CancelUpdate"
Jeg får denne fejl i min kode: "Metoden Update eller CancelUpdate er brugt uden AddNew eller Edit" Når jeg kigger på koden, it kinda makes sense......men hvor skal jeg ændre?
Public Function OpretPalleNr(PalleTalPartiX As Long) As String Dim PalleNrX As Variant Dim PS As New ADODB.Recordset Dim PalleTalTaellerX As Long PS.Open "PalleTal", CurrentProject.Connection, adOpenKeyset, adLockPessimistic, adCmdTable PS.Find ("palletalparti =" & PalleTalPartiX) If PS.EOF = True Then PS.AddNew PalleTalTaellerX = 1 PS("PalleTalParti").Value = PalleTalPartiX PS("PalleTalParti").Value = PalleTalPartiX PS("PalleTalTaeller").Value = "000" End If PalleTalTaellerX = Val(PS("PalleTalTaeller")) PalleTalTaellerX = PalleTalTaellerX + 1 PalleNrX = LTrim$(Str(PalleTalTaellerX)) Select Case Len(PalleNrX) Case Is = 1 PalleNrX = PalleTalPartiX & "00" & PalleNrX Case Is = 2 PalleNrX = "0" & PalleNrX End Select PS("PalleTalTaeller").Value = PalleNrX PS.Update PS.Close Set PS = Nothing OpretPalleNr = PalleNrX End Function
Hvis PS.EOF = False er det fordi partiet eksisterer og så skal der ikke oprettes et nyt parti, men så kommer jeg jo aldrig ind i If-løkken, hvilket vil sige, at PS.AddNew aldrig afvikles. Så står PS.Update jo alene, hvilket den ikke kan og derfor får jeg fejlen. What to do?
Nu er det jo godt nok ikke mig der har skrevet koden, men som jeg læser den, så søges der først efter om der eksisterer et parti (palletalparti), som har værdien PalleTalPartiX Hvis det ikke eksisterer (If PS.EOF = True), skal der oprettes et nyt parti. Et parti kan f.eks. være 4001 (første parti i år 2004) og pallerne som hører til partiet begynder fra 001 til 999. Tilbage til koden: Hvis vi kører videre med et partinummer på 4001, vil If-løkken resulterer i at PS("PalleTalParti") = 4001 og PS("PalleTalTaeller") = 000 Herefter lægger koden 1 til PalleTalTaellerX, som jo er værdien af PS("PalleTalTaeller"). Så checkes om størrelsen af palletallet er på 1 eller 2 karakterer (alt andet får bare lov til at "fortsætte") Der bliver så smidt et 0 eller 2 0'er foran palletallet. Tilsidst sætter vi værdien af palletallet til 1 (hvis vi fortsætter med tallene fra længere oppe) PS("PalleTalTaeller").value = PalleNrX Så opdateres PS til allersidst. Tager jeg fejl i dette eller....?
Din forstelse af koden er vist god nok. Men det, som jeg ikke helt forstår, det er at uanet om PS.EOF=True eller ej, så vil posten bliv ændret, hvorved en PS.Update ikke burde fejle.
Har du prøvet at single-steppe dig gennem koden? Sæt et breakpoint i linien PS.Open "PalleTal... og tryk F8 for at hoppe én linie ad gangen.
Du kan evt prøve denne variation af koden:
Public Function OpretPalleNr(PalleTalPartiX As Long) As String Dim PalleNrX As Variant Dim PS As New ADODB.Recordset Dim PalleTalTaellerX As Long PS.Open "Select * From PalleTal Where palletalparti =" & PalleTalPartiX, CurrentProject.Connection, adOpenKeyset, adLockPessimistic, adCmdtext If PS.EOF = True Then PS.AddNew PalleTalTaellerX = 1 PS!PalleTalParti= PalleTalPartiX PS!PalleTalParti= PalleTalPartiX PS!PalleTalTaeller= "000" PS.Update else PalleTalTaellerX = Val(PS!PalleTalTaeller) PalleTalTaellerX = PalleTalTaellerX + 1 PalleNrX = LTrim$(Str(PalleTalTaellerX)) Select Case Len(PalleNrX) Case Is = 1 PalleNrX = PalleTalPartiX & "00" & PalleNrX Case Is = 2 PalleNrX = "0" & PalleNrX End Select PS!PalleTalTaeller= PalleNrX
endif PS.Close Set PS = Nothing OpretPalleNr = PalleNrX End Function
Jeg har selvfølgelig sat kode ind i den funktion der kalder OpretPalleNr() og det giver følgende: fejl i procedure 'opretpalle': Denne handling er ikke tilladt i denne sammenhæng. (fra efter : og frem er der err-objektet)
Hmmm....jeg har sat et breakpoint (ved End Function, just for kicks), og sat markøren i funktionskoden og trykket F8, men intet sker. Normalt bliver den første linie da highlightet i gul, ikke også?
jeg er ikke helt med på dine 4 sidste indlæg ;o) Hvis du sætter breakpoint på End Function, så vil koden først stoppe når alt er overstået (hvorfor du ikke ser noget). Du skal istedet sætte breakpointet i starten (f.eks. første linie efter Dim'erne).
Når du singlestepper med F8 kan du holde musen over diverse udtryk og få værdien vist med gult. Komplicerede udtryk kan ikke vises, så da er du nødt til at markere hele udtrykket med musen og trykke Shift+F9
Nå, nu virker det som det skal. Klikkede lidt rundt i koden og blankede alle linier i underformularens Open hændelse og slog dem til 1 efter 1 og fandt synderen. Takker for hjælpen alligevel, thomas.
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.