[Access]SQL uitvoer naar variabele

Pagina: 1
Acties:

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
In navolging op mijn vorige topic:

[topic=464201]

Vraag ik me dus af hoe ik in VBA een SQL statement kan uitvoeren en dan de output daarvan in een variabele krijg. Als ik nl var1=Currentdb.Execute(strsql) doe krijg ik dus de fout melding die ik ook beschijf in mijn vorige topic:
hmm, als ik currentdb.excute(strSQL) dan krijg ik een foutmelding:
Compileerfout

Er wordt een Function of variabele verwacht.

Terwijl ik in een andere database dezelfde instructies wel kan gebruiken!!
Ik heb om het probleem uit het vorige topic op te lossen een query gemaakt die de totalen berekent. Die totalen wil ik in een veld hebben in een formulier en dan kan ik daarmee verder rekenen. Maar daarvoor moet ik eerst de query uitvoeren en dan de waardes uitlezen, in een variabele plaatsen en dan in het veld plaatsen. Hoe doe ik dit?

Hail to the king baby!


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Execute is een procedure en geen function; een procedure kan geen waarde returnen.

Ik kan geen VB en al helemaal geen VBA, maar je kunt toch aan de waarden via uw recordset?

https://fgheysels.github.io/


Verwijderd

Als je het persé wil kun je gebruik maken van het DLookup statement. Met een beetje kunst en vliegwerk zou je daarmee 1 variabele kunnen vullen met het resultaat van je query. Kun je zelfs rechtstreeks in de source van je veld kunnen zetten, wordt 'ie ook nog automatisch geupdate als bijbehorende waarden veranderen.

Maar ga het niet proberen met Execute, want zoals whoami zeer terecht meldt is dat een procedure en geen functie. Mijn persoonlijke voorkeur is overigens ook een nette RecordSet, dat is wel zo leesbaar.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06:09

Tomatoman

Fulltime prutser

Kleine aanpassing van de laatste posting in het vorige topic:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim rstRecorset As Recordset
Dim totaal_var As Long, strSQL As String
strSQL = _
  "SELECT Sum(Aantal) As SomAantal " & _
  "FROM Mutaties " & _
  "WHERE (artikelcode = '" & Artikelcode_var & "') " & _
  "GROUP BY artikelcode;"   

Set rstRecorset = CurrentDb.Execute(strSQL)

totaal_var = rstRecorset.Fields("SomAantal").Value
'Haal nu je kunstjes uit met totaal_var

Set rstRecorset = Nothing

Als dit niet werkt, kun je nog proberen
code:
1
  "SELECT Sum(Aantal) As SomAantal " & _

te vervangen door
code:
1
  "SELECT First(Sum(Aantal)) As SomAantal " & _

Dan weet je zeker dat je precies 1 record ophaalt.

Een goede grap mag vrienden kosten.


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
Ik heb alles net als jij ingevoerd alleen dit gaat niet goed:
code:
1
Set rstRecorset = CurrentDb.Execute(strSQL)

Dan krijg ik die foutmelding weer!!

Hail to the king baby!


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
Op dinsdag 23 april 2002 00:56 schreef IJskoud het volgende:
Als je het persé wil kun je gebruik maken van het DLookup statement. Met een beetje kunst en vliegwerk zou je daarmee 1 variabele kunnen vullen met het resultaat van je query. Kun je zelfs rechtstreeks in de source van je veld kunnen zetten, wordt 'ie ook nog automatisch geupdate als bijbehorende waarden veranderen.

Maar ga het niet proberen met Execute, want zoals whoami zeer terecht meldt is dat een procedure en geen functie. Mijn persoonlijke voorkeur is overigens ook een nette RecordSet, dat is wel zo leesbaar.
thnx voor de tip, die dlookup functie werkt heel wat beter! Alleen krijg ik nog een foutmelding dat de gegevenstypen niet overeenkomen. Terwijl het veld een tekstveld is en de variabele een variant is??

Hail to the king baby!


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
Ok, ik heb nou dit aangemaakt:
code:
1
2
Totaal_var = DLookup("[somvanaantal]", "som_query", "[artikelcode] = " _
& Forms!Artikelen_hoofdformulier!ArtikelCode)

Volgens mij moet dit werken, alleen krijg ik dus de foutmelding dat de typen niet overeenkomen. Maar dat kan niet aangezien ze uit dezelfde tablel/query komen.

Hail to the king baby!


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Op dinsdag 23 april 2002 09:21 schreef urk_forever het volgende:
Ik heb alles net als jij ingevoerd alleen dit gaat niet goed:
code:
1
Set rstRecorset = CurrentDb.Execute(strSQL)

Dan krijg ik die foutmelding weer!!
Ja tuurlijk. Zoals ik al eerder gezegd heb, is execute een procedure en kan die dus geen waarde returnen.

https://fgheysels.github.io/


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
Op dinsdag 23 april 2002 11:48 schreef whoami het volgende:

[..]

Ja tuurlijk. Zoals ik al eerder gezegd heb, is execute een procedure en kan die dus geen waarde returnen.
Waarom zegt dan iedereen steeds dat ik dat moet gebruiken??

Hail to the king baby!


Verwijderd

of execute een funcite is of niet hangt helemaal af van de gebruikte access versie (waar nog niemand in z'n 2 draadjes om gevraagd heeft dus) gaat goed jongens!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
Op dinsdag 23 april 2002 13:18 schreef Yarvieh het volgende:
of execute een funcite is of niet hangt helemaal af van de gebruikte access versie (waar nog niemand in z'n 2 draadjes om gevraagd heeft dus) gaat goed jongens!
Er wordt dus gezegd dat het zou moeten werken terwijl dat helemaal niet zeker is??
Maar de Dlookup werkt wel goed alleen krijg ik nog steeds dezelfde foutmelding.
code:
1
Totaal_var = DLookup("[plankvoorraad]", "artikelen", "[artikelcode] = " & Forms!Artikelen_hoofdformulier!ArtikelCode)

Deze code gebruik ik, en het laatste, de criteria, geeft een type mismatch? Artikelcode is in de tabel artikelen een tekst veld. Ik weet alleen niet hoe dat in de query is, volgens mij neemt hij dat dan mee uit de tabel?

Hail to the king baby!


Verwijderd

ALs je string-variabelen meevraagt in je query moet je wel quotes om die string neerzetten, anders leest 'ie het als numerike waarde, en geeft 'ie, jawel, de beroemde type mismatch... :Z

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
Op dinsdag 23 april 2002 22:40 schreef IJskoud het volgende:
ALs je string-variabelen meevraagt in je query moet je wel quotes om die string neerzetten, anders leest 'ie het als numerike waarde, en geeft 'ie, jawel, de beroemde type mismatch... :Z
Ok, thnx a lot, een simpele google opdracht naar dlookup leverde meteen een resultaat op waarin alles goed beschreven stond. Werkt als een speer nu :)

Hail to the king baby!


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 09-09 14:39
He, alles werkt nou, alleen moet ik deze code:
code:
1
2
3
4
5
6
7
8
9
10
Dim Totaal_in_var As Long
Dim Totaal_uit_var As Long
Dim huid_voorraad_var As Long

Totaal_in_var = DLookup("[somvanaantal]", "som_query", "[artikelcode] = '" & ArtikelCode.Value & "'")
Totaal_uit_var = DLookup("[somvanaantal uitgaand]", "som_query", "[artikelcode] = '" & ArtikelCode.Value & "'")

huid_voorraad.Value = BeginVoorraad.Value + Totaal_in_var - Totaal_uit_var
ink_totaal.Value = Totaal_in_var
uitg_totaal.Value = Totaal_uit_var

Wat vaker gebruiken. Nou weet ik dat het op een of andere manier mogelijk is bovenstaande code in te voeren en dan met 1 of 2 regeljes aan te roepen. Alleen weet ik niet hoe dit precies gaat! Wie helpt me??

edit:

aangepaste code

Hail to the king baby!

Pagina: 1