AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Delphi 7 und TQuery-Parameter
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 7 und TQuery-Parameter

Ein Thema von goolaf · begonnen am 29. Jun 2005 · letzter Beitrag vom 30. Jun 2005
Antwort Antwort
goolaf

Registriert seit: 30. Jul 2004
Ort: 42781 Haan
12 Beiträge
 
Delphi 5 Enterprise
 
#1

Delphi 7 und TQuery-Parameter

  Alt 29. Jun 2005, 14:34
Datenbank: Sybase • Version: 7 • Zugriff über: BDE und ODBC
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:
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
Im Programm selbst übergeb ich dann folgende Parameterwerte:
Delphi-Quellcode:
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;
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.

Ändere ich das Programm wie nachfolgend ab:
Delphi-Quellcode:
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');
d.h.ich baue für die TQuery erst im Programm selbst den Befehl auf, dann habe ich wie gewohnt sofort ein Ergebnis.

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]
Vielen Dank für Eure Hilfen.

Olaf
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Delphi 7 und TQuery-Parameter

  Alt 29. Jun 2005, 15:37
Hallo Olaf,

wenn du Query.Prepare verwendest bin ich ratlos.

marabu
  Mit Zitat antworten Zitat
goolaf

Registriert seit: 30. Jul 2004
Ort: 42781 Haan
12 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Delphi 7 und TQuery-Parameter

  Alt 29. Jun 2005, 15:49
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).
Vielen Dank für Eure Hilfen.

Olaf
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Delphi 7 und TQuery-Parameter

  Alt 29. Jun 2005, 16:00
Zitat von goolaf:
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?
Was macht dich so sicher das Delphi schuld ist.
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 SQLDirect um diesen Protokollstack um welten zu vereinfachen:

Anwendung <-> Sybase-Client-Libray <-> Sybase-Datenbank.

Und du wirst bei weiten weniger Probleme haben. Und führe die Umstellung lieber heute als morgen durch.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
goolaf

Registriert seit: 30. Jul 2004
Ort: 42781 Haan
12 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Delphi 7 und TQuery-Parameter

  Alt 30. Jun 2005, 07:02
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
Vielen Dank für Eure Hilfen.

Olaf
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Delphi 7 und TQuery-Parameter

  Alt 30. Jun 2005, 07:18
Zitat von goolaf:
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).
Eine parametriesierte Abfrage schaut bezüglich das was auf der DB-Seite ankommt sehr viel anders aus (Am Beispiel MS-SQL-Server):

Normele Query:
SELECT * FROM MyTable where MyFeld = 'FeldWert' Parametrisierte Query:
exec sp_executesql N'select MyTable where MyFeld = @P1', N'@P1 nvarchar(8)', N'FeldWert' Und hier kann natürlich Delphi/BDE/ODBC evtl. Fehler machen (SQL-Typ falsch bestimmen, ...)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 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