Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Abfrage per Eingabe (https://www.delphipraxis.net/24203-abfrage-per-eingabe.html)

Stevie 17. Jun 2004 14:25

Re: Abfrage per Eingabe
 
Scheint, dass LIKE hier nicht unterstützt wird, dann nimm mal 'Geber_Bezeichnung = ''' +Edit1.Text+ '*''';

abi 17. Jun 2004 14:33

Re: Abfrage per Eingabe
 
Jetzt bekomme ich zwar keine Fehler meldung, aber es passiert nicht.

Ich muss doch bestimmt meine Tabelle neu aufbauen lassen.

Ich glaub ich steh im Wald.
abi

Albi 17. Jun 2004 14:48

Re: Abfrage per Eingabe
 
Hast Du die Dataset mit der entsprechenden DB verbunden? Und sie auch geöffnet, dann must Du auch noch die entsprechende Datasource mit der Dataset verbinden, wenn ich mich nicht irre, und das Grid oder was auch immer du zum anzeigen verwendest.

Das mit gleich dem schauen ob der Name schon da ist oder nicht, ist genau das was wir meinten. Wenn du ein Wort mit 10 Buchstaben hast, wird deine Abfrage an die DB genau 10 mal gestellt spricht für jeden Buchstaben den du eingibst. Und das % am Ende ist nicht weiter als ein Joker den du einsetzt. Das heißt wenn du z.B. Mü eingibst wird alles in deiner DB herausgesucht was mit Mü beginnt, also Müller, Mütter usw.. Du hast somit eine sehr ungenaue Suche und beansprucht die DB unnötigt.

Wenn ich soetwas verwende, dann suche ich erst, wenn ich das Feld verlasse, somit wird die Abfrage nur einmal an die DB gestellt.

abi 17. Jun 2004 14:58

Re: Abfrage per Eingabe
 
Hallo Albi
das mit dem 10 mal abfragen hab ich schon verstanden, vielleicht mach ich auch die Abfrage nach jedem 3 Buchstabe. Aber des sehe ich ja dann, wies läuft.

In Meine TQuery, heisst qrSuchen, steht folgendes drin
SQL
Code:
 
  SELECT
 G.Nummer,
 G.Geber_Bezeichnung,
 G.Device_Name,
 G.Knotennummer,
 G.BaudrateID,
 B.Baudrate,
 H.Hw_Version As Hardware_Version,
 S.Sw_Version As Software_Version,
 G.Auflösung,
 G.Preset_Wert,
 G.Min_Toleranz,
 G.Max_Toleranz,
 G.Nocken_Position_1,
 G.Nocken_Position_2,
 G.Hysterese_1_Nocken,
 G.Hysterese_2_Nocken,
 G.Cyclic_Zeit,
 G.Seriennummer,
 G.Producer_Heart_Time,
 G.Consumer_Heart_Time,
 G.Datum_Uhrzeit,
 A.Nachname || ' ' || A.Vorname As Arbeiter,
 A.Abteilung,
 G.Bemerkung

 
 
FROM "Geber Datenbank.db" G
LEFT OUTER JOIN Baudrate B
 ON (G.BaudrateID = B.Nummer)
LEFT OUTER JOIN "Hw Version.db" H
 ON ((G.HwVersionID) = H.Nummer)
LEFT OUTER JOIN "Sw Version.db" S
  ON (G.SwVersionID = S.Nummer)
LEFT OUTER JOIN Arbeiter A
 ON (G.ArbeiterID = A.Nummer)
DataSource ist leer, muss da auch noch was rein.

und in meiner DataSource, heisst dsSuchen, steht
für DataSet qrSuchen

Hab des bis jetzt so gemacht.
Diese Query soll nur fürs Suchen sein.

Ich benute auch TGrid um meine Werte anzuzeigen.

abi

Michael80 17. Jun 2004 15:06

Re: Abfrage per Eingabe
 
Hi Abi,

um dein problem mit der suche pro buchstabe zu lösen nimm die on key press funktion von deinem edit feld

Delphi-Quellcode:
procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then // key 13 entertaste
  begin // nachfolgend dein suchcode bei mir der anmeldevorgang
        try
                with Datamodule2.ibdatabase1 do
                begin
                Connected                              := false;
                Params.Add('user_name='+Edit1.Text+'');
                Params.Add('password='+Edit2.Text+'');
                Params.Add('lc_ctype=WIN1252');
                SQLDialect                             := 3;
                Connected                              := true;
                end
                except
                on EIBInterBaseError do
                begin
                MessageDlg('Benutzer oder Passwort falsch'#13'bitte neu eingeben oder abbrechen',
                        mtConfirmation,
                        [mbOK],0);
                        exit;
                end;
        end;
        Form1.StatusBar1.Panels[1].Text        := Edit1.Text;
        Form4.StatusBar1.Panels[1].Text        := Edit1.Text;
        close;
        key := #0; // key #0 am schluss, damit das dumme pling nicht kommt beim tastendruck
        end
        else;

end;
das is der code von meinem login fenster für meine datenbank sobald ich enter key #13 drücke führt er den anmeldevorgang aus

ich hab auch nen suchvorgang mal geschrieben, ich such mir das projekt raus und melde mich wieder!

Gruß

michael

Albi 17. Jun 2004 15:07

Re: Abfrage per Eingabe
 
Was verwendest Du nun Query oder Dataset? Also eigentlich sollte es reichen, wenn du einfach diese Abfrage um den Punkt erweiterst den ich oben schon mal gepostet habe.

[sql]Select ... from DB ..deine Joins Where Bezeichnung Like '''+Edit1.Text+'%'''[code]

Wenn Du ein Dataset verwendest, dann mußt du glaub ich das % durch ein * ersetzen. Bin mir da aber nicht ganz sicher.

Michael80 17. Jun 2004 15:20

Re: Abfrage per Eingabe
 
Delphi-Quellcode:
begin
        DataModule2.IBQuery1.Filtered  := false;
        DataModule2.IBQuery1.Close;
        DataModule2.IBQuery1.SQL.Clear;
        DataModule2.IBQuery1.SQL.Add('SELECT * FROM DEINETABELLE WHERE DEINSUCHFELD like ''%'+Edit1.Text+'%'' ');
        DataModule2.IBQuery1.Open;
        DataModule2.IBQuery1.Active    := true;
end;
diese suche arbeitet mit wildcards,

also wenn du Mü eingibst zeigt er dir alles wo irgendwo mü vorkommt.

wenn du es anders willst musst du mit dem ''%' experementieren. das % ist das wildcard,
der rest wird für den sql string benötigt.


ein normaler aufbau sollte sein

DB ---- QUERY --- im query muss unter database die DB stehen

um die daten noch anzuzeigen brauchst noch eine datasource. in dieser muss unter dataset das query stehen. im db grid dann unter datasource die entsprechende datasource.

erzähl uns mal genau was für ne datenbank und was du noch alles in deinem projekt hast!


gruß

michael

Stevie 17. Jun 2004 15:20

Re: Abfrage per Eingabe
 
Der Ansatz ist schon richtig, aber (mein Fehler :oops:):
- deine Datenbank (welche verwendest du?) versteht kein LIKE
- der Trick mit dem * funktioniert scheinbar nur mit ClientDataSets!?

Deshalb mein Vorschlag:
- ClientDataSet benutzen und in diesem die Suche implementieren.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSetProvider1.DataSet := ZQuery1;
  ClientDataSet1.ProviderName := DataSetProvider1.Name;
  ZQuery1.Open;
  ClientDataSet1.Open;
  ClientDataSet1.Data := DataSetProvider1.Data;
  DataSource1.DataSet := ClientDataSet1;
  DBGrid1.DataSource := DataSource1;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.Filtered := CheckBox1.Checked;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.Filter := 'Bezeichnung = ''' + Edit1.Text + '*''';
end;

Albi 17. Jun 2004 15:23

Re: Abfrage per Eingabe
 
Macht es ihm nicht so schwer. Er arbeitet sich gerade in das Thema ein, wenn es so weiter geht versteht er nur noch Bahnhof. Und weiß gar nicht mehr was er machen soll.

abi 17. Jun 2004 15:25

Re: Abfrage per Eingabe
 
Mercy für die Hilfe
ich hoffe ihr seit mir nicht böse.

Aber irgendwie komme ich mir vor als währe ich irgendwo dagegen gelaufen.

Werde des morgen auf jedenfall mal testen, aber auf den erste Blick sicht gut aus.

Genau des was ich habe wollte.

Wünsch euch noch was.
mfg
abi


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr.
Seite 2 von 4     12 34      

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