Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Autovervollständigung. (https://www.delphipraxis.net/20669-autovervollstaendigung.html)

thomasvonmuenster1 21. Apr 2004 10:56


Autovervollständigung.
 
Hallo zusammen!

Ich gebe ein String in ein Edit ein.
Vergleiche diese Eingabe Edit.Text mit meinen Einträgen in der DB.

Delphi-Quellcode:
timer4.Enabled:=false;
IBQuery4.SQL.Text:='select titel,datei from tabelle1 where memofeld like ''%'+edit1.Text+'%''';
IBQuery4.Open;
Wenn der String eindeutig ist soll er den ergänzen.
Was könnte ich den Probieren?
Habe leiden keinen Plan wie ich daran gehen soll.

Albi 21. Apr 2004 11:52

Re: Autovervollständigung.
 
Wenn ich das richtig sehe arbeitest Du mit Interbase. Dann schreibe eine StoredProc die nach ähnlichen Wortlaut sucht. Und schickt das Ergebnis in eine ComboBox. In das OnChange-Ereignis schreibts Du dann die SelectAbfrage.

Code:
Select Feld From DB WHERE Feld = :CB.Text
Ich habe das zwar jetzt nicht ausprobiert aber so würde ich das erstmal versuchen.

Akut-Programming 21. Apr 2004 11:55

Re: Autovervollständigung.
 
Also, ich weiß jetzt nicht genau, ob ich dich richtig verstanden hab. :gruebel: Aber wenn du wissen willst, ob der String im "memofeld" ist, könntest du es doch z.B. so machen
Delphi-Quellcode:
Query1.active:=false;
Query1.SQL.Clear;
Query1.SQL.Add('select titel,datei from tabelle1 where memofeld like %'+edit1.Text+'%');
Query1.ExecSQL;
Query1.active:=true;

if Query1.RecordCount<>1
then begin
Query2.SQL.Clear;
Query2.SQL.Add(insert into tabelle1 values (titel, datei, memofeld) ('Beispiel','datei1.txt',+edit1.text));
Query2.ExecSQL;
end else if Query1.RecordCount=1
then begin
Application.MessageBox('Der String existiert bereits in der Datei!','Datensatz vorhanden', MB_OK + MB_ICONINFORMATION);
end;
Funktionalität hab ich jetzt nicht getestet. Aber so könntest du z.B. abfragen ob der String aus deinem Edit in dem Text in deiner Tabelle ist. Über die abfrage des Recordcounts kannst du dann je nach belieben weitere Aufgaben ausführen. - So wie im oberen Code: wenn das Recordcount 1 ergibt, ist der String enthalten, andernfalls soll er es einfügen. Ist vielleicht nicht die beste Lösung, aber ich hoffe es reicht erstmal. :zwinker:

Gruß,

thomasvonmuenster1 21. Apr 2004 12:12

Re: Autovervollständigung.
 
Delphi-Quellcode:
IBStoredProc1.SQLType:='suchbegriffe from tabelle1 where suchbegriffe like ''%'+DBComboBox1.Text+'%''';
Da sagt er mir Inkompatieble Typen!
Woran liegt das?

Hansa 21. Apr 2004 12:23

Re: Autovervollständigung.
 
Akut hats fast richtig gemacht. Aber StoredProc ist überflüssig und mit den '' hat er sich vertan. Das hier ist jetzt getestet :

Delphi-Quellcode:
DataSet1.SelectSQL.Text := 'SELECT NR,BEZ FROM ART WHERE UPPER (BEZ) LIKE UPPER (''%'+Edit1.Text+'%'') ORDER BY NR';
Das Upper würde ich gleich mitschleppen. Und beachte die '' :!:

Akut-Programming 21. Apr 2004 12:24

Re: Autovervollständigung.
 
Zitat:

Zitat von thomasvonmuenster1
Delphi-Quellcode:
IBStoredProc1.SQLType:='

:gruebel: Bist du dir mit SQLType sicher?? Gibts da nicht auch nur "SQL"? Oder versuchs mit
Delphi-Quellcode:
IBStoredProc1.ExecProc;

thomasvonmuenster1 21. Apr 2004 12:31

Re: Autovervollständigung.
 
Habe es auf meine Daten Abgewandelt.
Man sieht nichts!Kein Ergebnis.

Delphi-Quellcode:
procedure TForm1.DBComboBox1Change(Sender: TObject);
begin
IBQuery3.SQL.Text := 'SELECT suchbegriffe from tabelle1 WHERE UPPER (suchbegriffe) LIKE UPPER (''%'+Edit2.Text+'%'')';
end;

Hansa 21. Apr 2004 12:40

Re: Autovervollständigung.
 
Mann o Mann. :mrgreen: Hier ist der ganze Source :

Delphi-Quellcode:
  EingDM.ArtDS.Close;
  EingDM.ArtDS.SelectSQL.Text := 'SELECT NR,BEZ FROM ART WHERE UPPER (BEZ) LIKE UPPER (''%'+Edit1.Text+'%'') ORDER BY NR';
  EingDM.ArtDS.Open;
EingDM ist ein Datenmodul. Kann man auch weg lassen. ArtDS ist ein DataSet. Dann habe ich noch ein DBGrid samt DataSource, um zu sehen, was passiert. Und der Dreizeiler steht im OnkeyPress eines Edits. 8) Allerdings ist mir noch aufgefallen, daß der zuletzt eingegebene Buchstabe ignoriert wird. Wieso ? :gruebel: Beim ersten Versuch habe ich allerdings auch nichts gesehen, weil ich dank C+P zweimal close drin hatte. :wink:

thomasvonmuenster1 21. Apr 2004 12:49

Re: Autovervollständigung.
 
Delphi-Quellcode:
procedure TForm1.DBComboBox1Change(Sender: TObject);
begin
timer3.Enabled:=false;
IBQuery3.SQL.Text := 'SELECT suchbegriffe from tabelle1 WHERE UPPER (suchbegriffe) LIKE UPPER (''%'+Edit2.Text+'%'')';
IBQuery3.Open;
end;
Ich sitze auf der Leitung!
Warum sehe ich nichts in meiner ComboBox?

Hansa 21. Apr 2004 12:55

Re: Autovervollständigung.
 
Habe jetzt noch eine DBcomboBox auf der Form. Da steht immer der Wert vom aktiven Datensatz drin. Wenn ich sie aufklappe, steht auch nichts drin. Kann aber nicht viel sein. Leider jetzt keine Zeit mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.
Seite 1 von 2  1 2      

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