![]() |
Re: Datenbank gleich halten bei sich und Endanwendern
würde mich auch interessieren hab sie auch nicht auf den 1. Blick gefunden :oops: :wiejetzt:
|
Re: Datenbank gleich halten bei sich und Endanwendern
Es ist zwar schon eine Weile her, aber schaden kanns ja nicht...
Der ![]() 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 ;) ] |
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. |
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 ;-) )
|
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... |
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) ![]() (2) ![]() Ansonsten hatten wir das schon: ![]() |
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: |
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. |
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