Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL ABFRAGE BOOLEAN (https://www.delphipraxis.net/43262-sql-abfrage-boolean.html)

GoTo0815 31. Mär 2005 17:11

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery TDataSource

SQL ABFRAGE BOOLEAN
 
Hallo,

habe 18 editfelder (Suchkriterien)
meine Datenbank hat ebenfalls 18 Felder

In jedem dieser Editfelder kann der User etwas eintragen.

Nach dem Drücken von Enter in einem Editfeld wird aus allen Feldern die nicht leer sind der SQL Abfagestring gebaut.

Bis dahin läuft alles Super.

Nur mit einem Feld nicht.

Eines meiner Datenbankfelder ist ein Boolsches Feld.

Wenn der User in das entsprechende Editfeld ein Ja eingibt, dann soll die Datenbank nur alle Datensätze mit dem True Wert ausgeben.

Hier nun der Code:

Delphi-Quellcode:
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
var pruefEingabe: integer;
    s: string;
begin
    pruefEingabe:=ord(key);
    if pruefEingabe=13 then  //Enter-Taste gedrückt??
    begin
     FindSQL(sender);
     with Query_Suchen do
     begin
      active := false;
      sql.clear;
      sql.add(sqlmerker);
      ParamCheck := true;
      if Edit5.Text <>'' then
      begin
        s := Edit5.Text + '%';
        ParamByName ('retnr').AsString := s;
      end;
      if Edit6.Text <>'' then
      begin
        s := Edit6.Text + '%';
        ParamByName ('lieferant').AsString := s;
      end;
      if Edit7.Text <>'' then
      begin
        s := Edit7.Text + '%';
        ParamByName ('kunde').AsString := s;
      end;
      if Edit8.Text <>'' then
      begin
        s := Edit8.Text + '%';
        ParamByName ('artikel').AsString := s;
      end;
      if Edit9.Text <>'' then
      begin
        s := Edit9.Text + '%';
        ParamByName ('artikelnr').AsString := s;
      end;
      if Edit10.Text <>'' then
      begin
        s := Edit10.Text + '%';
        ParamByName ('fehler').AsString := s;
      end;
      if Edit11.Text <>'' then
      begin
        s := Edit11.Text + '%';
        ParamByName ('fehlernr').AsString := s;
      end;
      if Edit12.Text <>'' then
      begin
        s := Edit12.Text + '%';
        ParamByName ('status').AsString := s;
      end;
      if Edit13.Text <>'' then
      begin // Hier könnte nun der Fehler folgen
        if (Edit13.Text = 'True') or (Edit13.Text = 'true') or (Edit13.Text = 'ja') or (Edit13.Text = 'Ja') then ParamByName ('getauscht').AsBoolean := True;
        if (Edit13.Text = 'False') or (Edit13.Text = 'false') or (Edit13.Text = 'nein') or (Edit13.Text = 'Nein') then ParamByName ('getauscht').AsBoolean := False;
      end;
      if Edit14.Text <>'' then
      begin
        ParamByName ('datum').AsDate := StrToDate(Edit14.Text);
      end;
      if Edit15.Text <>'' then
      begin
        ParamByName ('datum').AsDate := StrToDate(Edit15.Text);
      end;
      if Edit16.Text <>'' then
      begin
        s := Edit16.Text + '%';
        ParamByName ('lieferantennr').AsString := s;
      end;
      if Edit17.Text <>'' then
      begin
        s := Edit17.Text + '%';
        ParamByName ('kundennr').AsString := s;
      end;
      if Edit18.Text <>'' then
      begin
        ParamByName ('datum').AsDate := StrToDate(Edit18.Text);
      end;
      active := true;
      open;
     end;
    end;
end;

In dieser Procedure wird der String gebastelt

Delphi-Quellcode:
procedure TForm1.FindSQL(Sender: TObject);
var setzmerker :boolean;
begin
 setzmerker:= False;
 sqlmerker := 'SELECT * FROM retouren WHERE ';
 if Edit5.Text <>'' then
  begin
    Sqlmerker := sqlmerker + '(Retourennummer LIKE :retnr) ';
    setzmerker := True;
  end;
 if Edit6.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Lieferant LIKE :lieferant) ' else
    begin
      sqlmerker := sqlmerker + '(Lieferant LIKE :lieferant) ';
      setzmerker := True;
    end;
  end;
  if Edit7.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Kunde LIKE :kunde) ' else
    begin
      sqlmerker := sqlmerker + '(Kunde LIKE :kunde) ';
      setzmerker := True;
    end;
  end;
  if Edit8.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Artikel LIKE :artikel) ' else
    begin
      sqlmerker := sqlmerker + '(Artikel LIKE :artikel) ';
      setzmerker := True;
    end;
  end;
  if Edit9.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Artikelnummer LIKE :artikelnr) ' else
    begin
      sqlmerker := sqlmerker + '(Artikel LIKE :artikelnr) ';
      setzmerker := True;
    end;
  end;
  if Edit10.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Fehlerbeschreibung LIKE :fehler) ' else
    begin
      sqlmerker := sqlmerker + '(Fehlerbeschreibung LIKE :fehler) ';
      setzmerker := True;
    end;
  end;
  if Edit11.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Fehlernummer LIKE :fehlernr) ' else
    begin
      sqlmerker := sqlmerker + '(Fehlernummer LIKE :fehlernr) ';
      setzmerker := True;
    end;
  end;
  if Edit12.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Status LIKE :status) ' else
    begin
      sqlmerker := sqlmerker + '(Status LIKE :status) ';
      setzmerker := True;
    end;
  end;
  if (Edit13.Text = 'True') or (Edit13.Text = 'true') or (Edit13.Text = 'ja') or (Edit13.Text = 'Ja')
      or (Edit13.Text = 'False') or (Edit13.Text = 'false') or (Edit13.Text = 'nein') or (Edit13.Text = 'Nein') then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Getauscht LIKE :getauscht) ' else
    begin
      sqlmerker := sqlmerker + '(Getauscht LIKE :getauscht) ';
      setzmerker := True;
    end;
  end;
  if Edit14.Text <>'' then
  begin
    Edit15.Text :='';
    Edit18.Text :='';
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Datum <= :datum) ' else
    begin
      sqlmerker := sqlmerker + '(Datum <= :datum) ';
      setzmerker := True;
    end;
  end;
  if Edit15.Text <>'' then
  begin
    Edit18.Text := '';
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Datum >= :datum) ' else
    begin
      sqlmerker := sqlmerker + '(Datum >= :datum) ';
      setzmerker := True;
    end;
  end;
  if Edit16.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Lieferantennummer LIKE :lieferantnr) ' else
    begin
      sqlmerker := sqlmerker + '(Lieferantennummer LIKE :lieferantnr) ';
      setzmerker := True;
    end;
  end;
  if Edit17.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Kundennummer LIKE :kundennr) ' else
    begin
      sqlmerker := sqlmerker + '(Kundennummer LIKE :kundennr) ';
      setzmerker := True;
    end;
  end;
  if Edit18.Text <>'' then
  begin
    if setzmerker then Sqlmerker := sqlmerker + 'AND (Datum = :datum) ' else
    begin
      sqlmerker := sqlmerker + '(Datum LIKE :datum) ';
      setzmerker := True;
    end;
  end;
end;
Danke für Eure Hilfe

GoTo0815 31. Mär 2005 18:20

Re: SQL ABFRAGE BOOLEAN
 
Vielleicht habe ich mich undeutlich ausgedrückt:

Ich suche nach einer Möglichkeit in einer Datenbank mittels SQL nach einem Boolschen Wert sortieren (True oder False)

Wir muss ich den Parameter dazu definieren?

Gruß

Hendrik

Bernhard Geyer 31. Mär 2005 18:22

Re: SQL ABFRAGE BOOLEAN
 
Pushen von Beiträgen nach einer Stunde ist nicht gerade die feine Art. :warn:
Es werden auch Antworten auf Fragen gegeben, welche Älter als 1h sind bzw. manch ein Spezialist ist um die Uhrzeit nicht Online.

nieurig 1. Apr 2005 08:14

Re: SQL ABFRAGE BOOLEAN
 
Guten Morgen,
mir kommt ja der folgende Vergleich spanisch vor.

Zitat:

sqlmerker := sqlmerker + '(Getauscht LIKE :getauscht) ';
Hier würde ich kein LIKE verwenden, das ja eine Konvertierung in einen String bewirkt sondern direkt mit Gleichheitszeichen arbeiten.

Niels

r_kerber 1. Apr 2005 09:12

Re: SQL ABFRAGE BOOLEAN
 
Wie wäre es mit etwas in der Art:
SQL-Code:
SELECT *
FROM Transfers
WHERE (Paid = TRUE) AND NOT (Incomplete = "False")
BTW: Gefunden in der OH zur lokalen SQL (LOCALSQL.HLP)!

GoTo0815 4. Apr 2005 16:24

Re: SQL ABFRAGE BOOLEAN
 
ja natürlich!!!! Danke vielmals. Habe den Wald vor lauter Bäumen nicht gesehen.

Habe einfach die Zeilen kopiert und dabei nicht bei der SYNTAX aufgepasst.

Danke es läuft nun wunderbar mit einem '=' statt dem 'like'.

Danke

Gruß

Hendrik


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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