INSERT probleem

Status
Niet open voor verdere reacties.

maurann

Gebruiker
Lid geworden
22 jul 2007
Berichten
117
Hallo,
Ik ben nieuw zowel in 't programmeren als op dit forum dus indien ik wat klunzig overkom
mijn excuses.
Als beginnend vba programmeurtje heb ik een probleem met het volgende:
Bedoeling is vanuit een formulier (FormTicket) met een knop een query te laten werken
die de tabel Klantenkaart aanvult. Access heeft echter een foutmelding en
de tabel Klantenkaart wordt niet 'geupdate' . Access heeft fout 3075 aan tijdens
de uitvoering: syntaxisfout (operator ontbreekt) in query-expressie.
Voor mij een vraagteken wat fout gaat.

De VBAcode die de commandbutton oproept:
Dim db As Database
Dim rs1 As Recordset
Dim strSQL As String
Set db = CurrentDb()
Set rs1 = dbOpenRecordset ("QryOrderTotaleSom1", dbOpenSnapshot)
rs1.MoveFirst
strSQL= "Insert Into Klantenkaart (Orderdatum, OrderID,TotaleSomKorting, Korting, Naamvoornaam) VALUES ("
strSQL= strSQL & "'" & rs1[OrderID] & "'" & rs1![Orderdatum]& "'" & rs1![TotaleSomKorting] & "'" & rs1![Korting] & "'" & rs1![naamvoornaam] & "''" & ");"
db.Execute strSQL, dbFailOnError
OryOrderTotaleSom1 :
SELECT Orders.OrderId, Orders.Klantnummer, Sum([Verkoopprijs]*[Aantal]) AS TotaleSomKorting, Orderdetail.Korting, Klant.Naamvoornaam, Orders.Orderdatum
FROM (Klant INNER JOIN Orders ON Klant.Klantnummer = Orders.Klantnummer) INNER JOIN Orderdetail ON Orders.OrderId = Orderdetail.OrderId
GROUP BY Orders.OrderId, Orders.Klantnummer, Orderdetail.Korting, Klant.Naamvoornaam, Orders.Orderdatum
HAVING (((Orderdetail.Korting) Is Null))
ORDER BY Orders.OrderId DESC;

Voila,
Hopelijk is er iemand daarbuiten die mij kan helpen.

Ik zou er dankbaar voor zijn.
Groeten,
Maurann
 
Moeten hier geen comma's tussen?

Code:
strSQL= strSQL & "'" & rs1[OrderID] & "[B],[/B]'" & rs1![Orderdatum]& "[B],'[/B]" & rs1![TotaleSomKorting] & "[B],[/B]" & rs1![Korting] & "[B],[/B]" & rs1![naamvoornaam] & "''" & ");"

Je hebt zo te zien 5 velden, maar leest volgens mij zonder de comma's alleen iets in op het eerste veld.
De comma's zorgen er voor dat Access 'ziet' wat je 5 waarden zijn
Het nut van de eerste en laatste &""& ontgaat me maar kan neem ik ook geen kwaad.

Probeer (ook) deze eens:
Code:
strSQL= strSQL & rs1[OrderID] & "'," & rs1![Orderdatum]& ",'" & rs1![TotaleSomKorting] & ",'" & rs1![Korting] & "'," & rs1![naamvoornaam] & ");"

Beide strSQL regels zouden volgens mij ook wel samengevoegd kunnen worden tot één regel;
Code:
strSQL= "Insert Into Klantenkaart (Orderdatum, OrderID,TotaleSomKorting, Korting, Naamvoornaam) VALUES (" & rs1[OrderID] & ",'" & rs1![Orderdatum]& ",'" & rs1![TotaleSomKorting] & ",'" & rs1![Korting] & ",'" & rs1![naamvoornaam] & ");"
 
Laatst bewerkt:
Moeten hier geen comma's tussen?

Code:
strSQL= strSQL & "'" & rs1[OrderID] & "[B],[/B]'" & rs1![Orderdatum]& "[B],'[/B]" & rs1![TotaleSomKorting] & "[B],[/B]" & rs1![Korting] & "[B],[/B]" & rs1![naamvoornaam] & "''" & ");"

Je hebt zo te zien 5 velden, maar leest volgens mij zonder de comma's alleen iets in op het eerste veld.
De comma's zorgen er voor dat Access 'ziet' wat je 5 waarden zijn
Het nut van de eerste en laatste &""& ontgaat me maar kan neem ik ook geen kwaad.

Probeer (ook) deze eens:
Code:
strSQL= strSQL & rs1[OrderID] & "'," & rs1![Orderdatum]& ",'" & rs1![TotaleSomKorting] & ",'" & rs1![Korting] & "'," & rs1![naamvoornaam] & ");"

Beide strSQL regels zouden volgens mij ook wel samengevoegd kunnen worden tot één regel;
Code:
strSQL= "Insert Into Klantenkaart (Orderdatum, OrderID,TotaleSomKorting, Korting, Naamvoornaam) VALUES (" & rs1[OrderID] & ",'" & rs1![Orderdatum]& ",'" & rs1![TotaleSomKorting] & ",'" & rs1![Korting] & ",'" & rs1![naamvoornaam] & ");"
 
Bedankt voor de reactie.
Paste de voorgestelde wijzigingen toe maar Access gaf 't volgende aan:
Fout 3075 tijdens uitvoering: syntaxisfout (operator ontbreekt in query-expressie
toegepaste vbacode:
Dim db As Database
Dim rs1 As Recordset
Dim strSQL As String
Set db = CurrentDb()
Set rs1 = db.OpenRecordset("QryOrderTotaleSom1", dbOpenSnapshot)
rs1.MoveFirst
strSQL = "Insert Into Klantenkaart(Orderdatum, Orderid, TotaleSomKorting, Korting, Naamvoornaam) VALUES ("
strSQL = strSQL & rs1![Orderdatum] & "'," & rs1![OrderId] & ",'" & rs1![TotaleSomKorting] & ",'" & rs1![Korting] & "'," & rs1![naamvoornaam] & ");"
db.Execute strSQL, dbFailOnError
Wat ik ook wil is dat de code achter de button telkens update wanneer ik
een ander record oproep met het formulier, nu plaatst de code enkel de laatste record in tabel Klantenkaart.

Groeten,
Maurann
 
Zonder de bijbehorende mdb is het gokken naar je velddefinities, sluit in het vervolg even je mdb bij.
Volgens mij moet dit beter werken:

strSQL = "Insert Into Klantenkaart(Orderdatum, Orderid, TotaleSomKorting, Korting, Naamvoornaam) VALUES ("
strSQL = strSQL & "'" & rs1![Orderdatum] & "'," & rs1![OrderId] & ", " & rs1![TotaleSomKorting] & ", " & rs1![Korting] & ",'" & rs1![naamvoornaam] & "');"
 
Zonder de bijbehorende mdb is het gokken naar je velddefinities, sluit in het vervolg even je mdb bij.
Volgens mij moet dit beter werken:

strSQL = "Insert Into Klantenkaart(Orderdatum, Orderid, TotaleSomKorting, Korting, Naamvoornaam) VALUES ("
strSQL = strSQL & "'" & rs1![Orderdatum] & "'," & rs1![OrderId] & ", " & rs1![TotaleSomKorting] & ", " & rs1![Korting] & ",'" & rs1![naamvoornaam] & "');"
 
Access heeft , na aanpassing, nog steeds volgend bericht:
fout 3134 tijdens uitvoering, de instructie Insert bevat een syntaxisfout.
In bijlage mijn uitgedunde versie van de db.
 

Bijlagen

OK, met de mdb erbij wordt het heel simpel. Dit is de code zoals je die nu gebruikt:
strSQL = "Insert Into Klantenkaart(Orderdatum, Orderid, TotaleSomKorting, Korting, Naamvoornaam) VALUES ("
strSQL = strSQL & "'" & rs1![Orderdatum] & "'," & rs1![OrderId] & ", " & rs1![TotaleSomKorting] & ", " & rs1![korting] & ",'" & rs1![naamvoornaam] & "');"

Dit is wat deze code produceert:
Insert Into Klantenkaart(Orderdatum, Orderid, TotaleSomKorting, Korting, Naamvoornaam) VALUES ('19-09-2007 17:27:50',1, 5, ,'dddddddddddd');

Dan valt meteen op dat er een spatie ontbreekt tussen Klantenkaart en het haakje openen:
Insert Into Klantenkaart (Orderdatum,
Verder zag ik in de tabeldefinitie van de tabel Klantenkaart dat veld Korting een tekstveld is, daar moeten dus nog enkele quotes omheen bij de waarde.
Je code moet er dus als volgt uitzien:

strSQL = "Insert Into Klantenkaart (Orderdatum, Orderid, TotaleSomKorting, Korting, Naamvoornaam) VALUES ("
strSQL = strSQL & "'" & rs1![Orderdatum] & "'," & rs1![OrderId] & ", " & rs1![TotaleSomKorting] & ", '" & rs1![korting] & "','" & rs1![naamvoornaam] & "');"

Zo zie je maar weer: als je dit soort problemen hebt moet je even je mdb posten, dan is de oplossing een stuk eenvoudiger te produceren.
 
Super! Het werkt.
Bedankt.
Maar een bijkomende vraag om de werking te optimaliseren:
met een 'button' krijg ik van mijn FormTicket een opeenvolging
van alle ticketten met de gegevens (klant, orders, orderdetails) die access in de tabellen heeft opgeslagen (acFormEdit).
Indien ik de klantenkaart met gegevens uit voorgaande ticketten wil vullen, vult hij steeds aan met het laatste record uit de query QryOrderTotaleSom1 en niet met de gegevens uit het ticket dat dan is opgeroepen.
Wat kan ik met de code doen om de gegevens van voorgaande ticketten
in de klantenkaart te krijgen - op die manier zou ik op basis van voorgaande
ticketten de klantenkaart telkens kunnen oproepen via een formulier klantenkaart.
Zo ik hoop dat het een beetje duidelijk is.
Bedankt alvast voor de reacties.

Vriendelijke groeten,
Maurann
 
Eueueuehhh, nee, ik snap er niets meer van.
In de mdb die je bijgesloten had zitten volgens mij niet de goede formulieren voor wat je nu wilt.
Kun je een nieuw voorbeeldje bijsluiten en wat duidelijker zijn wat je nu wilt dat elk knopje precies doet?
 
Eueueuehhh, nee, ik snap er niets meer van.
In de mdb die je bijgesloten had zitten volgens mij niet de goede formulieren voor wat je nu wilt.
Kun je een nieuw voorbeeldje bijsluiten en wat duidelijker zijn wat je nu wilt dat elk knopje precies doet?
 
Indien in FrmMain 'Ovezicht Ticketten' wordt opgeroepen en in een ticket, met uitzondering van eerste ticket,wordt een totaalzonderkorting ingevoerd in de tabel klantenkaart, dan resulteert dit in een aanvulling van de klantenkaart met het eerste record van QryOrderTotaleSOm1. En wat ik wil is dat de gegevens van het geopend ticket met de opslagknop (en de achterliggende vbacode) kunnen worden opgeslaan.
Bovendien wil ik dat het veld 'nummering' in de tabel klantenkaart per klant het aantal bedragen (totale som van de verkoopprijs) telt (nummering tot 10). Want vanaf 11 zou het de bedoeling zijn om de data in de tabel klantenkaart voor een klant over te schrijven naar een (te maken) tabel klantenkaartstock.
Dit is 't beoogde project.
Hopelijk brengt dit wat klaarheid.

Met vriendelijke groet,

Maurann
 

Bijlagen

Mijn vraag is gedeeltelijk beantwoord.
Ik zal eens nadenken hoe ik ze beter kan formuleren, want wellicht
maak ik het te complex.
Noot: de database is in 2 delen doorgezonden. Tabellen en Formulieren met Queries zijn gescheiden.
Bedankt Bartuls
en de groeten,

Maurann
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan