Variablen im SQL Statement
-
- 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
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
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
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Variablen im SQL Statement
WHERE Variable = :Variable1
TZQuery1.Params.ParamValues['Variable1'] := 'gelb';
TZQuery1.Params.ParamValues['Variable1'] := 'gelb';
EleLa - Elektronik Lagerverwaltung - www.elela.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
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).
-
- 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
... 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
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
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Variablen im SQL Statement
TZQuery1.Fields[0].AsInteger
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- 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
DANKE !!!
Sorry dass ich solch simple Fragen stellen muss - aber ich habe nirgens eine passende Hilfe zur ZQuery gefunden
Sorry dass ich solch simple Fragen stellen muss - aber ich habe nirgens eine passende Hilfe zur ZQuery gefunden
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
Serverseitig ist das wie ein normales Rowset als Ergebnis, hat halt nur eine Coloumn und eine Row.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 ?
ist IMHO ident mit sowas
Code: Alles auswählen
ASQL:=
'SELECT TOP 1 [Projekt]'+sLineBreak
+' FROM [V_Projekte]';
Code: Alles auswählen
SELECT 10/2 AS erg
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).
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
Sowas ? http://wiki.freepascal.org/Working_With_TSQLQueryDL3AD hat geschrieben:DANKE !!!
Sorry dass ich solch simple Fragen stellen muss - aber ich habe nirgens eine passende Hilfe zur ZQuery gefunden
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- 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
... ist denn TQuery das gleiche wie ZQuery von Zeos?
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Variablen im SQL Statement
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.
Zeos ist eindeutig die bessere Komponente.
EleLa - Elektronik Lagerverwaltung - www.elela.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
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
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).
-
- 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
Hallo,
komme nicht weiter – mir fehlt ein Gedankenanstoß
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
komme nicht weiter – mir fehlt ein Gedankenanstoß

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
-
- 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
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.
-
- 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
... das können schon drchaus 15.000 20.000 Datensätze sein die durchsucht werden müssen
-
- 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
Auch mit "where Dxcc = '230'"? 20'000 geht sicher auch noch. In MSEgui kann ich auch mit Datensets von 1'000'000 records Arbeiten.DL3AD hat geschrieben:... das können schon drchaus 15.000 20.000 Datensätze sein die durchsucht werden müssen