Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Autocompletion bei DBEdit ? (https://www.delphipraxis.net/69852-autocompletion-bei-dbedit.html)

Vader 21. Mai 2006 09:44


Autocompletion bei DBEdit ?
 
hallo,

wie funktioniert Autocompletion bei einen DBEDIT ?
mfg vader

mkinzler 21. Mai 2006 09:46

Re: Autocompletion bei DBEdit ?
 
Selbst implementieren, oder eine DBEdit-Komponente suchen,in der das schon implementiert ist.

Vader 21. Mai 2006 11:05

Re: Autocompletion bei DBEdit ?
 
wie geht das selbst implementieren ??
mfg vader

mkinzler 21. Mai 2006 11:10

Re: Autocompletion bei DBEdit ?
 
Du mußt ein Event-handler schreiben, der bei einer Eingabe in den Edit, den Inhalt mit einer Liste vergleicht.

Vader 21. Mai 2006 13:29

Re: Autocompletion bei DBEdit ?
 
das klingt ziemlich schwierig oder ?
können die DBEdits bei den Jedi's das von selbst ?
mfg vader

inherited 22. Mai 2006 09:14

Re: Autocompletion bei DBEdit ?
 
So zb: (Ohne garantie auf fehler is jez mal so hingetippt
Delphi-Quellcode:
procedure TForm8.Edit1Change(Sender: TObject);
var i, OldLength: Integer;
begin
  if Edit1.Text='' then exit;
  for i := 0 to Liste.Count-1 do
  begin
    if copy(Liste.Items[i], 1, Length(Edit1.Text))=Edit1.Text then
    begin
      OldLength:=Length(Edit1.Text);
      Edit1.Text:=Liste.Items[i];
      Edit1.SelStart:=OldLength;
      Edit1.SelLength:=Length(Edit1.Text);
      exit;
    end;
  end;
end;
*nachcodelibmanagernschrei* ;)

Sharky 22. Mai 2006 09:40

Re: Autocompletion bei DBEdit ?
 
Hai inherited,

mal zwei Anmerkungen zu deinem Code ;-)
a) Man sollte in solchen fällen nie den Komponentennamen hardcoden sondern den Sender auswerten
b) Du hast ein OnChange Ereigniss in dem Du den Inhalt des Edits änderst. Was passiert also? Das OnChange ruft sich wieder selber auf.

inherited 22. Mai 2006 10:16

Re: Autocompletion bei DBEdit ?
 
Zitat:

Zitat von Sharky
Hai inherited,

mal zwei Anmerkungen zu deinem Code ;-)
a) Man sollte in solchen fällen nie den Komponentennamen hardcoden sondern den Sender auswerten
b) Du hast ein OnChange Ereigniss in dem Du den Inhalt des Edits änderst. Was passiert also? Das OnChange ruft sich wieder selber auf.

a: wofür sind die codelibmanager da? *g*
b: oh, ich verbesser es nomma ändern

Vader 22. Mai 2006 19:20

Re: Autocompletion bei DBEdit ?
 
hallo inherited

dein code interessiert mich

Delphi-Quellcode:
procedure TForm8.Edit1Change(Sender: TObject);
var i, OldLength: Integer;
begin
  if Edit1.Text='' then exit;
  for i := 0 to Liste.Count-1 do
  begin
    if copy(Liste.Items[i], 1, Length(Edit1.Text))=Edit1.Text then
    begin
      OldLength:=Length(Edit1.Text);
      Edit1.Text:=Liste.Items[i];
      Edit1.SelStart:=OldLength;
      Edit1.SelLength:=Length(Edit1.Text);
      exit;
    end;
  end;
end;

sharky schreibt:
Zitat:

Du hast ein OnChange Ereigniss in dem Du den Inhalt des Edits änderst. Was passiert also? Das OnChange ruft sich wieder selber auf.


wie muß ich diesen code ändern was sharky meint, komme nicht drauf `?
mfg vader

DP-Maintenance 22. Mai 2006 20:07

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Datenbanken" nach "VCL / WinForms / Controls" verschoben.
In diesem Fall hat es ja eigentlich nichts mit Datenbanken zu tun.

inherited 22. Mai 2006 21:23

Re: Autocompletion bei DBEdit ?
 
Die enfachste möglichkeit die mir grad einfällt ist das onchange-ereignis vor dem gewollten ändern audf eine leere procedur zu sezten und anschließend wieder zurück

jbg 22. Mai 2006 21:28

Re: Autocompletion bei DBEdit ?
 
Zitat:

Zitat von Vader
das klingt ziemlich schwierig oder ?
können die DBEdits bei den Jedi's das von selbst ?

Die JVCL bietet das nicht direkt an. Jedoch generisch für alle Edit Controls, also auch TDBEdit. Die Komponente die diese Funktionatlität bereitstellt heißt TJvLookupAutoComplete und ist in der Palette "Jv Non-Visual" zu finden.

Vader 23. Mai 2006 12:33

Re: Autocompletion bei DBEdit ?
 
hallo jbg


die TJvLookupAutoComplete komponente hift mi aber nichts in delphi personal 2005 weil ich dort keine
datenbankkomponenten habe so wie in delphi enterprise !


kann man den code con inherited nicht irgendwie hinbekommen das das funktioniert ?
das ich in meinem dbedit changeereigniss eine liste hinterlegen kann ?
mfg vader

rwachtel 23. Mai 2006 13:08

Re: Autocompletion bei DBEdit ?
 
Du hast in Delphi Personal 2005 auch kein DBEdit aus dem von Dir genannten Grund.

Jetzt erklär erst mal genau, was Du womit wofür erreichen willst.

inherited 23. Mai 2006 14:51

Re: Autocompletion bei DBEdit ?
 
Delphi-Quellcode:
type
  TForm8 = class(TForm)
    Edit1: TEdit;
    Liste: TListBox;
    procedure Edit1Change(Sender: TObject);
    procedure towel(Sender: TObject);

[...]

implementation

{$R *.dfm}

procedure TForm8.towel(Sender: TObject);
begin
  ;
end;

procedure TForm8.Edit1Change(Sender: TObject);
var i, OldLength: Integer;
begin
  if Edit1.Text='' then exit;
  for i := 0 to Liste.Count-1 do
  begin
    if copy(Liste.Items[i], 1, Length(Edit1.Text))=Edit1.Text then
    begin
      Edit1.OnChange:=towel;
      OldLength:=Length(Edit1.Text);
      Edit1.Text:=Liste.Items[i];
      Edit1.SelStart:=OldLength;
      Edit1.SelLength:=Length(Edit1.Text);
      Edit1.OnChange:=Edit1Change;
      exit;
    end;
  end;
end;
SO par example

Vader 23. Mai 2006 18:00

Re: Autocompletion bei DBEdit ?
 
hallo inherited

dein code funzt, aber nur bei einen normalen TEdit, ich brauche das aber bei einen DBEdit was ja schon der titel
des treads sagt !
hab das bei DBEdit probiert, da rührt sich gar nichts, es läßt mich überhaupt nichts mehr eintragen ???
mfg vader

mkinzler 23. Mai 2006 18:04

Re: Autocompletion bei DBEdit ?
 
Im Zeifelsfall mußt du halt einen normalen edit nehmen und die Werte dann manuell in den Query schreiben.

rwachtel 23. Mai 2006 18:31

Re: Autocompletion bei DBEdit ?
 
Ja, aber wenn Du es doch gar nicht in Delphi 2005 Personal machen willst, warum nimmst Du nicht dann die vorgeschlagene JVCL? Was bekomme ich hier nicht mit?

Vader 23. Mai 2006 18:48

Re: Autocompletion bei DBEdit ?
 
hallo

rwachtel schreibt :
Zitat:

Ja, aber wenn Du es doch gar nicht in Delphi 2005 Personal machen willst, warum nimmst Du nicht dann die vorgeschlagene JVCL? Was bekomme ich hier nicht mit?
ich habe die JVCL nur auf Delphi Personal 2005 zum laufen gebracht und nicht auf Delphi6 Enterprise
ich habe aber meine datenbanken auf Delphi6 Enterprise programmiert !


mkinzler schreibt :
Zitat:

Im Zeifelsfall mußt du halt einen normalen edit nehmen und die Werte dann manuell in den Query schreiben.
ist das jetzt nicht schon sehr umständlich, oder geht das einfach "Werte dann manuell in den Query schreiben" ?
mfg vader

mkinzler 23. Mai 2006 18:51

Re: Autocompletion bei DBEdit ?
 
Delphi-Quellcode:
Query.FieldByName('<Feldname>').Value := Edit.Text;

Vader 23. Mai 2006 19:17

Re: Autocompletion bei DBEdit ?
 
hallo mkinzler

Delphi-Quellcode:
Query.FieldByName('<Firma>').Value := Edit.Text;
mein Feldname in der tabelle Lager heißt Firma, aber wenn ich den code ausführe kommt die fehlermeldung

" query1 das feld <Firma> wurde nicht gefunden " ?

mfg vader

mkinzler 23. Mai 2006 19:19

Re: Autocompletion bei DBEdit ?
 
Die <> weglassen.

Vader 23. Mai 2006 19:31

Re: Autocompletion bei DBEdit ?
 
ja, aber er schreibt mir nichts in meine tabelle in das feld Firma, mit deinen code ?
ich verstehe das sowieso nicht ich habe ja keine verbindung vom edit zur tabelle was ich sonst
mit dataource und datafield habe ???

wo schreibe ich überhaupt deinen code rein, in welches ereigniss?
mfg vader

mkinzler 23. Mai 2006 19:34

Re: Autocompletion bei DBEdit ?
 
Am besten in Query.BeforePost

Vader 23. Mai 2006 20:32

Re: Autocompletion bei DBEdit ?
 
nein geht nicht, er schreibt nichts rein in das tabellenfeld "Firma" mit dem ereigniss Query.BeforePost ?
mfg vader

mkinzler 23. Mai 2006 20:34

Re: Autocompletion bei DBEdit ?
 
Das Ereignis schreibt auch nichts, sondern wird beim Schreiben aufgerufen und setzt dann den Feldwert.

Vader 23. Mai 2006 21:28

Re: Autocompletion bei DBEdit ?
 
falsch formuliert , dein code in Query.BeforePost tut es aber nicht !
mfg vader

mkinzler 23. Mai 2006 21:31

Re: Autocompletion bei DBEdit ?
 
Dann trage es doch direkt vor dem
Delphi-Quellcode:
Query.Post;
ein.

Vader 24. Mai 2006 08:08

Re: Autocompletion bei DBEdit ?
 
geht auch nicht !
mfg vader

marabu 24. Mai 2006 08:23

Re: Autocompletion bei DBEdit ?
 
Guten Morgen, Vader.

Unabhängig von deinen Lernübungen möchte ich auf etwas hinweisen, was dir vielleicht noch nicht sofort klar wird, aber woran du dich im richtigen Augenblick hoffentlich erinnern wirst.

AutoComplete in Verbindung mit einem DBEdit ist so ziemlich das letzte was man braucht. Abstrakt löst man das eleganter mit einer DBComboBox, der man dann auch die Items mitgeben kann, gegen die geprüft werden soll.

Besser ist allerdings der Einsatz von DBLookupComboBox, denn die mehrfache Eingabe eines Strings aus einer Vorratsliste sollte schon beim Datenmodellentwurf durch einen Normalisierungsschritt ausgeschlossen worden sein.

Grüße vom marabu

Vader 24. Mai 2006 08:49

Re: Autocompletion bei DBEdit ?
 
hallo

mit DBLookupComboBox hab ich es eh gemacht und funktioniert, aber meine suchabfrage funktioniert nicht mehr
darum wollte ich auf eine einfache weise so eine Autocompletion erreichen ohne meine ganze datenbank
umzustricken !
mfg vader

Vader 25. Mai 2006 14:37

Re: Autocompletion bei DBEdit ?
 
hallo,


mir geht der code von mkinzler nicht aus dem kopf,aber funzt nicht,ist der überhaupt möglich ??

Delphi-Quellcode:
Query.FieldByName('Feldname').Value := Edit.Text;

mfg vader

marabu 25. Mai 2006 14:42

Re: Autocompletion bei DBEdit ?
 
Sicher funktioniert der Code, wenn du ihn an deine Verhältnisse anpasst.
Welche Fehlermeldung erhältst du denn?

Grüße vom marabu

Vader 25. Mai 2006 15:45

Re: Autocompletion bei DBEdit ?
 
es kommt kein fehler, habe den code so rein geschrieben

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
Query1.FieldByName('Firma').Value := Edit1.Text;
query1.post;
end;
aber es wird der wert in die tabelle nicht abgespeichert !
mfg vader

marabu 25. Mai 2006 15:57

Re: Autocompletion bei DBEdit ?
 
Hast du die Query1 vorher irgendwann in den Edit-Modus versetzt?

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  with Query1 do
  begin
    Edit;
    FieldByName('Firma').Value := Edit1.Text;
    post;
  end;
end;
marabu

Vader 25. Mai 2006 16:31

Re: Autocompletion bei DBEdit ?
 
ja das war es danke , jetzt funktioniert es !!!
mfg vader


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