AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten
Thema durchsuchen
Ansicht
Themen-Optionen

TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

Ein Thema von mariusbenz · begonnen am 20. Jul 2016 · letzter Beitrag vom 21. Jul 2016
Antwort Antwort
mariusbenz

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

AW: TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

  Alt 21. Jul 2016, 07:16
Als dieses Verhalten das erste Mal aufgetreten ist, sah die Prozedur noch folgendermaßen aus:

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);
      end;
  end;
Die Bookmarks waren nur der Versuch, diesen Fehler zu kompensieren.

Und auch da war es schon so, dass nach dem FileOpenDialog mit PickFolders der Cursor am gleichen Datensatz stehen geblieben ist,er aber ohne PickFolders auf den ersten Datensatz zurückgesprungen ist, und zwar nachdem die Prozedur beendet war(zumindest scheint es so).
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

  Alt 21. Jul 2016, 07:22
Deswegen mein ich: ID merken => Update machen => Refresh => Locate auf gemerkte ID.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
mariusbenz

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

AW: TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

  Alt 21. Jul 2016, 07:56
Danke ConnorMcLeod, die Funktion Locate war die, die meinem Arbeitskollegen nicht mehr eingefallen war, weshalb ich den Umweg über die Bookmarks gemacht habe. Sieht deutlich schöner aus mit dem Locate.

Code:
procedure TfrmMain.BtnDateiZuPosClick(Sender: TObject);
  var sTemp : String;
      LetzteID : Integer;
  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);
        LetzteID:= AdsQuePosition.FieldByName('ID').AsInteger;
      end;
    // Aktualisieren
    AdsQuePosition.Refresh;
    Application.ProcessMessages;
    AdsQuePosition.Locate('ID', LetzteID, []);

    LblHyperlink.Caption:= AdsQuePosition.FieldByName('Datei').AsString;
  end;
Richtig funktioniert hat es allerdings erst, nachdem ich nach dem Refresh noch ein ProcessMessages mache. Dadurch kann ich mir auch den ******* Timer sparen.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

  Alt 21. Jul 2016, 08:10
Freut mich, wenns jetzt passt!
Was mir noch aufgefallen ist: das Update passiert nur, wenn FODDateiPos.Execute, aber das Refresh passiert immer. Wenn nicht FODDateiPos.Execute, dann ist LetzteID undefiniert.
Ich würde entweder alles in das if-begin-end hineintun oder die ID schon vor dem if merken (das wäre auch sicherer bezüglich dem Update - wer weiß, was in dem SetSQLAndExecute alles abgeht...).
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

  Alt 21. Jul 2016, 08:13
Und das Application.ProcessMessages kann man noch eliminieren, wenn man die Events BeforeRefresh und AfterRefresh geschickt bestückt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mariusbenz

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

AW: TFileOpenDialog fürht zu kuriosem DBGrid-Verhalten

  Alt 21. Jul 2016, 08:45
@ ConnorMcLeod: Hab es jetzt alles in die if-Abfrage gepackt. Hat zwar beim Abbrechen des OpenDialogs (noch) keine Fehler gemacht, aber sicher ist sicher.

Das SetSQLAndExecute ist eigentlich nicht sonderlich spektakulär
Code:
procedure SetSQLAndExecute(Que : TAdsQuery; SQL_Befehl : String);
  begin
    with Que do
      begin
        Close;
        SQL.Clear;
        SQL.Add(SQL_Befehl);
        ExecSQL;
      end;
  end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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