dbgrid tastatureingaben abfangen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

dbgrid tastatureingaben abfangen

Beitrag von slai »

Guten Tag

Habe mich nun schon seit Tagen damit abgemüht eine usereingabe in einem TDBGrid im OnKeyUp abzufangen und den Aktuellen String des ausgewählten fields auszulesen um dann eine Suche zu starten, ich bekomme jedoch den aktuellen wert nicht geliefert, es fehlt mir immer ein Zeichen des aktuell angezeigten strings auf dem bildschirm.

Hier mein code:

Code: Alles auswählen

procedure TFrmFibu.DBGFIBUKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
   tempquery : TZQuery ;
begin
   LBSuchresultate.Items.Clear;
   tempquery := TZQuery.create(nil);
   tempquery.connection := dbdatamod.zcdb;
   tempquery.sql.clear;
   if DBGFIBU.SelectedField.FieldName = 'IKONTONRSOLLID' then begin
     tempquery.sql.add('Select * from BU_FIBU_KONTODATEN where SKONTONR LIKE ''%'+DBGFIBU.SelectedField.Text+'%''');
     tempquery.open;
     tempquery.First;
     while not tempquery.EOF do begin
           LBSuchresultate.Items.Add(tempquery.FieldByName('SKONTONR').AsString+', '+tempquery.FieldByName('SKONTOBEZEICHNUNG').AsString);
           tempquery.Next;
     end;
     tempquery.close;
   end;
   tempquery.free;
end;
Was mache ich da falsch?
DBGFIBU.SelectedField.Text gibt mir nicht den aktuellen wert zurück sowie, displaytext, oder wenn ich das ganze über die Table die dahinter steckt auslese. Weis jemand eine lösung?

Danke
gruss

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Beitrag von slai »

Konnte das problem folgendermassen umgehen:

Code: Alles auswählen

procedure TFrmFibu.DBGFIBUKeyPress(Sender: TObject; var Key: char);
var
   tempquery : TZQuery ;
   sAnfuegeString : string;
begin
   LBSuchresultate.Items.Clear;
   tempquery := TZQuery.create(nil);
   tempquery.connection := dbdatamod.zcdb;
   tempquery.sql.clear;
   if DBGFIBU.SelectedField.FieldName = 'IKONTONRSOLLID' then begin
     if key = '' then begin
        sAnfuegeString := '';
     end else begin
         sAnfuegeString := Key;
     end;
     tempquery.sql.add('Select * from BU_FIBU_KONTODATEN where SKONTONR LIKE ''%'+DBGFIBU.SelectedField.Text+sAnfuegeString+'%''');
     tempquery.open;
     tempquery.First;
     while not tempquery.EOF do begin
           LBSuchresultate.Items.Add(tempquery.FieldByName('SKONTONR').AsString+', '+tempquery.FieldByName('SKONTOBEZEICHNUNG').AsString);
           tempquery.Next;
     end;
     tempquery.close;
   end;
   tempquery.free;
end;
ist villeicht ein wenig unschön, aber es funktioniert :-)
Anstatt onkeyup habe ich nun onkeypress genommen, anschliessend setzte ich denn fehlenden key einfach noch an meinem suchstring hinzu.

gruss

Antworten