Umgang mit DBLookUpComboBox
-
- Beiträge: 318
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Umgang mit DBLookUpComboBox
Guten Abend liebe Forumsgemeinde,
im Anhang ein kleines Projekt, bei dem ich nicht weiterkomme. Entworfen auf'm Mac, aber ich denke das spielt erstmal keine Rolle.
Womit ich nicht weiterkomme ist, dass wenn ich am linken DBNavigator auf "Insert" gehe entsteht im DBGrid eine leere neue Zeile. Soweit so gut.
Wähle ich jetzt z.B. aus der linken DBLookupComboBox die Fahrzeugart aus, dann löscht sich im DBGrid sie entstandene neue Zeile. Ich kann immer nur eine der bereits bestehenden Zeilen abändern.
Dann möchte ich gerne wissen, was an den DBLookupComboBoxen eingestellt werden muß, dass bei der Suche nach einem Eintrag von links nach rechts mit der Suche der eingegeben Zeichenkette gesucht wird. Z.B. "Zugmaschine", dass schon bei Eingabe von "Zug" der richtige Eintrag (weil's nur einen gibt) gefunden wird.
Ich stehe auf der Seife. Ich bin vermutlich zu sehr fixiert darauf durch Zusammenklicken von DB-Komponenten die Sachen an's laufen zu bekommen ohne viel Quellcode schreiben zu müssen.
Vielen Dank und schönen Abend
Volker
im Anhang ein kleines Projekt, bei dem ich nicht weiterkomme. Entworfen auf'm Mac, aber ich denke das spielt erstmal keine Rolle.
Womit ich nicht weiterkomme ist, dass wenn ich am linken DBNavigator auf "Insert" gehe entsteht im DBGrid eine leere neue Zeile. Soweit so gut.
Wähle ich jetzt z.B. aus der linken DBLookupComboBox die Fahrzeugart aus, dann löscht sich im DBGrid sie entstandene neue Zeile. Ich kann immer nur eine der bereits bestehenden Zeilen abändern.
Dann möchte ich gerne wissen, was an den DBLookupComboBoxen eingestellt werden muß, dass bei der Suche nach einem Eintrag von links nach rechts mit der Suche der eingegeben Zeichenkette gesucht wird. Z.B. "Zugmaschine", dass schon bei Eingabe von "Zug" der richtige Eintrag (weil's nur einen gibt) gefunden wird.
Ich stehe auf der Seife. Ich bin vermutlich zu sehr fixiert darauf durch Zusammenklicken von DB-Komponenten die Sachen an's laufen zu bekommen ohne viel Quellcode schreiben zu müssen.
Vielen Dank und schönen Abend
Volker
- Dateianhänge
-
Archiv.zip
- (110.79 KiB) 33-mal heruntergeladen
-
- Beiträge: 608
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Umgang mit DBLookUpComboBox
Irgend etwas stimmt damit nicht, weil man hinzufügen zweimal machen muss. Beim ersten Klick tritt von dir beschriebener Effekt ein, aber wenn man gleich wieder auf + drückt, dann funktioniert es, merkwürdig.
Ich benutze selbst erstellte Lookupcombox, deshalb ist es mir so ein Verhalten nie aufgefallen.
Ich benutze selbst erstellte Lookupcombox, deshalb ist es mir so ein Verhalten nie aufgefallen.
-
- Beiträge: 608
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Umgang mit DBLookUpComboBox
+ Knopf ruft Dataset.Insert auf, deshalb habe ich Dataset.Append probiert damit geht es.
Du könntest selbst ein + Button hinzufügen und damit SQLQuery1.Append aufrufen oder DBNavigator selbst ändern, hier bei dieser Datei:
Oder nimm einfach den DBNavigator, den ich in diesem Forum gepostet habe und änder dein Funktion zu das:
Du könntest selbst ein + Button hinzufügen und damit SQLQuery1.Append aufrufen oder DBNavigator selbst ändern, hier bei dieser Datei:
Code: Alles auswählen
// Lazarus\lcl\include\dbcustomnavigator.inc
procedure TDBCustomNavigator.BtnClick(Index: TNavigateBtn);
begin
//...
//das ändern -> nbInsert: Insert;
nbInsert: Append; // <-- zu das
//...
end;
Code: Alles auswählen
procedure TForm1.DBNavigator1BeforeAction(Sender: TObject; Button: TDBNavButtonType);
begin
If (Button = nbInsert) Then
begin
SQLQuery1.ApplyUpdates;
SQLTransaction1.CommitRetaining;
DBNavigator1.ContinueAction:=false; //Einfügen-Aktion abbrechen.
SQLQuery1.Append; //hinzufügen
end;
end;
-
- Beiträge: 318
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Umgang mit DBLookUpComboBox
Hallo Soner,
vielen Dank für Deine Hilfe. Doch wo finde ich Deinen DBNavigator in den Posts?
Wenn ich in der Suche "Soner & DBNavigator" eingebe erhalte ich 4 Treffer, aber ohne Möglichkeit was herunter zu laden.
Wenn man nur DBNavigator eingibt, dann sind es 127 Treffer. Zu viele sie alle durchzusehen.
Vielen Dank und viele Grüße
vielen Dank für Deine Hilfe. Doch wo finde ich Deinen DBNavigator in den Posts?
Wenn ich in der Suche "Soner & DBNavigator" eingebe erhalte ich 4 Treffer, aber ohne Möglichkeit was herunter zu laden.
Wenn man nur DBNavigator eingibt, dann sind es 127 Treffer. Zu viele sie alle durchzusehen.
Vielen Dank und viele Grüße
-
- Beiträge: 608
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Umgang mit DBLookUpComboBox
Ich habe keine neue Komponente erstellt, sondern die von Lazarus erweitert. Du muss die Datei dbctrls.pp in den Ordner "lazarus\lcl\" kopieren und die dbcustomnavigator.inc in den Ordner "lazarus\lcl\include".
Aber mach erst Kopie von den Originalen. Ich habe meine Änderungen im Quelltext immer mit meinem Namen kommentiert.
Ich habe noch Lazarus 2.2.0.163 Version, das ist 2.2.Fixes, von Herbst glaube ich. Die Dateien sind von dieser Version.
Vielleicht ist es besser, wenn du deine Dateien änderst, das ist nicht schwer, man muss nur an drei Stellen ändern. Die Zeilen, an der am Ende mein Name steht hinzufügen. Die anderen Zeilen sind nur zu Orientierung da.
Bei "lazarus\lcl\dbctrls.pp" folgende Änderung:
bei "lazarus\lcl\include\dbcustomnavigator.inc" folgende Änderung:
Aber mach erst Kopie von den Originalen. Ich habe meine Änderungen im Quelltext immer mit meinem Namen kommentiert.
Ich habe noch Lazarus 2.2.0.163 Version, das ist 2.2.Fixes, von Herbst glaube ich. Die Dateien sind von dieser Version.
Vielleicht ist es besser, wenn du deine Dateien änderst, das ist nicht schwer, man muss nur an drei Stellen ändern. Die Zeilen, an der am Ende mein Name steht hinzufügen. Die anderen Zeilen sind nur zu Orientierung da.
Bei "lazarus\lcl\dbctrls.pp" folgende Änderung:
Code: Alles auswählen
type
{ TDBCustomNavigator }
TDBCustomNavigator = class(TCustomPanel)
private
// ...
public
ContinueAction: Boolean; //soner: hinzufügen
property BeforeAction: TDBNavClickEvent read FBeforeAction write FBeforeAction;
//....
Code: Alles auswählen
procedure TDBCustomNavigator.BtnClick(Index: TNavigateBtn);
begin
if (DataSource<>nil) and (DataSource.State<>dsInactive) then begin
ContinueAction:=true; //soner hinzufügen
if not (csDesigning in ComponentState) and Assigned(BeforeAction) then
BeforeAction(Self,Index);
if ContinueAction then //soner hinzufügen
with DataSource.DataSet do begin
case Index of
nbPrior: Prior;
//...
end;
- Dateianhänge
-
lcldbctrlsaenderung.zip
- DBCtrls-Änderung
- (13.44 KiB) 34-mal heruntergeladen
-
- Beiträge: 608
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Umgang mit DBLookUpComboBox
Warte, du musst bei LCL nichts ändern, du kannst es auch so machen:
Der Befehl SQLQuery1.Append bricht Insert ab und startet "append".
Code: Alles auswählen
procedure TForm1.DBNavigator1BeforeAction(Sender: TObject; Button: TDBNavButtonType);
begin
If (Button = nbInsert) Then
begin
SQLQuery1.ApplyUpdates;
SQLTransaction1.CommitRetaining;
SQLQuery1.Append; //hinzufügen
end;
end;
-
- Beiträge: 318
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Umgang mit DBLookUpComboBox
Vielen Dank!
Damit funktioniert.
Allerdings ist das Verhalten der Comboboxen merkwürdig, dass man zweimal "+" drücken muß.
Jetzt erstmal Posaunenchor
Damit funktioniert.
Allerdings ist das Verhalten der Comboboxen merkwürdig, dass man zweimal "+" drücken muß.
Jetzt erstmal Posaunenchor