![]() |
AW: SQLite select geht nicht
Dann sei doch so nett und formulier es einmal "richtig" damit der TE ein sauberes Vorbild hat.
Gruß K-H |
AW: SQLite select geht nicht
Moin...8-)
Zitat:
Zitat:
Das Tutorial erklärt wie man es machen könnte. ![]() Zitat:
2. immer Parameter! .ParamByName('Name').AsString := 'blubb'; 3. wenn möglich auf LIKE verzichten :zwinker: |
AW: SQLite select geht nicht
Hallo,
naja. 1. SQL immer als Ressource, tztz. 2. Das schlecht lesbare SQL.Text statt mehrzeiligem SQL.Add. Wenn ich das SQL in Abhängigkeit einiger Einstellugen im Formular selber zusammenbauen will (z.B. zurückgegebene Spalten=Felder einstellbar), kann ich den SQL-Text dynamisch zusammenbauen pder SQL.Add benutzten. Ich finde 2eres besser. 3. immer Parameter bentzen natürlich volle Zustimmung 1/3 -> 33% Zustimmung, mehr als bei den heutigen Parteien ;) |
AW: SQLite select geht nicht
Sagen wir mal so:
Wenn ich zur Entwicklungszeit nicht weiß, wie das SQL zur Laufzeit aussehen wird, dann muss ich es natürlich zur Laufzeit erstellen und kann es nicht als Konstante, Resource ... ablegen ;-) Bei meinem Delphi ruft der Setter für SQL.Text übrigens implizit ein Clear auf ;-) |
AW: SQLite select geht nicht
Zitat:
Zitat:
|
AW: SQLite select geht nicht
Hallo,
wäre mir viel zu aufwendig. schon alleine das Debuggen stelle ich mir nicht so einfach vor. DB-Service-Methode z.B. Select Id,Name,Vorname From Person Where Id=:Id Wie baust du das mit Ressourcen? var Res_Select, Res_Person_Id: String; sSQL: String; begin Res_Select := LoadFromResource(); sSQL:= Res_Select+','+Res_Person_Id+','+Res_Person_Name usw? |
AW: SQLite select geht nicht
Zitat:
Für mehr oder weniger feste Statements sind Ressourcen schon ein guter Weg, den ich auch verwende. |
AW: SQLite select geht nicht
Sagen wir mal so: Konstante und Resource impliziert für mich, dass wird zur Entwicklungszeit festgelegt und ändert sich dann nicht mehr.
Zur Laufzeit erstellen impliziert für mich, dass es eine Klasse oder sonstwie sinnvoll und geeignete Methode gibt, die den Aufbau der Statements übernimmt. |
AW: SQLite select geht nicht
Zitat:
1: gemeinsam für alle SQL. Auf dem Datenmodul z.B.
Delphi-Quellcode:
2. Im QT (Beispiel)
function TDatabaseIB.GetSQLByName(SQLName: string): string;
var SQLStream: TResourceStream; SQLStrings: TStringList; begin Result := ''; SQLStrings := TStringList.Create; try SQLStream := TResourceStream.Create(HInstance, SQLName, PWideChar(conDatabaseResourceGroupString[FDatabaseProperties.DBMS])); try try SQLStrings.LoadFromStream(SQLStream); Result := SQLStrings.Text; except Result := ''; end; finally SQLStream.Free; end; finally SQLStrings.Free; end; end;
Delphi-Quellcode:
oder zusammenbauen wie gehabt
function TDatabaseIB.GetLastRead(ParameterID: Integer): TDateTime;
var Qry: TUniQuery; begin Qry := CreateQuery; try Result := 0; Qry.SQL.Text := GetSQLByName('SER_GET_LAST_READ'); // ! mehrzeiliges SQL weil viele Felder oder so Qry.ParamByName('PI').AsInteger := ParameterID; Qry.Open; Result := Qry.Fields[0].AsDateTime; finally Qry.Free; end; end;
Delphi-Quellcode:
oder ausfüllen mit Format
Qry.SQL.Text := GetSQLByName('SER_GET_LIST_LOGMESSAGE');
if (MessageState <> msAll) or (TimeRange <> trAll) then begin Qry.SQL.Add(GetSQLByName('SER_GET_LIST_LOGMESSAGE_WHERE')); if MessageState <> msAll then begin Qry.SQL.Add(GetSQLByName('SER_GET_LIST_LOGMESSAGE_STATE')); Qry.ParamByName('MS').AsInteger := Ord(MessageState); HasMessageState := True; end; case TimeRange of tr24h: begin if HasMessageState then begin Qry.SQL.Add(GetSQLByName('SER_GET_LIST_LOGMESSAGE_AND')); end; Qry.SQL.Add(GetSQLByName('SER_GET_LIST_LOGMESSAGE_TIME')); Qry.ParamByName('TI').AsDateTime := Now - 1; end; tr7d: begin if HasMessageState then begin Qry.SQL.Add(GetSQLByName('SER_GET_LIST_LOGMESSAGE_AND')); end; Qry.SQL.Add(GetSQLByName('SER_GET_LIST_LOGMESSAGE_TIME')); Qry.ParamByName('TI').AsDateTime := Now - 7; end; end; end; Qry.SQL.Add(GetSQLByName('SER_GET_LIST_LOGMESSAGE_ORDER')); Qry.Open;
Delphi-Quellcode:
InList könnte auch die Feldnamensliste sein...
Device := aList[0]; // ersten nehmen wegen ID
InList := Copy(InList, 1, Length(InList) - 1); // letztes Komma entfernen Qry.SQL.Text := Format(GetSQLByName('SER_EDIT_DEVICES_ACTIVE'), [InList]); Qry.ParamByName('MDI').AsInteger := Device.MasterDeviceID; Qry.ExecSQL; Zitat:
Die SQL liegen als SQL Dateien auf der Festplatte und sind aber, bedingt, mit einem zum DBMS passenden SQL Editor testbar. Die IDE compiliert das automatisch zur Ressource. ![]() Hilfsmittel zum Erstellen der Dateien: ![]() Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 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