Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank gleich halten bei sich und Endanwendern (https://www.delphipraxis.net/42509-datenbank-gleich-halten-bei-sich-und-endanwendern.html)

etom291272 20. Mär 2005 21:27

Re: Datenbank gleich halten bei sich und Endanwendern
 
würde mich auch interessieren hab sie auch nicht auf den 1. Blick gefunden :oops: :wiejetzt:

jensw_2000 9. Dez 2005 06:28

Re: Datenbank gleich halten bei sich und Endanwendern
 
Es ist zwar schon eine Weile her, aber schaden kanns ja nicht...

Der EMS MSSQL Manager (Lite und Pro) hat dafür was Passendes.

Eigenschaften der "Datenbank-Registrierung" >> letzter TAB (Logs) >> Enable Log of Metadata Changes

Wenn die Checkbox gesetzt ist, loggt der SQL-Manager alle Änderungen der DB-Struktur (insofern diese nicht von externen Programmen vorgenommen werden).

Man muss jetzt nur noch aufpassen, das man eventuelle Änderungen von "Standard-Daten" mit in der Script schreibt.


Schöne Grüße,
Jens
:hi:

[ Nein, ich bekomme keine Provision von EMS, aber ich liebe das Tool ;) ]

Union 9. Dez 2005 07:35

Re: Datenbank gleich halten bei sich und Endanwendern
 
Hallo eTom,

ich habe so ein Tool, das alcaeus erwähnt hat, seit 16 Jahren im Einsatz (natürlich nicht von Anfang an in Delphi ;) ).

Dabei ist in einer Textdatei eine Art tabellarische Mini-DML bzw. Data Dictionary enthalten. Das Tool vergleicht die Definitionen mit den tatsächlich vorhanden Tabellen und Indizes und passt / legt diese automatisch an, dabei werden auch Backups der Original-Tabellen gemacht.

Einziger Nachteil: Das Teil ist voll auf ADS zugeschnitten. Läßt sich aber bestimmt auf andere DB anpassen. Allerdings gibt es natürlich immer Probleme mit solchen Tools / Script, sobald Du RI einsetzt. Diese in der richtigen Reihenfolge zu droppen hat mich auch manuell oft in den Wahnsinn getrieben.

Thanatos81 9. Dez 2005 07:57

Re: Datenbank gleich halten bei sich und Endanwendern
 
Ich kann jensw nur beipflichten. Ich persönlich benutze für private Projekte den EMS Interbase/Firebird Manager in der Lite-Version und speichere die durch Klicken vorgenommen Änderungen auch als .sql-Datei. Die wird beim Update mitausgeliefert und von meinem Programm nach einigen Checks ausgeführt. (Checks, damit man nicht einfach ne .sql mit z.B. "DELETE * from table" oder "drop..." machen kann ;-) )

RavenIV 9. Dez 2005 08:42

Re: Datenbank gleich halten bei sich und Endanwendern
 
wir haben das Problem auf folgende Weise gelöst:

- Definitions-Datei, in der die Tabellen/Felder definiert sind
-> Tabelle Kunden
-> KundenNr, Float, 0, J
-> Name1, String, 40, J
-> Name2, String, 40, N
-> Strasse, String, 40, N
-> usw.
-> KundenNr, P // Primärindex
-> Name1;KundenNr, S // Sekundärindex

- dann eine unit, die den DB-Aufbau mit der Definitions-Datei vergleicht und evtl anpasst.
- wenn die Veränderung nicht 100% klar ist (z.B. Integer -> Byte oder VarChar(50) -> VarChar(20)), dann schreibt das Tool einen Eintrag ins Logfile und es muss "Handarbeit" erfolgen.
- man kann aber die Änderungen so gestalten, dass es keine Unklarheiten gibt

wenn du willst, schicke ich Dir eine Bsp-DefDatei und diese Unit.
Veröffentlichen kann ich das leider nicht...

alzaimar 9. Dez 2005 09:10

Re: Datenbank gleich halten bei sich und Endanwendern
 
Auch mal Senf dazugeben:
Weil wir das gleiche Problem hatten, haben wir nach einer Lösung gesucht und sind fündig geworden:
(1) DBSynchroComp, das teuer aber wirklich gut ist und
(2) RedGate SQL-Compare, das zwar Geld kostet, aber irgendwie hübscher ist.
Alle anderen Tools haben unsere Testaufgabe nicht lösen können.

(1) ist brutal aber weitestgehend automatisch.
(2) ist viel eleganter und weigert sich, unlogische Operationen auszuführen, sodass man manchmal Hand anlegen muss: Beispiel:
Ich habe zwei identische DBs A und B. In einer Tabelle T füge ich in A eine Spalte 'MyColumn NOT Null' ein, aber ohne einen Default-Wert. (1) verwurstet das irgendwie, aber (2) zeigt gleich einen Fehler an: "Kann das nicht machen, weil kein Defaultwert angegeben ist".

Das Red Gate SQL-Bundle liefert auch noch ein 'Data Compare' aus, das den *Inhalt* von Tabellen synchronisiert, was wirklich praktisch ist. Natürlich kann man die zu synchronisierenden Tabellen und -Spalten vorher wählen.

Checkt das mal
(1) www.e-dule.com
(2) http://www.red-gate.com

Ansonsten hatten wir das schon:
http://www.delphipraxis.net/internal...0fef75cb599336

etom291272 9. Dez 2005 09:54

Re: Datenbank gleich halten bei sich und Endanwendern
 
:dp: schön was von einem "alten" thread zu hören

ich hab kurz nach meinem damaligen post folgendes programm geschrieben dass mein problem für mich ausreichend gelöst hat.

Es wird auf 2 unterschiedliche Instanzen (egal ob auf selben oder unterschiedlichen Computern) auf 2 Sql server Datenbanken zugegriffen. Anschliessend werden alle Unterschiede der Tabellen und Views in einem Stringgrid angezeigt. [es würden dann nur noch die notwendigen sql statements in die Zieldatenbank fehlen dann ginge das anpassen auch automatisch aber es wäre damals gewesen wie mit kanonen auf spatzen zu schiessen da erst wenig Dbs bei kunden im Einsatz sind. ] Dieser Stringgrid ist dann die Grundlage für die Anpassung entweder Manuell oder per script.

happy :coder:

mschaefer 9. Dez 2005 10:20

Re: Datenbank gleich halten bei sich und Endanwendern
 
Moin etom291272

meinst Du das Dein Programm weiterzuentwickeln ist?

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 Uhr.
Seite 2 von 2     12   

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