Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

AW: refresh der Datenaus einer Datenbank --- aber wo ?

  Alt 23. Feb 2017, 07:15
Moin...
Meine Lieblingsfehlermeldung mit ADO und MSSQL...

Der Fehler hat sowohl nichts mit dem DBNavigator oder dem Eintragen im Grid zu tun. Er triff einfach beim Post auf. Ob die Tabellen einen PK haben (hatten alle einen) ist unerheblich. Die einzige Variante zur Lösung ist die von nahpets.
Delphi-Quellcode:
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
  if Button = nbRefresh then begin
    // Irgendwie den aktuellen Datensatz merken
    // und dann
    Query.Close;
    Query.Open;
    // und dann wieder zu dem oben gemerkten Datensatz wechseln.
  end;
end;
...das hällt bis zum nächsten Mal mit einer anderen Query. Manchmal half nur das neu Erzeugen der Query. Ich hab nie raus bekommen warum das so ist. ADO hat seinen Beitrag dabei.

Tipps:

1. Der MSSQL Server reagiert immer wieder mal alergisch auf permant offene Querys. Ein modernes DBMS sollte nie mit DB sensitiven Controls (da gehört auch das DBGrid dazu) manipuliert werden, sondern nur mit klassischen Querys mit Transaktionssteuerung. Erst Recht bei MultiUser Umgebungen.
2. Die Querys nur so lange offen lassen wie sie gebraucht werden... Create und try finally Free
3. Wenn es das Projekt zuläßt, sollte ein Umbau auf eine Objektstruktur zur Datenmanipulation helfen. Quasi Intern mit Objekten arbeiten und nur die Datenmanipulation z.B. in einem Interface ablaufen lassen. Der einzige wer die Datenbank kennt ist das Interface.
Sorry: Ich bin Fan von dieser Struktur ohne DB sensitive Controls: GUI <-> Logik <-> DB ...ich konnte es mir leider nicht verkneifen.
https://de.wikipedia.org/wiki/Schichtenarchitektur (siehe Klassische Schichten innerhalb einer mehrschichtigen Architektur)


Geändert von haentschman (23. Feb 2017 um 14:06 Uhr)
  Mit Zitat antworten Zitat