Toon posts:

[VB + ADO] lege waarden in query

Pagina: 1
Acties:
  • 235 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb echt uren zitten zoeken maar hier kan ik echt geen duidelijk antwoord op vinden.

We hebben van onze school uit een programmeer project, hiermee moeten we dus werken met een access database vanuit VB6.

We werken niet met een ADO-control maar met een handmatige verbinding:
code:
1
2
3
4
5
sConn = "Provider='Microsoft.Jet.OLEDB.4.0';" & _
        "Data Source='Ontwerpmode projectl.mdb';Persist Security Info='False';"

strSQL = "INSERT INTO Persoon (achternaam) VALUES ('" & txtAchterNaam & "');"
oConn.Execute strSQL, , adCmdText + adExecuteNoRecords



als we geen waarde opgegeven hebben krijgen we de error:
run-time error '-2147467259 (80004005)':

Het veld persoon.achternaam kan geen tekenreeks zonder gegevens zijn
Hoe kunnen we dit opvangen zonder gigantische filters te krijgen met "if then" loops :?

De query bevat wel meer velden, maar dat heb ik niet er in gezet i.v.m. de lengte v.d. query ;)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Druk de query eens af voor het uitvoeren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op 04 november 2003 @ 14:50:
Druk de query eens af voor het uitvoeren.
Weet niet precies wat je bedoeld met query afdrukken voor het uitvoeren, maar query is als ik niets invul:
code:
1
INSERT INTO persoon (achternaam) VALUES ('');

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Eerste wat je in principe bij zo'nsoort foutmelding moet doen is kijken wat voor query je uberhaupt richting de database stuurt. Dus gewoon ff een msgbox(strSQL) oid. De foutmelding doet mij namelijk vermoeden dat achternaam een verplicht veld is, maar dat txtAchterNaam helemaal niks bevat.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Janoz schreef op 04 november 2003 @ 14:57:
De foutmelding doet mij namelijk vermoeden dat achternaam een verplicht veld is, maar dat txtAchterNaam helemaal niks bevat.
Ik denk dat het veld niet verplicht is, maar dat allow zero length op false staat. FF aanpassen in acces dus.

anders checken of len(parameter) >0 is b.v. ;)

heb je trouwens al iemand ingevoerd met een enkele quote in de naam?

[ Voor 10% gewijzigd door j_du_pee op 04-11-2003 15:02 ]

kaart != map && bottel != fles
Wacht op antwoord


Verwijderd

Topicstarter
Aha, dat snapte ik al :)

maar als ik bijvoorbeeld Voornaam veld alleen query, en de rest niet maakt hij wel een record aan met de rest van de velden zoals achternaam leeg...

En hij geeft deze error ook als ik de veld tussenvoegsel niet invul, en het lijkt mij dat niet iedereen een tussenvoegsel heeft :)


edit:
Als ik wel de standaard ADO controlls gebruik werkt het wel, maar ik vind dat lelijk :)

[ Voor 15% gewijzigd door Verwijderd op 04-11-2003 15:02 ]


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

ik vermoed dat de ADO controls een lege string replacen met NULL, dan doet die query het nl wel denk ik.

Zo'n query debuggen gaat overigens vaak vrij goed door hem in een query-scherm binnen access uit te voeren ;)

(en kijk ook nog ff wat er gebeurt als je iemand met een ' (enkele quote) in de naam insert ;)

kaart != map && bottel != fles
Wacht op antwoord


Verwijderd

Topicstarter
j_du_pee schreef op 04 november 2003 @ 15:08:
ik vermoed dat de ADO controls een lege string replacen met NULL, dan doet die query het nl wel denk ik.

Zo'n query debuggen gaat overigens vaak vrij goed door hem in een query-scherm binnen access uit te voeren ;)

(en kijk ook nog ff wat er gebeurt als je iemand met een ' (enkele quote) in de naam insert ;)
Ik vul in Naam's en dit geeft:
code:
1
syntaxfout. Operator ontbreekt in query-expressie 'Naam's')

(8>

[ Voor 25% gewijzigd door Verwijderd op 04-11-2003 15:19 ]


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Verwijderd schreef op 04 november 2003 @ 15:12:
[...]


Dit geeft:
code:
1
syntaxfout in tekenreeks. In query expressie ''')

(8>
:o dat had ik nou niet verwacht >:) O-)

tip; zoeken naar escape characters

kaart != map && bottel != fles
Wacht op antwoord


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Ik gebruik in zon geval altijd een Nz() functie ( zoals die in Access bestaat )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
j_du_pee schreef op 04 november 2003 @ 15:18:
[...]


:o dat had ik nou niet verwacht >:) O-)

tip; zoeken naar escape characters
Maar dit was me grootste probleem nog niet, het gaat me nu eerst effe om dat lege velden gedoe :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Maak gewoon gebruik van parametrized queries.
P&W FAQ - SQL

[ Voor 45% gewijzigd door whoami op 04-11-2003 15:41 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 04 november 2003 @ 15:41:
Maak gewoon gebruik van parametrized queries.
P&W FAQ - SQL
Ahz kijk dat werkt daarvoor iig al, thnx :)

Nu nog effe dat NULL waarde gedoe, ik heb het al zo geprobeerd d.m.v. vbNullString, maar dat geeft nog steeds dezelfde error zoals in mijn eerst post:
code:
1
2
3
4
5
sConn = "Provider='Microsoft.Jet.OLEDB.4.0';" & _
        "Data Source='Ontwerpmode projectl.mdb';Persist Security Info='False';"

strSQL = "INSERT INTO Persoon (achternaam) VALUES ('" & txtAchterNaam & vbNullString & "');"
oConn.Execute strSQL, , adCmdText + adExecuteNoRecords

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Heb je eigenlijk al Janoz' tip eens ter harte genomen?
Print je query eens naar het scherm, en je zult zien dat er iets fout is.
Je query ziet er nl zo uit:
code:
1
INSERT INTO PERSOON (achternaam) VALUES ('blaat NULL')

Dat ziet er niet goed uit he?
Ten eerste moet je je velden scheiden met een komma, en moeten er quotes rond blaat staan, en niet rond NULL.
Ten tweede mag je slechts evenveel velden in je VALUES cluase hebben, dan dat je specifieert in je INSERT ...
Je query zou er dus zo moeten uitzien:
code:
1
2
INSERT INTO persoon (achternaam)
VALUES ('blaat')

https://fgheysels.github.io/

Pagina: 1