Variablen im SQL Statement

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Variablen im SQL Statement

Beitrag von DL3AD »

Hallo,

in einer ZQuery möchte ich ein SQL Construkt verwenden in etwa so

ORDER BY CASE
WHEN ... IN ... THEN Variable:='gelb'
WEHN ... IN ... THEN Variable:='rot'

wobei "Variable" in der procedure definiert ist und im weiteren Programmverlauf verwendet werden soll.
Wie realisiert man das in einen ZQuery.SQL.TXT Construkt ?

Gruß
Frank

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Variablen im SQL Statement

Beitrag von MmVisual »

WHERE Variable = :Variable1

TZQuery1.Params.ParamValues['Variable1'] := 'gelb';
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Variablen im SQL Statement

Beitrag von af0815 »

Etwas typisches bei mir. Q_Daten ist eine Query die zur Laufzeit erstellt wird. In ASQL ist mein Statement das von irgendwo :-) daherkommt.

Code: Alles auswählen

 
............
 
    ASQL:=
          'SELECT [Projekt]'+sLineBreak
          +'      ,[Tag]'+sLineBreak
          +'      ,[Start]'+sLineBreak
          +'  FROM [V_Projekte]'+sLineBreak
          +'     WHERE [Tag] between :StartDatum and :EndDatum '+ LineEnding
          +'     ORDER BY [Tag] ASC';
 
..........
 
    Q_Daten.Active:=False;
    Q_Daten.SQL.Clear;
    Q_Daten.SQL.Add(ASQL);
    Q_Daten.Params.CreateParam(ftDateTime ,'StartDatum',ptInput);
    Q_Daten.Params.CreateParam(ftDateTime ,'EndDatum',ptInput);
    Q_Daten.ParamByName('StartDatum').AsDateTime := ZeitAnfang;
    Q_Daten.ParamByName('EndDatum').AsDateTime := ZeitEnde;
    Q_Daten.Active:=True;   
    Q_Daten.First;
    while not Q_Daten.EOF do
    begin
       ....
       Q_Daten.Next;
    end;
 
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Variablen im SQL Statement

Beitrag von DL3AD »

... Danke dass hilft schon mal weiter.

Nun habe ich noch ein Problen - wenn ich z.B. ein Statement ausführe dass ein "Ergebniss" liefert dass Datentechnisch nichts mit den Feldern zu tun hat

SELECT 10/5

Wie greife ich das Ergebniss (2) ab ?

Gruß Frank

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Variablen im SQL Statement

Beitrag von MmVisual »

TZQuery1.Fields[0].AsInteger
EleLa - Elektronik Lagerverwaltung - www.elela.de

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Variablen im SQL Statement

Beitrag von DL3AD »

DANKE !!!

Sorry dass ich solch simple Fragen stellen muss - aber ich habe nirgens eine passende Hilfe zur ZQuery gefunden

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Variablen im SQL Statement

Beitrag von af0815 »

DL3AD hat geschrieben:Nun habe ich noch ein Problen - wenn ich z.B. ein Statement ausführe dass ein "Ergebniss" liefert dass Datentechnisch nichts mit den Feldern zu tun hat

SELECT 10/5

Wie greife ich das Ergebniss (2) ab ?

Serverseitig ist das wie ein normales Rowset als Ergebnis, hat halt nur eine Coloumn und eine Row.

ist IMHO ident mit sowas

Code: Alles auswählen

 
    ASQL:=
          'SELECT TOP 1 [Projekt]'+sLineBreak
          +'  FROM [V_Projekte]';
 


Wenn du

Code: Alles auswählen

SELECT 10/2 AS erg
verwendest dann geht ganz normales

Code: Alles auswählen

 Q.FieldByName('erg').AsInteger
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Variablen im SQL Statement

Beitrag von af0815 »

DL3AD hat geschrieben:DANKE !!!

Sorry dass ich solch simple Fragen stellen muss - aber ich habe nirgens eine passende Hilfe zur ZQuery gefunden


Sowas ? http://wiki.freepascal.org/Working_With_TSQLQuery
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Variablen im SQL Statement

Beitrag von DL3AD »

... ist denn TQuery das gleiche wie ZQuery von Zeos?

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Variablen im SQL Statement

Beitrag von MmVisual »

Nicht ganz. TQuery kommt vom FPC, und kann nicht mit so vielen Datenbanken kommunizieren. Die Zeos Datenbankkomponente bietet noch einige Features extra (z.B. Sortierung und Filter) die in anderen DB Komponenten nicht drin sind.
Zeos ist eindeutig die bessere Komponente.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Variablen im SQL Statement

Beitrag von af0815 »

Der Unterschied wir immer kleiner. Die Frage ist, welche DB auf welchen BS.

Ein Umstieg zwischen den beiden ist nicht so einfach, da die kleinen Unterschiede einiges ausmachen können. Bein Windows und SQl-Server oder Access würde ich ZEOS bevorzugen.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Variablen im SQL Statement

Beitrag von DL3AD »

Hallo,

komme nicht weiter – mir fehlt ein Gedankenanstoß :shock:
Ich habe folgende Daten selektiert

Select Band,Mode,Dxcc,Qsl from Log where Dxcc = '230'

Band Mode Dxcc Qsl
15m CW 230 N
12m CW 230 N
10m CW 230 N
160m CW 230 N
40m SSB 230 Y
40m SSB 230 Y
80m CW 230 N
17m CW 230 Y
30m CW 230 Y
80m CW 230 Y
40m CW 230 Y
40m CW 230 N
30m CW 230 Y
10m FM 230 Y
30m CW 230 N

(Das ist nur ein Teil der Grunddaten – da kommen noch Felder dazu – die sind aber leicht mit
OR und AND zu verknüpfen)

Nun möchte ich eine Matrix erstellen mit Farbigen Feldern welche mir Zustände signalisieren
Dazu benötige ich Ansteuersignale hier symbolisiert durch „erg“

Wenn Band=160m und Mode=CW und Qsl=Y then erg1=2
Wenn Band=160m und Mode=CW und Qsl<>Y then erg1=1
Wenn Band=160m und Mode=CW kein Datensatz gefunden then erg1=0

Wenn Band=160m und Mode=SSB und Qsl=Y then erg2=2
Wenn Band=160m und Mode=SSB und Qsl<>Y then erg2=1
Wenn Band=160m und Mode=SSB kein Datensatz gefunden then erg2=0


Wenn Band=80m und Mode=CW und Qsl=Y then erg3=2
Wenn Band=80m und Mode=CW und Qsl<>Y then erg3=1
Wenn Band=80m und Mode=CW kein Datensatz gefunden then erg3=0

… und weitere Kombinationen

Wie macht man so eine SQL Abfrage (sqlite3 Datenbank) ?

Kann man das mit einem CASE WHEN machen ?

Gruß
Frank

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Variablen im SQL Statement

Beitrag von mse »

Falls die Recordzahl nicht mehr als einige tausend beträgt, lassen sich solche Sachen am einfachsten mit den Daten im Dataset in Pascal Programmieren, eventuell mit Hilfe lokaler Indizes.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Variablen im SQL Statement

Beitrag von DL3AD »

... das können schon drchaus 15.000 20.000 Datensätze sein die durchsucht werden müssen

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Variablen im SQL Statement

Beitrag von mse »

DL3AD hat geschrieben:... das können schon drchaus 15.000 20.000 Datensätze sein die durchsucht werden müssen

Auch mit "where Dxcc = '230'"? 20'000 geht sicher auch noch. In MSEgui kann ich auch mit Datensets von 1'000'000 records Arbeiten.

Antworten