![]() |
Datenbank: Mysql • Version: 4.10 • Zugriff über: zeos
SQL Syntax
Hallo,
gelegentlich beutzte ich delphi für kleine Projekte ( ich weis, dass Delphi eniges mehr kann ). Aus einem anderen Projekt habe ich die folgende Anweisung, die ich nicht ganz verstehe: SQL.Strings[1]:='from call_cdrs_'+cboMonat.Text; zwar ist klar damit wird die Sql Anweisung ist auf der Wert des ausgewählte Monat gesetzt, was ich nicht verstehe ist die eins in ekige Klammer, auf was bezieht sich, oder besser gesagt wie funktioniert es. Die komplette SQL Anweisung wäre: Select call_date, call_time, terminating_cli, call_duration, subtotal from call_cdrs_10 where originating_cli=:identifier was würde das ändern wenn ich z.B SQL.Strings[0], oder SQL.Strings[2] schreibe? Danke Xaver |
Re: SQL Syntax
Hallo xaverras,
die SQL-Property der Queries ist vom Typ TStrings, was eigentlich nur ein Array von Strings ist (mit ein paar zusaetzlichen Methoden). Mit Strings[1] greifst du auf die zweite Zeile zu, vorausgesetzt sie ist da. Ich empfehle dir aber, dich nicht drauf zu verlassen, sondern so zu arbeiten:
Delphi-Quellcode:
Sonst kann es leicht passieren, dass du das falsche ueberschreibst bzw. in eine Zeile schreiben willst, die nicht existiert (gibt eine Fehlermeldung: List index out of bounds).
with SomeQuery do
begin Close; SQL.Clear; SQL.Add('SELECT call_date, call_time, terminating_cli, call_duration, subtotal FROM call_cdrs_10 WHERE originating_cli = :identifier'); //Parameterzuweisung Open; end; Greetz alcaeus |
Re: SQL Syntax
Kann mir die Antwort ersparen. Alcaeus war schneller. :evil: :mrgreen: Wenn ich aber schon dabei bin, noch folgende Anmerkung : die SQL-Strings können sehr lang und unübersichtlich werden. Deshalb sollten sie nicht in eine Zeile gepackt werden. Deshalb TStrings. Die Hauptgefahr besteht aber dann darin, das Clear zu vergessen ! Außerdem sollte man Add verwenden und nicht [1] usw.
|
Re: SQL Syntax
Erstmal Danke für die Antwort.
Wenn ich richtig verstehe jede Zeile ist eine Element des Array, somit: Select call_date, call_time, terminating_cli, call_duration, subtotal // = SQL.Strings[0] from call_cdrs_10 // = SQL.Strings[1] where originating_cli=:identifier // = SQL.Strings[2] und wenn die Anweisung alles in einer Zeile stehen würde dann wäre nur über "SQL.Strings[0]" zu erreichen, z.B: Select call_date, call_time, terminating_cli, call_duration, subtotal from call_cdrs_10 where originating_cli=:identifier // = SQL.Strings[0] Grüße. Xaver |
Re: SQL Syntax
Hallo xaver,
das ist richtig so. Du koenntest das Query auch aufteilen:
Delphi-Quellcode:
Dann hast du die von dir genannte Aufteilung. Wie gesagt, ich rate aber davon ab, direkt auf eine Zeile zuzugreifen. Man weiss ja nie was passiert ist ;)
with SomeQuery do
begin Close; SQL.Clear; SQL.Add('SELECT call_date, call_time, terminating_cli, call_duration, subtotal '); SQL.Add('FROM call_cdrs_10 '); SQL.Add('WHERE originating_cli = :identifier'); //Parameterzuweisung Open; end; Greetz alcaeus |
Re: SQL Syntax
noch eine Frage, wie ist die Syntax der Parameterzuweisung, wäre's möglich ein Beispiel?
Danke. Xaver |
Re: SQL Syntax
Moin,
ich würde von dieser ADD-Geschichte abraten (wenn überhaupt dann APPEND, weil das eine Prozedur ist)
Delphi-Quellcode:
Bei den neueren Datenbankkomponenten (z.B. DbExpress) gibt es keine SQL-Eingenschaft (alla TStrings) mehr, dort ist nur noch ein String (CommandText) vorhanden. Wenn man irgendwann von der veralteten BDE und deren Komponenten weg will, hat man es mit der oben beschriebenenen Vorgehensweise, wesentlich einfacher. Ausserdem gibt es so nicht das geschilderte Clear-Problem.
SomeQuery.Close;
SomeQuery.SQL.Text:= 'SELECT call_date, call_time, terminating_cli,'#13 + ' call_duration, subtotal'#13 + 'FROM call_cdrs_10'#13 + 'WHERE originating_cli = :identifier'; //Parameterzuweisung SomeQuery.ParamByName('identifier').AsInteger:=1; //oder auch SomeQuery.ParamByName('identifier').AsString:='1'; SomeQuery.Open; MfG Thorsten |
Re: SQL Syntax
Zitat:
|
Re: SQL Syntax
Moin,
Zitat:
Zitat:
So, und zu dem zweiten Punkt. Natürlich ist das TDataSet nicht zur TQuery kompatibel. ABER, wenn man von der BDE (TQuery) Struktur umsteigen will auf z.B. DbExpress dann ist man wesentlich schneller beim Umbau des Quellcodes als wenn man die TStrings.Add bzw TStrings.Append Struktur benutzt. BDE-Variante:
Delphi-Quellcode:
DbExpress-Variante:
var Query:TQuery
begin Query:=TQuery.create(Self); try Query.Databasename:=Database.Databasename; Query.Sessionname:=Database.Sessionname; Query.SQL.Text:= 'SELECT *'#13 + 'FROM tabelle'#13 + 'WHERE a = :a'#13 + 'ORDER BY b'; Query.ParamByName('a').AsInteger:=1; Query.Open; while not Query.Eof do begin Query.Next; end; Query.Close; finally Query.free; end; end;
Delphi-Quellcode:
Ich will hier niemanden zu etwas zwingen oder super lange auf meine Meinung beharren. Nehmt meinen Vorschlag an oder nicht - mir ist das sowas von egal. Ich wollte euch nur an meiner Erfahrung teilhaben lassen. Habs nur gut gemeint.
var SDS:TSimpleDataSet;
begin SDS:=TSimpleDataSet.create(Self); try SDS.Connection:=SQLConnection; SDS.DataSet.CommandText:= 'SELECT *'#13 + 'FROM tabelle'#13 + 'WHERE a = :a'#13 + 'ORDER BY b'; SDS.DataSet.ParamByName('a').AsInteger:=1; SDS.Open; while not SDS.Eof do begin SDS.Next; end; SDS.Close; finally SDS.free; end; end; PS: Mir ist gerade noch etwas eingefallen. Wenn man nur solche kleinen SQL-Anweisungen schreibt, kann das durchaus so aussehen, als ob das egal wäre - der Umbau ist dann natürlich sehr einfach. Ich schreibe aber häufiger mal SQL-Anweisungen mit >100 Zeilen und da macht dann diese ADD-/APPEND-Geschichte keinen Spass mehr. MfG Thorsten |
Re: SQL Syntax
Hallo Thorsten,
ich finde es doch Interessant, nur sollte es du etwas ( für mich zumindestens ) verständlicher darlegen. Geht es auch mich den Zeos? Grüße. Xaver |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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