ich möchte Abfrageargumente übergeben.
Testbeispiel: Tabelle <Testnamen> mit Feldern <Name> und <Umsatz>
nun will ich alle DS mit Umsatz=500 haben. Aus der Hilfe habe ich folgendes
zusammengebastelt.
Set cnn1 = --> Access97-DB mit adUseClient
Set CMD.ActiveConnection = cnn1
CMD.CommandText = "select * from Testnamen"
CMD.CommandType = adCmdText
Set Par = CMD.CreateParameter("Umsatz", adDouble, adParamInput, , 500)
CMD.Parameters.Append Par -------------->
hier kommt der Fehler
Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder
unvollständige Informationen wurden angegeben.
mein Ziel war jetzt, mit
Set RST = CMD.Execute
das gewünschte Ergebnis zu bekommen.
Nun meine 3 Fragen
1. ist meine Vorgehensweise überhaupt richtig, oder habe ich die
Parameterübergabe falsch verstanden
2. warum kommt der o.g. Fehler?
3. gibt es irgendwo eine "idiotensichere" Beschreibung der Vorgehensweise
für Parameterabfragen?
besten Dank!
Gruß von
Torsten
Ra...@TorstenRank.de
das Statement würde ich schonmal so schreiben:
CMD.CommandText = "select * from Testnamen where Umsatz=?"
Das(die) Fragezeichen werden dann durch die Parameterwerte ersetzt.
HTH
GB
"Torsten" <Ra...@torstenrank.de> wrote in message
news:OauFfEdFBHA.1360@tkmsftngp07...
Danke für den ruckartigen Hinweis. Leider ändert er nichts am Problem.
Fehler ist der gleiche.
Gruß von
Torsten
Ra...@TorstenRank.de
CMD.CommandText = "select * from Testnamen WHERE Umsatz = ?"
Der Parameter muss entsprechend Syntax gebild und angehängt werden.
Wichtig dabei ist, dass der Parametertyp auch zum Feldtyp passt:
Set Par = CMD.CreateParameter("Umsatz", adDouble, adParamInput)
CMD.Parameters.Append Par
Das Recordset muss mit dem konkreten Parameterinhalt gebildet werden:
CMD!Umsatz = 500
Set RST = CMD.Execute
Günstig ist es natürlich, wenn die Objekte auch ordentlich deklariert
sind.
Dim CMD As New ADODB.Command
Dim Par As Parameter
Dim RST As New Recordset
Peter
"Torsten" <Ra...@torstenrank.de> schrieb im Newsbeitrag
news:OauFfEdFBHA.1360@tkmsftngp07...
also das funzt bei mir einwandfrei:
Dim cnn1 As ADODB.Connection
Dim CMD As ADODB.Command
Dim Par As ADODB.Parameter
Dim Rst As ADODB.Recordset
Set cnn1 = New ADODB.Connection
Set CMD = New ADODB.Command
cnn1.open "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\temp\test.mdb;Persist Security Info=False"
Set CMD.ActiveConnection = cnn1
CMD.CommandText = "select * from Testnamen where Umsatz=?"
CMD.CommandType = adCmdText
Set Par = CMD.CreateParameter("Umsatz", adDouble, adParamInput, , 500)
CMD.Parameters.Append Par
Set Rst = CMD.Execute
MsgBox (Rst.fields("Name"))
Rst.Close
Set Rst = Nothing
Set CMD = Nothing
cnn1.Close
Set cnn1 = Nothing
HTH
GB
"Torsten" <Ra...@torstenrank.de> wrote in message
news:eM5nDOeFBHA.1872@tkmsftngp07...
Danke für Eure Hilfe. Nach langem Probieren bin nun doch auf meine Fehler
gestoßen.
Ich hatte nicht CursorLocation = adUseClient sondern server. ==> geht wohl
bei Access nicht. Nun funktioniert es bis auch ein Problemchen, von dem ich
nicht weiß ob es überhaupt lösbar ist:
Der Name des Parameters hat wohl nichts zu tun mit dem Namen der zu
ersetzenden Variablen (Parameters).
Wenn ich also mehrere Parameter übergeben möchte - kann ich die richtige
Zuordnung nur über die Reihenfolge erreichen? oder kann man auch festlegen,
welcher Parameter wofür einzusetzen ist!
Beispiel:
ich habe in der Abfrage 2 Parameter vorgesehen, die ich BED_MA_NR
(Mitarbeiternr) und BED_BETRIEB nenne.
....
CMD.Parameters.Append CMD.CreateParameter("BED_MA_NR", adVarWChar,
adParamInput, 10, "52010")
CMD.Parameters.Append CMD.CreateParameter("BED_BETRIEB", adVarWChar,
adParamInput, 10, "EDEKA")
....
liefert ordentliches Ergebnis, aber umgekehrt
....
CMD.Parameters.Append CMD.CreateParameter("BED_BETRIEB", adVarWChar,
adParamInput, 10, "EDEKA")
CMD.Parameters.Append CMD.CreateParameter("BED_MA_NR", adVarWChar,
adParamInput, 10, "52010")
....
bringt 0 Datensätze, da die Reihenfolge der Parameterübergabe nicht mehr
stimmt.
Kann man die Zuordnung über Namen festlegen, wenn ja wie? Ich finde keine
Eigenschaft oder Properties die das realisiert?
Gruß von
Torsten
Ra...@TorstenRank.de
Torsten,
zur Erinnerung an Dein Ursprungsposting:
"Torsten" <Ra...@torstenrank.de> schrieb im Newsbeitrag
news:OauFfEdFBHA.1360@tkmsftngp07...
...
> Set cnn1 = --> Access97-DB mit adUseClient
Du kannst bei Access-Dateien auch den serverseitigen Cursur nutzen. Es
gibt da aber einige Besonderheiten, die zu beachten sind, z.B. die
IRowSetIdentity.
...
> Der Name des Parameters hat wohl nichts zu tun mit dem Namen der zu
> ersetzenden Variablen (Parameters).
> Wenn ich also mehrere Parameter übergeben möchte - kann ich die
richtige
> Zuordnung nur über die Reihenfolge erreichen? oder kann man auch
festlegen,
> welcher Parameter wofür einzusetzen ist!
Die Parameter werden von links nach rechts im SQL-String gesetzt. Mit
CreateParameter gibst Du ihnen Namen und die Append-Reihenfolge muss der
Reihenfolge von links nach rechts entsprechen. Danach kannst Du über den
Namen wahllos zugreifen.
Peter