Discussion:
Hoe ODBC koppeling maken?
(te oud om op te antwoorden)
MDK Den Haag
2005-04-11 10:07:03 UTC
Permalink
In VBA wil ik een query openen voor lezen (DAO). Deze query is gebaseerd op
een linked (ODBC) tabel. Via "connect" kan ik een verbinding maken vlg. de
help file. Alleen hoe ziet de vba code hiervoor uit?

object.connect = "ODBC;"

hoe is object gedefineerd?
gebruik ik het juist vba? wat kan ik met "ODBCConnectStr" ??

mvg,
Michiel
Gerrit Heirman
2005-04-11 10:57:54 UTC
Permalink
Met volgende commanda koppel ik een externe databank met access. De ODBC
koppeling heeft als naam ProAcc Data en de Tabel die ik inlees heet
Omnis.Verkopen.
Hopelijk kan je dit wat aanpassen...

DoCmd.TransferDatabase acImport, "ODBC", "ODBC;DSN=ProAcc Data",
acTable, "Omnis.Verkopen", "Omnis.Verkopen", , -1

Gerrit Heirman
Post by MDK Den Haag
In VBA wil ik een query openen voor lezen (DAO). Deze query is gebaseerd op
een linked (ODBC) tabel. Via "connect" kan ik een verbinding maken vlg. de
help file. Alleen hoe ziet de vba code hiervoor uit?
object.connect = "ODBC;"
hoe is object gedefineerd?
gebruik ik het juist vba? wat kan ik met "ODBCConnectStr" ??
mvg,
Michiel
MDK Den Haag
2005-04-11 11:35:01 UTC
Permalink
Onderstaan werkt niet. Ik krijg een foutmelding. Wat ik wil is dat ik een
query open (via recordset zodat ik movefirst ,etc kan gebruiken) die
gebaseerd is op een gelinked table (ODBC). Bij onderstaand krijg ik een
foutmelding! Ik kom er niet uit wat er nu fout is.

gr,
Michiel

Dim PDB As Database
Dim SearchQuery As Recordset
Set PDB = CurrentDb()
Set SearchQuery = PDB.OpenRecordset("qryPlanAttainment", dbOpenForwardOnly,
dbReadOnly, dbReadOnly)
Search.MoveFirst
John Kopmels
2005-04-11 16:14:33 UTC
Permalink
Post by MDK Den Haag
Onderstaan werkt niet. Ik krijg een foutmelding.
OpenRecordset("qryPlanAttainment", dbOpenForwardOnly)
Search.MoveFirst
zoals ik in een vorige thread al opgemerkt heb kan je in
een dbOpenForwardOnly recordset geen MoveFirst
doen zonder dat er een fout optreed ....

als je een read-only rs wil openen dan is de beste keus :
.OpenRecordset("qryPlanAttainment", dbOpenSnapshot)

verdere opties zijn dan niet nodig, nogmaals volledig voorbeeld:

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset( _
"qryPlanAttainment", dbOpenSnapshot)
'
rs.MoveFirst
Do Until rs.EOF
' doe hier iets of :
Debug.Print rs(0)
rs.MoveNext
Loop
'
rs.Close
Set rs = Nothing

groetjes -- John
MDK Den Haag
2005-04-11 16:29:17 UTC
Permalink
Best John,

Het werkt als de query gebaseerd is op een niet linked table. Het werkt
helaas niet als de query gebaseerd is op een table welke gelinked is (in mijn
geval). Ik krijg dan de fout melding "Erro 3061. Too few parameters. Expected
3". Ga je meerdere parameters invullen dan werkt het ook niet. Wat doe ik
fout?

De linked table komt van een ODBC database. Ik heb "Connect" geprobeerd maar
hier loop ik vast en/of werkt het ook niet. Ik dacht nl. dat ik eerst een
soort koppeling moet maken. Maar aan de andere kant staat de query in de
lijst van queries (menu) en kan ik hem zo openen.

Om tzt te kunnen zoeken wil ik de query als een recordset openen. Dan kan ik
movefirst etc gebruiken.
Post by John Kopmels
Post by MDK Den Haag
Onderstaan werkt niet. Ik krijg een foutmelding.
OpenRecordset("qryPlanAttainment", dbOpenForwardOnly)
Search.MoveFirst
zoals ik in een vorige thread al opgemerkt heb kan je in
een dbOpenForwardOnly recordset geen MoveFirst
doen zonder dat er een fout optreed ....
..OpenRecordset("qryPlanAttainment", dbOpenSnapshot)
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset( _
"qryPlanAttainment", dbOpenSnapshot)
'
rs.MoveFirst
Do Until rs.EOF
Debug.Print rs(0)
rs.MoveNext
Loop
'
rs.Close
Set rs = Nothing
groetjes -- John
MDK Den Haag
2005-04-11 16:55:05 UTC
Permalink
Heb nog nieuwe info:

" When a parameterized query is run in Access, Access provides an expression
service that evaluates many parameters. For example, a reference to a control
on an open form will be evaluated automatically, and the query containing
that parameter will use the value contained in that control. This expression
service is not available when you use VBA code to execute a parameterized
action query or to open a recordset based on a parameterized query that
returns records.

Your code must supply the exact parameter values to be used. This is done
through the use of QueryDef objects. QueryDef objects have a Parameters
collection containing Parameter objects that have a Name property, a Value
property and an index in the collection. These objects and properties are
used to supply the required parameter values. "

Aangezien mijn query criteria ophaalt uit een formulier bij handmatig openen
(en formulier open). In mijn geval worden blijkbaar de criteria niet
automatisch opgehaalt uit het formulier, aldus bovenstaande tekst. Vandaar,
denk ik, de foutmelding. Nu is de vraag hoe we parameters uit het formulier
in de query/vba krijg (zonder dat ik de flinke SQL string in zijn geheel in
de modele zet)?

Michiel
Post by MDK Den Haag
Best John,
Het werkt als de query gebaseerd is op een niet linked table. Het werkt
helaas niet als de query gebaseerd is op een table welke gelinked is (in mijn
geval). Ik krijg dan de fout melding "Erro 3061. Too few parameters. Expected
3". Ga je meerdere parameters invullen dan werkt het ook niet. Wat doe ik
fout?
De linked table komt van een ODBC database. Ik heb "Connect" geprobeerd maar
hier loop ik vast en/of werkt het ook niet. Ik dacht nl. dat ik eerst een
soort koppeling moet maken. Maar aan de andere kant staat de query in de
lijst van queries (menu) en kan ik hem zo openen.
Om tzt te kunnen zoeken wil ik de query als een recordset openen. Dan kan ik
movefirst etc gebruiken.
Post by John Kopmels
Post by MDK Den Haag
Onderstaan werkt niet. Ik krijg een foutmelding.
OpenRecordset("qryPlanAttainment", dbOpenForwardOnly)
Search.MoveFirst
zoals ik in een vorige thread al opgemerkt heb kan je in
een dbOpenForwardOnly recordset geen MoveFirst
doen zonder dat er een fout optreed ....
..OpenRecordset("qryPlanAttainment", dbOpenSnapshot)
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset( _
"qryPlanAttainment", dbOpenSnapshot)
'
rs.MoveFirst
Do Until rs.EOF
Debug.Print rs(0)
rs.MoveNext
Loop
'
rs.Close
Set rs = Nothing
groetjes -- John
jan
2005-04-11 17:34:30 UTC
Permalink
Michiel,

Iets als:


dim qry as dao.querydef
dim rs as dao.recordset
Set qry = CurrentDb.QueryDefs("qryPlanAttainment")
qry.Parameters(0)=Forms.frmHetFormulier.txtControl
qry.Parameters(1)=Forms.frmHetFormulier.txtAndereControl
enz.

set rs=qry.openrecordset(dbOpenSnapshot)

enz.

Jan
John Kopmels
2005-04-12 08:33:36 UTC
Permalink
Post by MDK Den Haag
Het werkt als de query gebaseerd is op een niet linked table.
Het werkt helaas niet als de query gebaseerd is op een table
welke gelinked is (in mijn geval). Ik krijg dan de fout melding
"Erro 3061. Too few parameters. Expected 3". Ga je meerdere
parameters invullen dan werkt het ook niet. Wat doe ik fout?
De linked table komt van een ODBC database.
hier kan wel het verschil zitten alleen kan het belangrijk zijn welke
odbc datasource het is, dit heb ik gevraagd maar geen antwoord

is het eventueel een SQLserver waar de odbc connectie naar linked
post anders hier de odbc connect string eens (zonder login/paswoord)
Post by MDK Den Haag
Ik heb "Connect" geprobeerd maar hier loop ik vast en/of werkt het
ook niet. Ik dacht nl. dat ik eerst een soort koppeling moet maken.
Maar aan de andere kant staat de query in de lijst van queries (menu)
en kan ik hem zo openen.
is het een 'passtrough' of een 'gewone' query ?

ps heb je de codesnippet van Jan al getest,
als het een gewone query is dan moet je :

of de parameters in de parameter list v.d. query invullen
of de parameters bij het runnen meegeven (zie code Jan)
of de parameters mbv Eval() evolueren
of de query in dynamische sql opbouwen in code in het form

groetjes -- John
MDK Den Haag
2005-04-12 19:32:05 UTC
Permalink
Heb de code van Jan gebruikt en het werkt prima. Dank daarvoor. Wat ik wel
heb gemerkt is dat je de parameter toewijzing in de juiste volgorde in vba
moet zetten, dus net zoals in de query. Anders krijg je een fout melding.
Kortom, probleem opgelost!

mvg,
Michiel
Post by John Kopmels
Post by MDK Den Haag
Het werkt als de query gebaseerd is op een niet linked table.
Het werkt helaas niet als de query gebaseerd is op een table
welke gelinked is (in mijn geval). Ik krijg dan de fout melding
"Erro 3061. Too few parameters. Expected 3". Ga je meerdere
parameters invullen dan werkt het ook niet. Wat doe ik fout?
De linked table komt van een ODBC database.
hier kan wel het verschil zitten alleen kan het belangrijk zijn welke
odbc datasource het is, dit heb ik gevraagd maar geen antwoord
is het eventueel een SQLserver waar de odbc connectie naar linked
post anders hier de odbc connect string eens (zonder login/paswoord)
Post by MDK Den Haag
Ik heb "Connect" geprobeerd maar hier loop ik vast en/of werkt het
ook niet. Ik dacht nl. dat ik eerst een soort koppeling moet maken.
Maar aan de andere kant staat de query in de lijst van queries (menu)
en kan ik hem zo openen.
is het een 'passtrough' of een 'gewone' query ?
ps heb je de codesnippet van Jan al getest,
of de parameters in de parameter list v.d. query invullen
of de parameters bij het runnen meegeven (zie code Jan)
of de parameters mbv Eval() evolueren
of de query in dynamische sql opbouwen in code in het form
groetjes -- John
Loading...