[VB]Query opbouw probleem

Pagina: 1
Acties:

  • mboy
  • Registratie: December 2001
  • Laatst online: 20-06-2024
Goed ik zal proberen het hele verhaal zo duidelijk mogelijk uit te leggen.

Ik heb in Access een kleine database gebouwd (6 tabellen). Nu is mijn doel om door middel van een query in VB en ADO de juiste gegevens uit de database te halen. Mijn query ziet er als volgt uit:

code:
1
2
3
4
5
SELECT CONTACT.Contact_ID, CONTACT.Contactnaam, CONTACT.Adres, 
CONTACT.Telefoon, CONTACT.Plaats_adres, CONTACT.Postcode_adres, 
CONTACT.[E-mail]
FROM CONTACT
WHERE (((CONTACT.Contact_ID)= 'contacten'));


Bovenstaande query heb ik door Access laten generen en werkt in principe ook, totdat hij de where qlausule (<--schrijf je dat zo?) moet gaan uitvoeren. 'Contacten' is een public variabele die als integer in een module is opgenomen. Deze query is opgenomen in de properties van mijn Adodc object onder recourdsource.

Elke keer dat ik die query uitvoer krijg ik de volgende foutmelding: "Data type mismatch in criteria expression". Goed, ik dus denken dat er iets mis is met m'n datatype, maar ik kan niet vinden waar en op welke plek in m'n code. Contact_ID is overigens een autonumeriek veld.

Dit is de code waar m'n textveld aan de public variabele wordt gekoppeld:

code:
1
contacten = Val(Text2.Text)


Het is toch zo dat een string een integer type wordt op bovenstaande manier?(voor zover dat mogelijk is natuurlijk). Ik hoop dat ik zo genoeg info heb gegeven?

Verder heb ik de afgelopen 4 uur lopen zoeken hier op GoT (Search werkt relaxed) en op Google, maar ik krijg zo weinig hits over vb applicaties die van een Access database gebruik maken. Het gaat veelal over connecties met andere databases.
Ook heb ik al enorm veel combinaties geprobeerd, die ik van verschillende fora heb getrokken. En uiteraard heb ik mijn boek geraadpleegd, maar dat is nog maar een beginnersboek (Step by Step)

Mijn vragen zijn dus:
Kan het sowieso op bovenstaande manier? En zo ja, hoe zou ik dan mijn where qlausule in elkaar moeten zetten?

[ Voor 8% gewijzigd door mboy op 19-02-2003 11:01 . Reden: lay-out gefixed ]


Verwijderd

integers moeten niet tussen ' ' staan maar select * from mytable where userid = 1 ipv = '1'

en je vb code moet zijn:

contacten = CInt(Val(Text2.Text))

[ Voor 36% gewijzigd door Verwijderd op 19-02-2003 00:16 ]


  • mboy
  • Registratie: December 2001
  • Laatst online: 20-06-2024
Verwijderd schreef op 19 februari 2003 @ 00:15:
integers moeten niet tussen ' ' staan maar select * from mytable where userid = 1 ipv = '1'

en je vb code moet zijn:

contacten = CInt(Val(Text2.Text))
Goed, die vb code is veranderd. Het probleem bij die query is alleen dat er niet direct een integer maar een variabele in moet komen te staan, namelijk contacten. Wanneer ik daar geen ' ' gebruik dan krijg ik de volgende foutmelding: "Too few paremeters. Expected 1". En dat wil volgens mij zeggen dat ik nog wat mis.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 15:34

mulder

ik spuug op het trottoir

Dan is de variable contacten waarschijnlijk leeg.

oogjes open, snaveltjes dicht


  • mboy
  • Registratie: December 2001
  • Laatst online: 20-06-2024
Nee, dat is die niet, want wanneer variabele aanroep door hem weer te geven in een text object dan staat daar netjes de juiste numerieke waarde.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:16

gorgi_19

Kruimeltjes zijn weer op :9

Zet je query eens op het scherm en zet deze ook eens hier neer. (Waarschijnlijk zie je dan zelf de fout ook.. :))

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mboy
  • Registratie: December 2001
  • Laatst online: 20-06-2024
Sorry, maar ik zie hem echt niet... Wanneer ik dezelfde query gebruik en in plaats van 'contacten' bijv. 1 invul, dan werkt de query wel perfect.

Probleem is, dat ik gewoon geen idee, hoe ik een query moet aangeven, dat de voorwaarde in het where gedeelte een variabele is, en geen string.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

OK, als contacten een variabele is, en je bouwt deze query runtime, dan is dit denk ik de oplossing:
als het veld Contact_ID een integer is:
code:
1
2
3
4
set rs = dat.openrecordset("SELECT CONTACT.Contact_ID,
CONTACT.Contactnaam, CONTACT.Adres, CONTACT.Telefoon,
CONTACT.Plaats_adres, CONTACT.Postcode_adres, CONTACT.[E-mail]
FROM CONTACT WHERE CONTACT.Contact_ID= " & contacten)
en als het veld Contact_ID een string is:
code:
1
2
3
4
set rs = dat.openrecordset("SELECT CONTACT.Contact_ID,
CONTACT.Contactnaam, CONTACT.Adres, CONTACT.Telefoon,
CONTACT.Plaats_adres, CONTACT.Postcode_adres, CONTACT.[E-mail]
FROM CONTACT WHERE CONTACT.Contact_ID= '" & contacten & "'")

Ik heb geen spaties tussen de enkele en dubbele quotes gezet
edit:
blijkbaar doet GoT dat wel voor me:?
omdat hij dat anders wel eens in je voorwaarde-string zou kunnen bakken, en da's niet de bedoeling.

[ Voor 8% gewijzigd door OZ-Gump op 19-02-2003 13:36 ]

My personal website


  • mboy
  • Registratie: December 2001
  • Laatst online: 20-06-2024
Bedankt voor de reacties, maar ik doe het niet op bovenstaande manier. Ik zal proberen uit te leggen hoe ik te werk ga. Ik maak eerst een nieuw adodc object aan op m'n formulier. Vervolgens open ik daar de properties van.

Onder de tab General kies ik voor ODBC Datasource name, waarna ik de benodigde gegevens aanmaak. Dat werkt allemaal. Nog geen problemen op dat moment. Dan naar het tabje authentication, waar ik niks invul, want dat is niet nodig. Dan schuif ik door naar RecordSource, en daar gaat het fout. Ik kies in de combobox voor adCmdText zodat ik gebruik kan maken van het query vak.

In het sql vak vul ik de query in, en wanneer ik een vaste waarde gebruik in het where gedeelte gaat alles goed dus zo:

code:
1
2
3
4
5
SELECT CONTACT.Contact_ID, CONTACT.Contactnaam, CONTACT.Adres, 
CONTACT.Telefoon, CONTACT.Plaats_adres, CONTACT.Postcode_adres, 
CONTACT.[E-mail]
FROM CONTACT
WHERE (((CONTACT.Contact_ID)=3));


Wil ik echter gebruik maken van de publieke variabele 'contacten' dan weet ik:
A. niet eens zeker of dat op bovenstaande manier kan en
B. wanneer dit zou kunnen, hoe maak ik adodc dan in vredesnaam wijs dat het een variabele is en geen string. Want daarvan gaat hij de hele tijd compleet over de zeik :(

Ik sta open om het op de manier te doen, zoals ik vaak vind in de search en zoals hierboven door OZ-Gump is beschreven, maar ik kan niet vinden hoe dat precies moet. Vaak vind ik alleen maar enkele stukken code, maar nooit een geheel, wat het moeilijk maat er ook maar een touw aan vast te knopen...

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

OK, dat maakt de zaak alweer iets duidelijker. Nou zou je mijn vorige post kunnen gebruiken om formulier.adodc_object.recordsource = query te doen op het moment dat je hoofdform opent. Zo wijs je dus de string (die je in code bouwt) toe aan de recordsource-property van het ADO-object.
Wellicht zou je eens kunnen proberen om in plaats van contacten modulenaam.contacten te proberen. Als dat niet lukt, probeer het dan eens met rechte haken ([]) er omheen. Mocht dat nog niet werken, dan is misschien het runtime toekennen van de query aan de recordsource property niet eens zo'n slecht idee....?

My personal website


  • mboy
  • Registratie: December 2001
  • Laatst online: 20-06-2024
Joepie het is gelukt. :) aaaahh, echt relaxed. Hier heb ik echt twee dagen mijn hoofd over zitten breken.

Met behulp van het antwoord van OZ-Gump en een thread die ik via Google heb gevonden.

In principe stond in bovenstaande post ongeveer hetzelfde, maar die begreep ik niet helemaal. :P In iedergeval: Hulde _/-\o_

Mijn avond kan niet meer stuk!!
Pagina: 1