![]() |
Re: Abfrage per Eingabe
Scheint, dass LIKE hier nicht unterstützt wird, dann nimm mal 'Geber_Bezeichnung = ''' +Edit1.Text+ '*''';
|
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 |
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. |
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:
DataSource ist leer, muss da auch noch was rein.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) 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 |
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:
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
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; ich hab auch nen suchvorgang mal geschrieben, ich such mir das projekt raus und melde mich wieder! Gruß michael |
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. |
Re: Abfrage per Eingabe
Delphi-Quellcode:
diese suche arbeitet mit wildcards,
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; 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 |
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; |
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.
|
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 23:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz