Einzelnen Beitrag anzeigen

mariusbenz

Registriert seit: 6. Mär 2015
38 Beiträge
 
Delphi 10.3 Rio
 
#1

TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

  Alt 20. Jul 2016, 10:53
Vorab schon mal der Code-Abschnitt um den es geht:

Code:
procedure TfrmMain.BtnDateiZuPosClick(Sender: TObject);
  var sTemp : String;
  begin
    if Sender = TObject(BtnOrdnerZuPos) then FODDateiPos.Options:= [fdoPickFolders]
    else if Sender = TObject(BtnDateiZuPos) then FODDateiPos.Options:= [];
    // In DB schreiben
    if FODDateiPos.Execute then
      begin
        sTemp:= FODDateiPos.FileName;
        SetSQLAndExecute(AdsQryMFA, 'UPDATE RLS_Detail ' +
                                    'SET Datei = ' + QuotedStr(sTemp) + ' ' +
                                    'WHERE ID = ' + AdsQuePosition.FieldByName('ID').AsString);
        Book := AdsQuePosition.GetBookmark;
      end;
    // Aktualisieren
    AdsQuePosition.Refresh;

    LblHyperlink.Caption:= AdsQuePosition.FieldByName('Datei').AsString;
  end;
Die Funktion SetSQLAndExecute führt einfach nur den SQL-Befehl aus.

Wenn ich die Prozedur mit den Options [fdoPickFolders] ausführe, bleibt der Cursor an der gleichen Position im DBGrid stehen.

Wenn ich die Prozedur mit den Options [] ausführe, springt der Cursor an die erste Position im DBGrid. Ich habe schon versucht, mir die Position mit dem Bookmark zu merken und dann am Ende wieder dort hinzuspringen. Das funktioniert auch, wenn ich erst danach durch einen Button-Click, oder so wie ich es jetzt ziemlich unschön umgangen habe, indem ich im AfterRefresh der Query einen Timer starte, an die entsprechende Position zurückspringe. Wenn ich z.B. im AfterRefresh direkt an die Position mit GoToBookmark springe, funktioniert das zwar auch, allerdings scheint sich das Grid danach noch zu aktualisieren, sodass ich wieder beim ersten Datensatz lande.

Zudem kann ich das Springen an die erste Position manchmal verhindern, wenn ich kurz im Debugmodus anhalte und da ein paar Sekunden warte.

Hat irgendjemand eine Ahnung, warum sich das Grid in dem einen Fall so komisch verhält, und im anderen Fall richtig?
  Mit Zitat antworten Zitat