[access] query in vba wil maar niet [recordset]

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

  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
beste mede tweakers,

ik zit nu al een aantal dagen met een probleem:
ik wil namelijk een insertquery hebben die access te gecompliceerd vind (hij lust de subquery's niet en geeft een leuke mooie ongedefineerde error... -3025)

dus dan doe ik het toch in een paar lossen querys zou je zeggen... maar dat wil dus ook niet!

methode 1: Data Access Objects:
code:
1
2
3
4
5
6
7
8
9
Dim dbs As DAO.Recordset
    Dim rst As DAO.Recordset
    Dim strQls As String
    Dim frm As Access.Form
    
    strSql = "SELECT tblArtikelen.ID FROM tblArtikelen WHERE tblArtikelen.ArtikelNummer = Forms!frmAddArtikelToKrant!ArtNr AND tblArtikelen.LeverancierID= (SELECT tblLeveranciers.ID FROM tblLeveranciers WHERE tblLeveranciers.Naam = Forms!frmAddArtikelToKrant!LeverancierVeld AND tblLeveranciers.Plaats = Forms!frmAddArtikelToKrant!leveranciersPlaats )), (SELECT tblKranten.ID FROM tblKranten WHERE tblKranten.jaar = Forms!frmAddArtikelToKrant!jaar AND tblKranten.Naam=Forms!frmAddArtikelToKrant!krantnaamLijst AND tblKranten.Type=Forms!frmAddArtikelToKrant!foldertypeLijst;"
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strSql, dbOpenDynaset)
    Forms!frmAddArtikelToKrant!KrantID = rst


de fout bij deze DAO: "Compileerfout, een door de gebruiker gedefinieerd gegevenstype is niet gedefineerd." Met een highlight op "Dim dbs As DAO.Recordset"
Dat is toch knap, want dit is letterlijk overgetypt uit het MS handbook access 2002. maargoed proberen we het anders

methode 2: ActiveX Data Objects
code:
1
2
3
4
5
6
7
8
9
Dim frm As Access.Form
    Dim strQls As String
    Dim rst As ADODB.Recordset
    
    strSQL = "SELECT tblKranten.ID FROM tblKranten WHERE tblKranten.jaar = Forms!frmAddArtikelToKrant!jaar AND tblKranten.Naam=Forms!frmAddArtikelToKrant!krantnaamLijst AND tblKranten.Type=Forms!frmAddArtikelToKrant!foldertypeLijst;"
    DoCmd.OpenForm "frmAddArtikelToKrant"
    Set frm = Forms![frmAddArtikelToKrant]
    Set rst = New ADODB.Recordset
    rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic


Maar nu krijg ik: "No value given for one or more required parameters" met een highlight op "rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic"
ehm mjah oke zuig, dat werkt dus ook niet. en staat ook zo in het boek...

methode 3: veel zoeken op gathering.tweakers.net
we gebruiken nu:
code:
1
2
3
4
5
6
7
8
9
    Dim frm As Access.Form
    Dim strQls As String
    Dim rst As ADODB.Recordset
    
    strSQL = "SELECT tblKranten.ID FROM tblKranten WHERE tblKranten.jaar = Forms!frmAddArtikelToKrant!jaar AND tblKranten.Naam=Forms!frmAddArtikelToKrant!krantnaamLijst AND tblKranten.Type=Forms!frmAddArtikelToKrant!foldertypeLijst;"
    DoCmd.OpenForm "frmAddArtikelToKrant"
    Set frm = Forms![frmAddArtikelToKrant]

    rst = CurrentDb.OpenRecordset(strSQL)

dit zie ik steeds terug op de forums, maar ja hoor: ik krijg een fout
"Er zijn te weinig parameters. Het verwachte aantal = 3."


het frustratieniveau begint nu richting kookpunt te komen...
kan iemand mij helpen?

ik gebruik MS access XP nl maar ook 2k nl. allebij doen ze het niet. (het is dus 2k bestandsindeling)

Verwijderd

Staan die forms die je meegeeft in je kweerie wel open? Te weinig parameters wil meestal (altijd) zeggen dat je iets verkeerd hebt getypt of iets niet bestaat... Als een form gesloten is bestaat die variabele niet.. (in Access 97 iig, XP heb ik nog nooit mee gewerkt)

  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
deze code wordt aangeroepen als ik op een knop klik die op het formulier(frmAddArtikelToKrant) staat.

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

OZ-Gump

terug van weggeweest

Bij de fout die je bij de eerste methode krijgt, krijg ikzelf een beetje het gevoel dat je de reference naar ADO niet hebt aangezet? :?

De fouten die je bij de andere methodes krijgt lijken erop te wijzen dat je velden met een string-waarde where'd met een integer. Kijk eens goed naar de veldtypen en waar je mee controleert...?

My personal website


  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
ADO aanzetten, klinkt als een goed idee... hoe? :?

hmm mjah Jaar is nummeriek, net als alle ID's

maar moet ik bij nummeriek de query anders stellen dan?
als hij null is moet je matchen op "blaat IS null" en niet "blaat = null" maar dat geld voor integers toch niet?!

tis ook niet dat ik er quotes om zet, of doet ie dat automatisch als je een prepared statement gebruikt (bv: " Forms!frmAddArtikelToKrant!ArtNr ")

  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
OZ-Gump schreef op 01 March 2003 @ 12:17:
De fouten die je bij de andere methodes krijgt lijken erop te wijzen dat je velden met een string-waarde where'd met een integer. Kijk eens goed naar de veldtypen en waar je mee controleert...?
crap, bedoel je dat je net als met java enzo een veld moet uitlezen en dan een parseint oid doet?

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

OZ-Gump

terug van weggeweest

Wat ik eigenlijk bedoel is dat als je een voorwaarde aan een tekst-veld wil hangen, er binnen SQL enkele quotes omheen moeten staan. Dus als een van de velden in je where een tekst-veld is, zul je dat aan moeten passen met enkele quotes er omheen...

My personal website


  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
welk van bovenstaande methoden zou je gebruiken OZ-gump?
maar als ik dat zo lees dan bedoel je
code:
1
strSQL = "SELECT tblKranten.ID FROM tblKranten WHERE tblKranten.jaar = 'Forms!frmAddArtikelToKrant!jaar' AND ...

dan lijkt het me dat ie niet meer referenced naar Forms!frmAddArtikelToKrant!jaar maar dat als de text ziet.

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

OZ-Gump

terug van weggeweest

Ikzelf doe het binnen Access meestal met DAO. Maareh.. ik bedoel eigenlijk het volgende:
Visual Basic .NET:
1
strSQL = "SELECT tblKranten.ID FROM tblKranten WHERE tblKranten.jaar = '" & Forms!frmAddArtikelToKrant!jaar & "' AND ...
of, zoals het ook zou mogen
Visual Basic .NET:
1
strSQL = "SELECT tblKranten.ID FROM tblKranten WHERE tblKranten.jaar = '" & [Form_frmAddArtikelToKrant].jaar & "' AND ...
Snappie? Dan vul je in de SQL-string netjes de waarde van het veld in! Op voorwaarde dat het veld jaar dus een tekstveld is he!!!

En dan nog even een aantekening: de spaties tussen de enkele en dubbele quotes komen door de forumsoftware. Binnen de code doe ik dat (meestal) niet, omdat het kan dat SQL daar moeilijk over doet (gebeurt meestal niet, maar ja ..... better safe than sorry of iets was het.

My personal website


  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
hmm zal ik zo eens proberen.
2 opmerkingen:
1. wat bedoel je precies met ado reference aanzetten en hoe doe ik dat?
2. als het een textveld is die notatie: "Standaard getalnotatie" heeft, dan is dat geen probleem?

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

OZ-Gump

terug van weggeweest

Elke tekstveld binnen Access heeft bij een query quotes nodig.
Een reference aanzetten doe je in je code-editor-scherm (drie keer woordwaarde?) op tools te klikken en vervolgens references te kiezen. Hier kun je nog veel meer dingen dan alleen ADO aanzetten. Kun je lekker veel componenten gebruiken!

Succes...

My personal website


  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
drat:
"gegevenstypen komen niet overeen in criterium expression"
[code]
strSQL = "SELECT tblKranten.ID FROM tblKranten WHERE tblKranten.jaar = '" & Forms!frmAddArtikelToKrant!jaar & "' AND tblKranten.Naam='" & Forms!frmAddArtikelToKrant!krantnaamLijst & "'AND tblKranten.Type='" & Forms!frmAddArtikelToKrant!foldertypeLijst & "'"
[/code/ vind ie niet lief...

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

OZ-Gump

terug van weggeweest

Zijn al die velden dan strings?
Ik bedoel dus: van welk veldtype zijn de velden tblKranten.jaar, tblKranten.Naam en tblKranten.Type?

Wat voor type hebben ze dus in de TABEL? Aan de hand daarvan moeten er al dan niet quotes staan...

My personal website


  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
jaar = nummeriek
naam en type zijn tekst
hmm dus alleen bij jaar géén quotes en bij de rest wel?

  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
OZ-gump: doe me een plezier:
type hier even de code voor een willekeurige blaat query zoals jij die zou doen.
de hele sub met initialisaties etc.

dan kan ik eens kijken of ik wat anders vergeten ben

  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
code:
1
2
3
4
5
6
7
Dim frm As Access.Form
    Dim strSQL As String
    Dim rst As ADODB.Recordset
    strSQL = "SELECT * FROM tblKranten WHERE Jaar=2003"
    Set frm = Forms![frmAddArtikelToKrant]
    Set rst = New ADODB.Recordset
    rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic


geeft geen error.
zodra ik er
code:
1
strSQL = "SELECT * FROM tblKranten WHERE Jaar='2003'"
van maak geeft ie een "Gegevenstypen komen niet overeen in criteriumexpressie." error.


met
code:
1
strSQL = "SELECT * FROM tblKranten WHERE Jaar=Forms!frmAddArtikelToKrant!jaar"

"No value given for one or more required parameters"

  • B3U5
  • Registratie: December 2001
  • Laatst online: 09-08 19:30
code:
1
strSQL = "SELECT * FROM tblKranten WHERE Jaar=" & Me![jaar].Value

lijkt het wel te doen...
Pagina: 1