Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fragen zur MS SQL... (https://www.delphipraxis.net/88317-fragen-zur-ms-sql.html)

Tim Henford 13. Mär 2007 18:14

Datenbank: MS SQL • Zugriff über: ADO

Fragen zur MS SQL...
 
Hallo,

ich hab noch ein paar Fragen zum Thema MS SQL und ADO, was passiert, wenn ich gerade neue Daten an meinen DB-Server schick und die Verbindung zusammenbricht? Kommt da die Serve-DB durcheinander. Muss ich das mit meinen Programm auswerten und den Fehler behandeln?

Ist es möglich, wenn jemand Daten an die DB schickt, dass die anderen verbundenen Clients die auch online sind, das mitbekommen und ihr datenbestand aktualisiert wird?

Macht es Sinn Daten offline zu erstellte und die bearbeiteten Datensätze in einer eigenen lokalen zwischendatenbank (temporär) zu speichern und nur immer mal in die eigentliche Server-datenbank zu integrieren?

Wie jann man den Inhalt dieser lokalen DB mit der Server-DB einfach vergleichen bzw. abgleichen?


Ich weiß es sind wieder viele Fragen, aber vielleicht gibt es ja ein paar Teilideen...


LG Tim

marabu 13. Mär 2007 20:11

Re: Fragen zur MS SQL...
 
Hallo Tim,

eine SQL Server Datenbank kann durch verschiedene Mechanismen vor Datenverlust geschützt werden. Eine wesentliche Grundlage dafür ist das sogenannte Transaktionsprotokoll - eine Datei in der alle Änderungen des DBMS an einer Datenbank vermerkt werden. Bei korrekter Konfiguration verliert ein SQL Server bei einem Stromausfall nur die Änderungen, welche noch nicht im Logfile vermerkt wurden. Um diese Dinge kümmerst du dich in deiner Rolle als Datenbank-Administrator. Mit der Anwendungsentwicklung hat das eher weniger zu tun. Dort musst du nur auf eine verloren gegangene Verbindung mit dem DB-Server reagieren.

Benachrichtigungen von Clients über Änderungen an den Tabellen sind kein Standardleistungsmerkmal, aber du kannst solche Notifications bestimmt über Trigger realisieren, wenn du sie unbedingt haben möchtest.

Einen Abgleich zwischen MSSQL-Datenbanken kannst du über eine Replikation durchführen. Dabei liest ein Verleger das lokale Transaktionsprotokoll und übermittelt die Änderungen an registrierte Abonnenten. Näheres dazu findest du in den MS SQL Server Books Online.

Grüße vom marabu

Tim Henford 13. Mär 2007 23:54

Re: Fragen zur MS SQL...
 
Super. Danke für die schnelle ausführliche Hilfe zu diesen Thema.

Nun steh ich vor dem Problem der Realisierung...


Ich nehme an, dass das Transaktionsprotokoll sowie das Abonnenten für die Replikation, mit Hilfe des SQL Server Enterprise Manager verändert werden können, was sollte man da einstellen bzw. worauf muss man dabei achten? Gibt es dazu Informationen in den MS SQL Server Books?

Wie kann ich auf verloren-gegangene Verbindung mit dem DB-Server reagieren? Die AdoConnection bietet ja kein direktes OnError Event, denn das onDisconnect bezieht sich ja wahrscheinlich nur auf ein gewolltes Verbindungsende.

Wie kann ich so ein TriggerEvent schreiben? Muss das nicht in oder von der Datenbank ausgelöst werden?

Ist der Abgleich zwischen MSSQL-Datenbanken über eine Replikation programmtechnisch möglich oder erfolgt das "per Hand"?

marabu 15. Mär 2007 16:33

Re: Fragen zur MS SQL...
 
Hallo Tim,

Informationen zum Einrichten einer Replikation findest du natürlich in den SQL Server Books Online. Wenn das Thema für dich neu ist, du aber Grundkenntnisse im Umgang mit SQL Server hast, dann ist es vielleicht am effektivsten, wenn du dich über die Dialoge des Enterprise Managers heran tastest und parallel dazu die einzelnen Einstellungen und Aktionen in der Online Hilfe nachschlägst.

Verbindungsfehler kannst du durch lokale oder globale Ausnahmebehandlung abfangen. Du hast leider deine Delphi-Version nicht angegeben. Vielleicht findest du bei dir die Komponente TApplicationEvents? OnException() wäre dort ein Ansatzpunkt.

Trigger kannst du direkt im Enterprise Manager definieren. Sie werden in der Tat vom RDBMS beim vorbestimmten Ereignis ausgeführt - ohne dein Zutun.

Der Abgleich zwischen MSSQL-Datenbanken über eine Replikation findet weder Interaktiv noch anwendungsgesteuert statt, du definierst die Abläufe und Inhalte im Enterprise Manager.

Freundliche Grüße

Tim Henford 15. Mär 2007 21:23

Re: Fragen zur MS SQL...
 
Also ich habe Delphi 7 Enterprise - TApplicationEvents OnException() war ein guter Tipp! ich nehme an das wäre global und try except wäre lokal alles an Fehler, die auftreten können?


...alles klar, hab mich auch ein wenig nun mal in den Server Books umgeschaut, aber manche Sachen sind mir da noch unklar..

habe folgendes
SQL-Code:
CREATE TRIGGER reminder ON tabelle
FOR INSERT, UPDATE, DELETE
AS RAISERROR (50009, 16, 10)
Aber so ganz funktioniert es ja dann nicht so, wie ich das wollte, dass ein Benutzer bemerkt, dass die Datenbank gerade jemand anderes bearbeitet-ledigleich eine Meldung, wenn ich ein neuen Datensatz einfüge kommt dann zu Tage.

Wenn eine Änderung von einem anderen User stattgefunden hat, sollte ja der Benutzer hier, das gleich mitgeteilt bekommen. Aber wenn ich einen Timer nehme und die AdoQuery mit einem DBGrid verbunden ist und dann immer sage
Delphi-Quellcode:
  ADOQuery1.Close;
  ADOQuery1.Open;
ist das ja wahrscheinlich sehr schlecht gelöst.


Nächstes Problem wäre, wie läuft das, wenn 2 User die komplette DB auf ihrem Rechner offline verfügbar haben, um daran Änderungen vorzunehmen und beide ihre aktualisierte Variante, vielleicht auch an unterschiedlichen Tabellen oder Bereichen auf die Server-DB schicken wollen?
Wie gleicht man die DB mit geringsten Traffic Aufwand dann ab?

mkinzler 15. Mär 2007 21:32

Re: Fragen zur MS SQL...
 
In diesem Fall mußt du sorgen, daß neue Datensätze IDs in verschiedenen Bereichen bekommen oder du verwendest GUIDs. Bei Änderungen ist es schon kritischer, hier muß festgelegt werden, welcher Rechner Vorrang hat.

Tim Henford 15. Mär 2007 21:42

Re: Fragen zur MS SQL...
 
hm so ganz habe ich das nun nicht durchschaut, wozu die IDs oder GUIDs?

mkinzler 15. Mär 2007 21:47

Re: Fragen zur MS SQL...
 
Wenn auf 2 Client je ein neuer datensatz angelegt wird, würden diese die gleiche ID bekommen.

Tim Henford 15. Mär 2007 21:58

Re: Fragen zur MS SQL...
 
sorry wenn ich ständig frage, aber was wäre dann, wenn 2 die selbe ID haben?
Man sieht doch dann nur das der Eintrag doppelt ist, oder?
Ich dachte die ID wäre einmalig oder wie baut man die zusammen?

mkinzler 15. Mär 2007 22:00

Re: Fragen zur MS SQL...
 
Es kommt ja darauf an, wie du diese erzeugst. Verwendest du GUIDs sind diese eindeutig, bei autoinc o.ä. nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz