Umgang mit DBLookUpComboBox

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
ErnstVolker
Beiträge: 326
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

Beitrag von ErnstVolker »

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
Dateianhänge
Archiv.zip
(110.79 KiB) 44-mal heruntergeladen

Soner
Beiträge: 623
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

Beitrag von Soner »

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.

Soner
Beiträge: 623
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

Beitrag von Soner »

+ 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:

Code: Alles auswählen

// Lazarus\lcl\include\dbcustomnavigator.inc
procedure TDBCustomNavigator.BtnClick(Index: TNavigateBtn);
begin
 //...
      //das ändern ->  nbInsert: Insert;
      nbInsert:  Append; // <-- zu das
 //...
end;
Oder nimm einfach den DBNavigator, den ich in diesem Forum gepostet habe und änder dein Funktion zu das:

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;

ErnstVolker
Beiträge: 326
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

Beitrag von ErnstVolker »

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

Soner
Beiträge: 623
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

Beitrag von Soner »

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:

Code: Alles auswählen

type

  { TDBCustomNavigator }

  TDBCustomNavigator = class(TCustomPanel)
  private
  // ... 
 public
    ContinueAction: Boolean; //soner: hinzufügen
    property BeforeAction: TDBNavClickEvent read FBeforeAction write FBeforeAction;
  //....
bei "lazarus\lcl\include\dbcustomnavigator.inc" folgende Änderung:

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) 44-mal heruntergeladen

Soner
Beiträge: 623
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

Beitrag von Soner »

Warte, du musst bei LCL nichts ändern, du kannst es auch so machen:

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; 
Der Befehl SQLQuery1.Append bricht Insert ab und startet "append".

ErnstVolker
Beiträge: 326
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

Beitrag von ErnstVolker »

Vielen Dank!
Damit funktioniert.

Allerdings ist das Verhalten der Comboboxen merkwürdig, dass man zweimal "+" drücken muß.

Jetzt erstmal Posaunenchor

Antworten