Update query volgnummer geeft 3075 fouot

Status
Niet open voor verdere reacties.

frankBal

Gebruiker
Lid geworden
10 jul 2012
Berichten
8
Onderstaande code werkte in 2003 perfect, echter in 2010 geeft het problemen.

Er wordt wel een kooinummer gevuld, maar alle kooinummers zijn gelijk en moeten oplopend zijn.

Private Sub Command0_Click()

Dim stDocName As String
Dim stDocName1 As String
Dim stLinkCriteria As String

Dim DB As Database ' current database
Dim rs As Recordset ' holds query resultset
Dim QD As QueryDef
Dim strSQL As String
Dim nTeller As Integer
MsgBox "Je gaat nu de kooinummers vullen, weet je zeker dat je alle inzendingen verwerkt hebt?", vbOKOnly, "Kooinummers vullen"
Set DB = CurrentDb()
Set QD = DB.QueryDefs("QRY_kooinummers_vullen")
' QD(":WNR") = CStr(ChangeRec)
' QD(":Booked") = 1
Set rs = QD.OpenRecordset(dbOpenForwardOnly)
DoCmd.SetWarnings True
nTeller = Eerstekooi
While Not rs.EOF
nTeller = 0
nTeller = nTeller + 1
Debug.Print rs.Fields(3) & " Kooinr=" & CStr(nTeller)

strSQL = "UPDATE tbl_inzendingen SET tbl_inzendingen.Kooinummer = " & CStr(nTeller)
strSQL = strSQL + "UPDATE tbl_inzendingen SET tbl_inzendingen.Kooinummer =' " & CStr(nTeller) & " ' "
' strSQL = strSQL + " WHERE tbl_inzendingen.ID_Inzending = " & CStr(rs.Fields(3)) & ";"
DoCmd.RunSQL strSQL

rs.MoveNext
Wend
MsgBox "Als je het goed gedaan hebt, kan je de kooinummers in de het formulier inzendigen terugvinden", vbOKOnly, "Kooinummers vullen"
End Sub

Waar zit de fout??

alvast bedankt.
 
Deze code zou het in Access 2003 ook niet moeten doen; ik vertrouw je strsql opbouw niet. ALs ik die er uitlicht dan komt er dit uit:

Code:
UPDATE tbl_inzendingen SET tbl_inzendingen.Kooinummer = 0UPDATE tbl_inzendingen SET tbl_inzendingen.Kooinummer =' 0 '

Twee keer UPDATE achter elkaar in één string?

Zou je trouwens je code kunnen opmaken met de CODE knop? Wordt-ie een stuk leesbaarder van ;)
 
Update kooinummer werkt niet

Octafish,

Je hebt gelijk. Ik heb even de code uit de oude database gehaald en hierin geplakt.
bij strSQL = strSQL + " WHERE tbl_inzendingen.ID_Inzending = " & CStr(rs.Fields(3)) & ";" krijg ik de fout oneigenlijk gebruik van null.
In de 2003 versie werkte deze prima, in de 2007 versie ook nog alleen in de 2010 versie niet meer!
Ik snap helaas niet waarom.

Code:
Private Sub Command0_Click()

Dim stDocName As String
Dim stDocName1 As String
Dim stLinkCriteria As String

Dim DB As Database  ' current database
Dim rs As Recordset ' holds query resultset
Dim QD As QueryDef
Dim strSQL As String
Dim nTeller As Integer
MsgBox "Je gaat nu de kooinummers vullen, weet je zeker dat je alle inzendingen verwerkt hebt?", vbOKOnly, "Kooinummers vullen"
Set DB = CurrentDb()
Set QD = DB.QueryDefs("QRY_kooinummers_vullen")
' QD(":WNR") = CStr(ChangeRec)
' QD(":Booked") = 1
Set rs = QD.OpenRecordset(dbOpenForwardOnly)
DoCmd.SetWarnings False
nTeller = Eerstekooi
While Not rs.EOF
    nTeller = nTeller + 1
    Debug.Print rs.Fields(3) & " Kooinr=" & CStr(nTeller)
    
    strSQL = "UPDATE tbl_inzendingen SET tbl_inzendingen.Kooinummer = " & CStr(nTeller)
    strSQL = strSQL + " WHERE tbl_inzendingen.ID_Inzending = " & CStr(rs.Fields(3)) & ";"
    DoCmd.RunSQL strSQL
    
    rs.MoveNext
Wend
MsgBox "Als je het goed gedaan hebt, kan je de kooinummers in de het formulier inzendigen terugvinden", vbOKOnly, "Kooinummers vullen"
End Sub
 
Ik snap niet helemaal waarom je dit doet: CStr(nTeller). Dat lijkt er op alsof Kooinr een tekstveld is.
 
Update kooinummer werkt niet

Ik heb deze code ooit eens gekregen om de kooinummers te vullen.

Deze moeten in de tabel inzendingen gevuld worden, maar op basis van een bepaalde volgorde die weer bepaald wordt door de query QRY_kooinummers_vullen

zolang ik de database in een oudere versie gebruikte werkte het prima.
Ik wet echter niet meer waarom deze opbouw zo is, en hoe het beter kan. Zolang het werkte had ik er geen problemen mee.
Nu geeft hij niet dat wat ik ervan verwacht en het probleem is dat
Code:
strSQL = strSQL + "UPDATE

geeft de query weer, maar bij de tweed query wordt het "1update"

kan je mij uit de brand helpen?

BVD

Frank
 
Probeer 'm zo eens, want de SQL kan een stukkie korter:
Code:
    strSQL = "UPDATE tbl_inzendingen SET Kooinummer = " & nTeller & " WHERE ID_Inzending = " & rs.Fields(3)
 
Update kooinummer werkt niet

Ik krijg nu de fout melding:

"Syntaxfout (operator ontbreekt) in query expressie ID_inzending =.

Frank
 
Dan is je recordset niet (goed) geopend, want zo te zien ontbreekt nu de waarde van rs.Fields(3).
 
Foutmelding is weg, alleen zijn nu alle kooinummers 1. Er wordt niet opgeteld dus!

rs.Fields(3) komt toch uit de query vandaan? Dat is kooinummer.

Frank
 
Zonder voorbeeldje wordt het erg lastig...
 
Michel

Geprobeerd de database als attach toe te voegen.
Lukt helaas niet
Kan je aangeven wat je zien wilt?

alvast bedankt.

Frank
 
Je gebruikt nogal wat objecten in je code, dus zonder voorbeeld wordt het erg lastig. We hoeven uiteraard niet de complete db te zien, alleen de noodzakelijke tabellen en queries en het formulier zou al genoeg moeten zijn. Uiteraard hoeven er maar een paar records in de tabellen te zitten, genoeg om de procedure te reproduceren. Ik neem aan dat je hem al gestript hebt (alle overbodige onderdelen al er uit etc)? En gecomprimeerd en gezipt? Kijk ook of er afbeeldingen zijn ingevoegd i.p.v. gekoppeld, die maken een db ook snel groot. Laatste tip: met winrar kun je 'm opsplitsen in brokken van 100kb. Dan kun je meestal wel uploaden.
 
Behalve dat je db in mijn ogen nogal slecht gemaakt is (verkeerde relaties, verkeerde opzoeklijsten in tabellen, repeterende gegevens etc) klopt het belangrijkste deel van je lus niet. Die zou er zo uit moeten zien:

Code:
    nTeller = Eerstekooi
    While Not rs.EOF
        nTeller = nTeller + 1
        Debug.Print rs.Fields(3) & " Kooinr=" & CStr(nTeller)
        strSQL = "UPDATE tbl_inzendingen SET Kooinummer = " & nTeller & " WHERE ID_Inzending = " & rs.Fields(0)
        DoCmd.RunSQL strSQL
        rs.MoveNext
    Wend

In jouw code reset je bij elk nieuw record de waarde van nTeller, en dat kan uiteraard niet de bedoeling zijn. Dus voordat je de lus start, moet je de waarde instellen, daarna moet hij alleen nog worden verhoogd. Verder kijk je volgens mij naar het verkeerde veld in de bronquery. Ik heb daar het veld [ID_Inzending] vooraan gezet, en bij mij werkt hij verder wel.
 
Michel.

IK heb de query aangepast en inderdaad de meeste velden worden inderdaad met een kooinummer gevuld.
Een aantal slaat hij nog over maar daar meot ik nog even induiken,

dankje voor de inzet.

Frank.
 
Dat komt omdat je basisquery niet alle records meeneemt, en eerlijk gezegd verbaast mij dat niks, want er zitten hele rare relaties tussen de tabellen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan