Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQL (https://www.delphipraxis.net/32718-odbc-net-odbcparameter-zuweisung-von-parametern-fuer-sql.html)

r_kerber 27. Okt 2004 17:28


ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQL
 
Moin moin,

in D8 greife ich über ODBC.Net (OdbcConnection, OdbcDataAdapter und OdbcCommand) zu. In der WHERE-Klausel des Select-Statements verwende ich Parameter:
Delphi-Quellcode:
  comSelectAnsetzungen.CommandText :=
    'SELECT * FROM ansetzungen WHERE Saison = ? AND mannschaft_id = ?';
  comSelectMannschaften.Parameters.Add('@saison', OdbcType.VarChar, 10).Value :=
    sSaison;
  comSelectMannschaften.Parameters.Add('@mannschaft_id', OdbcType.Int).Value :=
     iMannschaft;
Nun sollen die Parameter zugewiesen werden. Die Zweisung des ersten Paramters (Varchar) funktioniert problemlos. Bei der Zuweisung des zweiten Parameters meldet Delphi einen Fehler:
Zitat:

[Fehler] ttVoranOheService.pas(580): Inkompatible Typen: 'Object' und 'Integer'
Im C#-Beispiel bei MSDN steht jedoch folgendes:
Code:
myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", OdbcType.Int).Value = 239
Wie setze ich das nun in Delphi um?

CalganX 27. Okt 2004 17:32

Re: ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQ
 
Hi,
hast du schonmal versucht den Integer in einen String umzuwandeln? Das wäre ja auch ein Objekt. ;)

Chris

r_kerber 27. Okt 2004 17:36

Re: ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQ
 
Habe ich, dann bekomme ich Laufzeitfehler!

CalganX 27. Okt 2004 17:39

Re: ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQ
 
Hi,
hm... und wenn du den String wieder in einen Integer umwandelst?
Hört sich zwar jetzt an, wie eine nicht sehr saubere Lösung, aber ich vermute mal dass das ein Bug ist. Aber ist dir das schonmal passiert? :gruebel:

Chris

r_kerber 27. Okt 2004 17:43

Re: ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQ
 
Zitat:

Zitat von r_kerber
Habe ich, dann bekomme ich Laufzeitfehler!

Kommando zurück. Mit dem String geht's jetzt! :oops: Muß ich gestern abend etwas falsch geamcht haben.
Bleibt weiterhin die Frage, warum das nicht mit Inter-Parametern geht. IMHO ist Int in C# ja eine Klasse und in Delphi offenbar ein "primitiver" Datentyp. :-(

sakura 27. Okt 2004 17:52

Re: ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQ
 
Zitat:

Zitat von r_kerber
IMHO ist Int in C# ja eine Klasse und in Delphi offenbar ein "primitiver" Datentyp. :-(

Integer sind auch in C# primitive Typen, allerdings unterstützt C# das sagenannte Auto-Boxing. Dieses kann leider auch zu Fehlern führen und ist deshalb in Delphi per Default aus. Also entweder:
Delphi-Quellcode:
comSelectMannschaften.Parameters.Add('@mannschaft_id', OdbcType.Int).Value := TObject(iMannschaft);
oder
Delphi-Quellcode:
{$AUTOBOX ON}
comSelectMannschaften.Parameters.Add('@mannschaft_id', OdbcType.Int).Value := iMannschaft
...:cat:...

r_kerber 27. Okt 2004 17:58

Re: ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQ
 
Bei beiden Methoden kommt zur Laufzeit:
Zitat:

System.Data.Odbc.OdbcException: ERROR [07002] [MySQL][ODBC 3.51 Driver][mysqld-4.0.14-nt]SQLBindParameter not used for all parameters
at System.Data.Odbc.OdbcConnection.HandleError(Handle Ref hrHandle, SQL_HANDLE hType, RETCODE retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(C ommandBehavior behavior, String method)
at System.Data.Odbc.OdbcCommand.ExecuteReader(Command Behavior behavior)
at System.Data.Odbc.OdbcCommand.System.Data.IDbComman d.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillFromCommand(O bject data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at ttVoranOheService.TttVoranOhe.getAnsetzungenBySais onMannschaft(String sSessionID, String sSaison, Int32 iMannschaft) in c:\inetpub\wwwroot\tt_voranohe_service\ttVoranOheS ervice.pas:line 587

r_kerber 27. Okt 2004 18:14

Re: ODBC.Net, OdbcParameter, Zuweisung von Parametern für SQ
 
Ich glaube, ich mache Schluß für heute. Es funktioniert doch. Aber wenn man die falschen Bezeichner verwendet. :oops: :wall: :oops: :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz