Ich verwende BDP für den Datenzugriff auf eine MSSQL-Datenbank. Für einfache SQL-Statements funktioniert dies auch ohne Probleme. Wenn das SQL-Statement aber eine Subquery enthält, erhalte ich immer die Fehlermeldung:
SQL State: 42000, SQL Error Code: 0
Parameter information cannot be derived from SQL Statements with sub-select queries. Set parameter information before preparing command.
Irgendwie passt diese Meldung nicht, denn ich mache genau das, was ich gemäss dieser Meldung tun soll:
Ich definiere zuerst den Commandtext (SQL-Statement), definiere danach die Parameter und füge sie zum Command-Objekt hinzu und schliesslich rufe ich MyCommand.Prepare auf.
Beispielcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var MyCommand: BDPCommand; MyParm1, MyParm2: BDPParameter; begin ... MyCommand.CommandText := 'Select * from Table1 where Field1 = ? and Field2 = ' + '(Select Field1 from Table2 where Field2 = ?)'; MyCommand.ParamCount := 2; MyParam1 := BDPParameter.Create; MyParam1.BdpType := Borland.Data.Common.BdpType.String; MyParam1.BdpSubType := Borland.Data.Common.BdpType.Unknown; MyParam1.Value := 'ABC'; MyParam1.ParamName := 'Table1_Field1'; MyCommand.Parameters.Add(MyParam1); MyParam2 := BDPParameter.Create; MyParam2.BdpType := Borland.Data.Common.BdpType.Int32; MyParam2.BdpSubType := Borland.Data.Common.BdpType.Unknown; MyParam2.Value := 2; MyParam2.ParamName := 'Table2_Field2'; MyCommand.Parameters.Add(MyParam2); MyCommand.Prepare; |
Was muss ich tun, damit das BDP-Commandobjekt auch Select-Statements mit Subqueries akzeptiert?
Martin
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.