Zitat:
Wie baust du das mit Ressourcen?
...einfach.
1: gemeinsam für alle
SQL. Auf dem Datenmodul z.B.
Delphi-Quellcode:
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;
2. Im QT (Beispiel)
Delphi-Quellcode:
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;
oder zusammenbauen wie gehabt
Delphi-Quellcode:
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;
oder ausfüllen mit Format
Delphi-Quellcode:
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;
InList könnte auch die Feldnamensliste sein...
Zitat:
Select Id,Name,Vorname From Person
Where Id=:Id
Die
SQL Datei wird z.B. mit Notepad erstellt und wird auf der Platte in deinem beliebigen Ordner gespeichert. Diese Datei wird in der *.rc Datei aufgelistet damit der Compiler weiß wo die Qellen sind.
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.
https://www.delphipraxis.net/49505-s...einbinden.html
Hilfsmittel zum Erstellen der Dateien:
https://www.delphipraxis.net/190316-...e-creator.html
Zitat:
schon alleine das Debuggen stelle ich mir nicht so einfach vor.
Nur das
SQL liegt "extern" und nicht verstreut in Querys auf den Datemmodulen. Debuggen ist wie gehabt.
Zitat:
dass es eine Klasse oder sonstwie
Ich persönlich benutze ein Interface für verschiedene
DBMS.