Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Master/Detailabfrage mit Teilstrings (https://www.delphipraxis.net/46968-sql-master-detailabfrage-mit-teilstrings.html)

waldforest 3. Jun 2005 22:23

Datenbank: Dbase • Zugriff über: SQL

SQL Master/Detailabfrage mit Teilstrings
 
Hallo,
ich komme in Bezug auf eine Master Detailabfrage nicht weiter.
Eine
Query2.SQL.Text := 'SELECT * From "IO.DBF" Where "IO.DBF"."NAME" =:"Name"';
Abfrage läuft über 2 Gridfenster in Beziehung sauber, d.h. wenn der Name in Query1 = Query2 ist werden die Daten im 2 Fenster sauber ausgewählt.
Nun möchte ich aber, dass nur ein Teil des Namens von Query1 richtig sein muss, damit im Query2 die Daten ausgewählt werden.
z.B.
Der gewählte Name im Grid1 ist "Müller" nun sollen im Grid 2 alle Namen, z.B. "Müller Gerd", "Müller Gabi" über die SQL-Master/Detailbezehung ausgegeben werden.

Hierzu nutze ich
Query2.SQL.Text := 'SELECT * From "IO.DBF" as vio Where "IO.DBF"."NAME" LIKE '+s+TRIM(Query1.FieldByName('NAME').AsString)+'%'+ s;

wobei hier s := CHR(39) ist um die Apos abzubilden

Leider wird nun keine Relation mehr zum Query1 hergestellt, mein Grid 2 bleibt statisch mit dem letzten Wert

Würde mich über ´nen Professionellen Tipp freuen.

mfg Tom

Albi 4. Jun 2005 06:36

Re: SQL Master/Detailabfrage mit Teilstrings
 
Hallo,

Wie sind deine Tabellen aufgebaut. Wenn ich das richtig sehe, dann hast Du den Name und Vorname in einem Feld zu stehen?

Hast Du mal versucht das Trim wegzulassen, da werden doch dann die Leerzeichen weggekürzt oder irre ich da jetzt?

Ich würde das jetzt ganz spontan ohne es getestet zu haben so machen.

Code:
Query2.SQL.Text := 'SELECT * From "IO.DBF" Where "IO.DBF"."NAME" LIKE :iName+'%'
ParamCheck:= true;
ParamByName('iName').value:= FieldByName('Name').AsString

waldforest 4. Jun 2005 10:23

Re: SQL Master/Detailabfrage mit Teilstrings
 
Hallo,
danke für den Tipp, funktioniert etwas besser, aber leider noch nicht so wie ich will.
Der Wert wird zwar jetzt sauber in die Variable iName geschrieben, bleibt aber dann konstant.

Ich denke, ich muss diesen über ein AfterScroll in query1 immer aktualisieren.

Nun flackert zwar der Grid 2 aber ich erhalte das gewünschte Ergebnis.

Bin noch ein Delphianfänger, geht bestimmt auch anders, aber aufs Ergebnis kommt´s an.

Danke !!!

Tom

alzaimar 4. Jun 2005 21:31

Re: SQL Master/Detailabfrage mit Teilstrings
 
Ich würde mal versuchen, die Tabellen auf deine Bedürfnisse anzupassen, sodass die Master-Detail Beziehung nicht über ein 'LIKE' führt, sondern über eine echte 1:n-Beziehung (also über '='). Mittlerweile biege ich mir meine DBs so um, das die Funktionalität der GUI optimal umgesetzt wird.

marabu 5. Jun 2005 07:37

Re: SQL Master/Detailabfrage mit Teilstrings
 
Zitat:

Zitat von waldforest
Nun flackert zwar der Grid 2 aber ich erhalte das gewünschte Ergebnis.

Das kann man auch noch ändern:

Delphi-Quellcode:
procedure TMainForm.dsMasterDataChange(Sender: TObject; Field: TField);
var
  Nachname: string;
begin
  with qDetail do begin
    DisableControls;
    SQL.Text := 'select * from io where name like :filt';
    Nachname := qMaster.FieldByName('Name').AsString;
    SetLength(Nachname, Pos(' ', Nachname));
    ParamByName('filt').Value := Nachname + '%';
    Open;
    EnableControls;
  end;
end;
Grüße vom marabu


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