SQLQuery abfrage im Quelltexteditor

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

SQLQuery abfrage im Quelltexteditor

Beitrag von laines »

Hallo

Ich bin schon mal soweit gekommen, dass ich im Quelltexteditor eine SQL Abfrage hinbekommen.
Mein Problem ist, dass ich das ganze gerne mit Variablen füllen möchte und da scheitere ich momentan.
Im Queltexteditor:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLQuery4.Active:=False;
  SQLQuery4.SQL.Add('SELECT YEAR(dDatum) AS [Jahre], SUM(fBetrag) AS [Komplettumsatz] FROM tZahlung Group BY YEAR(dDatum) ORDER BY YEAR(dDatum)');
  SQLQuery1.Active:=False;
  SQLQuery4.Active:=True;
end;
Ideal wäre natürlich, wenn ich der Übersicht wegen es in etwa so gestalten könnte, aber beim Zeilenumbruch bekomme ich eine Fehlermeldung.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLQuery4.Active:=False;
  SQLQuery4.SQL.Add('SELECT YEAR(dDatum) AS [Jahre]
          , SUM(fBetrag) AS [Komplettumsatz] FROM tZahlung
          Group BY YEAR(dDatum)
          ORDER BY YEAR(dDatum)');
  SQLQuery1.Active:=False;
  SQLQuery4.Active:=True;
end;
Gruß
Laines

Benutzeravatar
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: SQLQuery abfrage im Quelltexteditor

Beitrag von af0815 »

laines hat geschrieben:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLQuery4.Active:=False;
  SQLQuery4.SQL.Add('SELECT YEAR(dDatum) AS [Jahre]' +
          ', SUM(fBetrag) AS [Komplettumsatz] FROM tZahlung' +
          'Group BY YEAR(dDatum)' +
          'ORDER BY YEAR(dDatum)');
  SQLQuery1.Active:=False;
  SQLQuery4.Active:=True;
end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Eb
Lazarusforum e. V.
Beiträge: 240
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: SQLQuery abfrage im Quelltexteditor

Beitrag von Eb »

Aber immer aufpassen, dass Leerstellen dazwischen sind :wink:
af0815 hat geschrieben:
laines hat geschrieben:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLQuery4.Active:=False;
  SQLQuery4.SQL.Add('SELECT YEAR(dDatum) AS [Jahre]' +
          ', SUM(fBetrag) AS [Komplettumsatz] FROM tZahlung ' +
          'Group BY YEAR(dDatum) ' +
          'ORDER BY YEAR(dDatum)');
  SQLQuery1.Active:=False;
  SQLQuery4.Active:=True;
end;

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: SQLQuery abfrage im Quelltexteditor

Beitrag von laines »

Mist !! zu früh gefreut

In meinem DBGrid1 in der ComboBox1Change werden nur beim ersten Wechsel die Summen ausgegeben, wenn ich ein anderes Jahr wähle bleibt das Feld in dem die Summe angezeigt werden soll leer.
Momentan sieht das ganze so aus:

Code: Alles auswählen

procedure TForm1.ComboBox1Change(Sender: TObject);
  //Variable für die Jahre
var
  jahr:String;
  begin
 //Hier wird der Combobox Eintrag der gewählt wurde ausgelesen
    jahr:=Combobox1.Items[ComboBox1.ItemIndex];
    Datasource1.Enabled:=False;
    SQLQuery1.Active:=False;
    Datasource2.Enabled:=False;
    SQLQuery2.Active:=False;
    SQLQuery2.SQL.Add('SELECT tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt ' +
    ',SUM(CASE WHEN YEAR(tz.dDatum) = ' + jahr + ' THEN tz.fBetrag ELSE 0 END) AS [' + jahr + '] ' +
    'FROM tkunde tk ' +
    'INNER JOIN trechnung tr ON tk.kKunde = tr.tKunde_kKunde ' +
    'INNER JOIN tZahlung tz ON tr.tBestellung_kBestellung = tz.kBestellung ' +
    'GROUP BY tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt '+
    ' ORDER BY [' + jahr+ '] DESC');
    DBGrid1.Columns.Items[8].FieldName := jahr;
    DBGrid1.Columns.Items[8].Title.Caption := jahr;
    Datasource2.Enabled:=True;
    SQLQuery2.Active:= True;
end;

Gruß
Laines

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: SQLQuery abfrage im Quelltexteditor

Beitrag von laines »

Hab's gefunden :-)

Code: Alles auswählen

SQLQuery2.SQL.Clear
hat gefehlt. :oops:

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: SQLQuery abfrage im Quelltexteditor

Beitrag von laines »

Da hätte ich noch eine kurze nachfrage.

Wie komm ich denn an eine Gesamtsumme aller Kunden ran ?

So dass es so aussieht. Kann ich das Einfach rechnen lassen. Benutze eine bereits vorhandene MSSQL Datenbank, bei der mich die Fragezeichen der Umlaute auch noch gewaltig stören.
Dateianhänge
rechnen.jpg

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: SQLQuery abfrage im Quelltexteditor

Beitrag von DiBo33 »

Wie komm ich denn an eine Gesamtsumme aller Kunden ran ?
Durch eine weitere Query, ohne Kundeninformationen nur die Summe.

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: SQLQuery abfrage im Quelltexteditor

Beitrag von laines »

Ich kann aber doch keine 2 Querys gleichzeitig aufrufen ?? Zumindest erzeugt er mir einen Fehler während der Laufzeit.
Ich würde das Ganze ja mal gerne auf die ZEOSLib umstellen, aber da scheitere ich ja schon bei der Datenbank Verbindung zu MSSQL 2008

Momentan habe ich mein Problem so gelöst, aber das benötigt meiner Meinung nach sehr viel Zeit zum berechnen.

Code: Alles auswählen

// Jahres Gesamtumsatz berechnen
  // Verhindern, dass die Anzeige ständig aktualisiert wird:
  SQLQuery1.DisableControls;
  SQLQuery1.first;
  summe:=0;
  while not SQLQuery1.eof do
  begin
      summe:=summe+SQLQuery1.FieldByName(jahr).AsFloat;
    SQLQuery1.next;
  end;
  begin
  SQLQuery1.EnableControls;
  SQLQuery1.first;
  Label3.Caption:= 'Umsatz für: ' +jahr;
  EditGesUmsatz.Text:=FloatToStrF(summe, ffCurrency, 8, 2);
  end;

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: SQLQuery abfrage im Quelltexteditor

Beitrag von DiBo33 »

Ich kann aber doch keine 2 Querys gleichzeitig aufrufen ??
Aber nacheinander.

Erst Summe ermitteln, zwischenspeichern, Rest ermitteln.

Antworten