![]() |
Datenbank: Sybase • Version: 7 • Zugriff über: BDE und ODBC
Delphi 7 und TQuery-Parameter
Hallo,
ich habe folgendes Problem, seit ich unsere Anwendung von Delphi 5 und Sybase 6 auf Delphi 7 und Sybase 7 umgestellt habe: Ich benutze eine TQuery, in welche ich folgenden SQL-Script eingetragen habe:
SQL-Code:
Im Programm selbst übergeb ich dann folgende Parameterwerte:
select df_ndl,df_datauftannahme,df_lfdnrauftrag,df_kundennr,df_kzeuro,
df_serviceart,df_belegtyp,df_vkgesamt,df_auftstatus from dba.tb_auftrag where df_ndl=:par_ndl and df_datauftannahme between :par_datauftannahme1 and :par_datauftannahme2 and df_auftstatus=:par_auftstatus order by df_kundennr,df_datauftannahme
Delphi-Quellcode:
Diese Abfrage dauert Ewigkeiten (ich arbeite noch mit der BDE), obwohl in Sybase hierfür ein Index vorgesehen ist und dieser auch, wenn ich die Abfrage direkt auf Sybase starte, benutzt wird und mir sofort ein Ergebnis anzeigt.
params.parambyname('par_ndl').asstring:='CGN';
params.parambyname('par_datauftannahme1').asdatetime:=strtodate('01.06.2005'); params.parambyname('par_datauftannahme2').asdatetime:=strtodate('30.06.2005'); params.parambyname('par_auftstatus').asinteger:=3; Ändere ich das Programm wie nachfolgend ab:
Delphi-Quellcode:
d.h.ich baue für die TQuery erst im Programm selbst den Befehl auf, dann habe ich wie gewohnt sofort ein Ergebnis.
sql.Clear;
sql.add('select df_ndl,df_datauftannahme,df_lfdnrauftrag,df_kundennr, df_kzeuro,df_serviceart,df_belegtyp,df_vkgesamt,df_auftstatus'); sql.add('from dba.tb_auftrag where df_ndl=''CGN'' and df_datauftannahme between ''2005-06-01'' and ''2005-06-30'''); sql.add('and df_auftstatus=3 order by df_kundennr,df_datauftannahme'); Was läuft hier bei Delphi 7 anders? Die Befehle, die durch die BDE geschickt werden, sind doch absolut identisch, nur das ich eben einmal mit Parametern und diese dann im Programm belege und das andere mal mit Echtwerten arbeite. Hat jemand ähnliche Erfahrungen mit Delphi 7 gemacht und eventl. eine Lösung? [edit=Sharky]SQL- und Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: Delphi 7 und TQuery-Parameter
Hallo Olaf,
wenn du Query.Prepare verwendest bin ich ratlos. marabu |
Re: Delphi 7 und TQuery-Parameter
Hallo Marabu,
egal, ob mit oder ohne Prepare, die Abfrage mit den Parametern dauert Ewigkeiten (heißt, er geht die Tabelle, die sehr groß ist, vermutlich sequentiell durch). |
Re: Delphi 7 und TQuery-Parameter
Zitat:
Du hast den Fehler gemacht gleichzeitig mindestens 2 Teile am System auszutauschen (vermutlich auch mehr Teile) so das folgende Programmteile das Problem verursachen können: Delphi-VCL-Wrapper um BDE: Fehler in aktuallen Wrapper. Aber Borland hat seit Jahren dort keine grundlegenden Änderungen vorgenommen BDE: Ist auch schon nicht mehr viel geändert worden. Evtl. spielt BDE <-> ODBC nicht mehr so 100% mit ODBC: Hast du auch einen neuen Rechner (anderes Betriebssystem), so hast du auch komplett andere ODBC-Treiber Sybase-ODBC-Treiber: Du hast vermutlich auch neue ODBC-Treiber für Sybase eingespielt Sybase-DB: Ist natürlich auch komplett anders. Dein Programm läuft so Anwendung <-> BDE <-> ODBC <-> Sybase-ODBC <-> Sybase-Client-Libaray <-> Sybase-Datenbank. Ich empfehle dir native-Treiber wie ![]() Anwendung <-> Sybase-Client-Libray <-> Sybase-Datenbank. Und du wirst bei weiten weniger Probleme haben. Und führe die Umstellung lieber heute als morgen durch. |
Re: Delphi 7 und TQuery-Parameter
Hallo Bernhard,
ich bin mir nicht 100%-ig sicher, aber die Vermutung liegt doch sehr nahe, das es zumindest nicht an Sybase liegt. Denn eine Abfrage direkt auf Sybase bringt ja gewünsche Ergebnisse. Die Abfrage im Programm ohne Parameter bringt auch das gewünschte Ergebnis, nur in Verbindung mit Parametern sieht es schlecht aus (nicht generell, aber sobald ich Zeiträume abfrage, z.B. mit between). Wenn ich herausfinde könnte, was auf dem Weg BDE <-> ODBC <-> Sybase-ODBC <-> Sybase-Client-Libaray <-> Sybase-Datenbank als endgültige Abfrage an die Sybase-Datenbank geschickt wird, wär ich vielleicht schlauer, aber da habe ich bei Sybase bisher nichts gefunden, was mir das anzeigt. Aber vielen Dank für deine Hinweise, ich werde diese mal alle prüfen |
Re: Delphi 7 und TQuery-Parameter
Zitat:
Normele Query:
SQL-Code:
Parametrisierte Query:
SELECT * FROM MyTable where MyFeld = 'FeldWert'
SQL-Code:
Und hier kann natürlich Delphi/BDE/ODBC evtl. Fehler machen (SQL-Typ falsch bestimmen, ...)
exec sp_executesql N'select MyTable where MyFeld = @P1', N'@P1 nvarchar(8)', N'FeldWert'
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz