AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fragen zur MS SQL...
Thema durchsuchen
Ansicht
Themen-Optionen

Fragen zur MS SQL...

Ein Thema von Tim Henford · begonnen am 13. Mär 2007 · letzter Beitrag vom 16. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#1

Fragen zur MS SQL...

  Alt 13. Mär 2007, 18:14
Datenbank: MS SQL • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Fragen zur MS SQL...

  Alt 13. Mär 2007, 20:11
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
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#3

Re: Fragen zur MS SQL...

  Alt 13. Mär 2007, 23:54
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"?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Fragen zur MS SQL...

  Alt 15. Mär 2007, 16:33
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
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#5

Re: Fragen zur MS SQL...

  Alt 15. Mär 2007, 21:23
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fragen zur MS SQL...

  Alt 15. Mär 2007, 21:32
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#7

Re: Fragen zur MS SQL...

  Alt 15. Mär 2007, 21:42
hm so ganz habe ich das nun nicht durchschaut, wozu die IDs oder GUIDs?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Fragen zur MS SQL...

  Alt 15. Mär 2007, 21:47
Wenn auf 2 Client je ein neuer datensatz angelegt wird, würden diese die gleiche ID bekommen.
Markus Kinzler
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#9

Re: Fragen zur MS SQL...

  Alt 15. Mär 2007, 21:58
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Fragen zur MS SQL...

  Alt 15. Mär 2007, 22:00
Es kommt ja darauf an, wie du diese erzeugst. Verwendest du GUIDs sind diese eindeutig, bei autoinc o.ä. nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz