AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQLite select geht nicht

Ein Thema von Dr. Jack · begonnen am 19. Nov 2018 · letzter Beitrag vom 20. Nov 2018
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#21

AW: SQLite select geht nicht

  Alt 19. Nov 2018, 21:25
Dann sei doch so nett und formulier es einmal "richtig" damit der TE ein sauberes Vorbild hat.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#22

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 07:52
Moin...
Zitat:
Warum sieht man immer wieder komische Konstrukte
wie
main.qryproducts.SQL.Clear;
main.qryproducts.SQL.Add('select * from fam_db')...
... ...
Zitat:
muss man nur noch an einer (möglichst zentralen) Stelle die SQL-Statement-Konstanten-Resourcen ... anpassen.
...du sprichst mir aus der Seele.
Das Tutorial erklärt wie man es machen könnte. http://www.delphipraxis.net/49505-sq...einbinden.html
Zitat:
Dann sei doch so nett und formulier es einmal "richtig" damit der TE ein sauberes Vorbild hat.
1. Immer statt SQL.Clear; SQL.Add -> SQL.Text verwenden
2. immer Parameter! .ParamByName('Name').AsString := 'blubb';
3. wenn möglich auf LIKE verzichten

  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 13:27
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
Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#24

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 13:51
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#25

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 14:00
Zitat:
SQL immer als Ressource, tztz.
Wie meinst du das?
Zitat:
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
Auch Kostanten oder Ressourcen kann man dynamisch im QT zusammenbauen.

Geändert von haentschman (20. Nov 2018 um 14:03 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 14:13
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?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 14:55
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
Richtig. Aber dann bastel ich mir doch lieber eine Klasse, die das für mich erledigt.
Für mehr oder weniger feste Statements sind Ressourcen schon ein guter Weg, den ich auch verwende.
Peter
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#28

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 15:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#29

AW: SQLite select geht nicht

  Alt 20. Nov 2018, 15:04
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.

Geändert von haentschman (20. Nov 2018 um 15:46 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 13:55 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