Verwendung von ADO mit alten Datenbanken

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Allgemeines

Nach und nach wird in allen GEVITAS-Programmen der Datenbank-Treiber BDE abgeschafft und durch ADO ersetzt.

Bei älteren Datenbanken kann dabei ein Problem mit Textfeldern auftreten. Diese Felder werden von der Datenbank mit Leertasten auf die eingestellte Länge aufgefüllt.

  • Wenn Sie wissen wollen, ob dieses Problem Ihre Datenbank überhaupt betrifft, können Sie mit unserem Support einen Online-Termin ausmachen. Dieser kann (z.B. per TeamViewer) ermitteln, ob Ihre Datenbank betroffen ist oder nicht.


2 Technischer Hintergrund

In älteren Datenbanken wurden die Textfelder mit festen Längen definiert:

ADR.KURZNAME char(20)

Der SQL-Server füllt in diesem Fall die Felder rechts mit Leertasten (Blanks) auf!


In neueren Datenbanken wurden die Textfelder mit variablen Längen definiert:

ADR.KURZNAME varchar(20)

Die BDE entfernte die Leertasten ab Ende automatisch, ADO tut das nicht und reicht die Daten 1:1 weiter.

Das kann zu Problemen in der Formular-Gestaltung führen. Wenn Sie z.B. in einem Report zwei Felder miteinander verbinden, so sieht das ohne Leertaste (bzw. mit der BDE) so aus:

Artikelbezeichnung Typ!

Mit ADO sieht das so aus:

Artikelbezeichnung Typ  !


3 Prüfen, ob die Datenbank betroffen ist

Um zu prüfen, ob Ihre Datenbank überhaupt betroffen ist, melden Sie sich an GEVAS-Professional bzw. REFLEX als Admin an und starten dann über das Menü "Datenpflege" den GEVAS-/REFLEX-Checker.

Dort klicken Sie auf "SQL-Editor".

Auf der Anzeige der Tabellen klicken Sie mit der rechten Maustaste und wählen auf dem Menü "MS-SQL" den Untermenüpunkt "Update-Script für char-Felder" aus.

Der Checker prüft nun in allen Tabellen der Datenbank, ob es char-Felder gibt. Wenn ja, erzeugt er zwei SQL-Scripts:

  • Im Register "Script" befindet sich der Script, mit dem die Felder in varchar-Typen geändert werden.
  • Im Register "Update Tables Script" befindet sich der Script, mit dem die Leerstellen der Felder in entfernt werden.

Wenn diese Register leer sind (also kein Script erzeugt wurde), ist diese Datenbank nicht betroffen.

Wenn Scripts erzeugt wurden, kopieren Sie diese in die Zwischenablage und speichern Sie sie in Textdateien. Sie können sie später verwenden, wenn Sie das Programm-Update ausführen.


4 Felder konvertieren

Nachfolgend wird beschrieben, wie man die Felder konvertieren kann.

Wir empfehlen, dieses von einem unserer Fachleute durchführen zu lassen!


4.1 Wichtig

4.1.1 Backup der Datenbank erstellen

Vor allem anderen müssen Sie ein Backup der Datenbank erstellen und sicherstellen, dass dieses Backup auch wiederherstellungsfähig ist!

4.1.2 Allen Usern mitteilen

dass bis auf Widerruf kein User das Programm benutzen kann und darf!


4.1.3 Update des Programms durchführen

Führen Sie an einem Computer das Update des Programm aus. Wenn ein Datenbank-Update verlangt wird, führen Sie dieses aus.


4.2 Scripte ausführen

Erstellen und speichern Sie die Scripte wie oben beschrieben.

4.2.1 Script Alter table

Führen Sie zuerst den Script "alter table" aus. Dies dauert mehrer Minuten!

Fehler bei der Ausführung:

Vermutlich werden Sie Fehler bei der Ausführung des Scripts erhalten. Diese sind im Register "Fehlerbericht" aufgeführt. Kopieren Sie die Fehlermeldungen in die Zwischenablage und speichern Sie sie in einer Textdatei.

3. Fehler bei: alter table ADR alter column KURZNAME varchar(20) Index "ADR_KURZNAMEN" ist von Spalte "KURZNAME" abhängig

Warum Fehler?

Problem ist, dass der SQL-Server Felder nicht einfach so konvertieren kann, die an einem Index beteiligt sind. Diese muss man manuell (!) konvertieren.

4.2.2 Felder manuell konvertieren (MSSQL)

Die Felder, die nicht automatisch konvertiert werden konnten, muss man über das Microsoft SQL-ManagementStudio© manuell ändern.

Starten Sie also das ManagementStudio, melden Sie sich mit Admin-Rechten an.


Schalten Sie diese Option aus:

SQLServer Option AenderungenVerhindern.png


Suchen Sie im Baum links die Datenbank aus, öffnen Sie den Zweig "Tabellen" und die erste Tabelle, die im Fehlerbericht enthalten ist.

Öffnen Sie den Zweig "Spalten".

Beispiel:

SQLServer Baum Tabelle Felder.png

Klicken Sie mit der rechten Maustaste auf das erste Char-Feld und wählen "Ändern" aus.

Das Fenster öffnet sich, in dem Sie die char-Felder in varchar-Felder ändern können. Beispiel:

SQLServer Aendern char.png

Ändern Sie den Feldtyp in der unteren Tabelle, nicht oben!

Wenn an den Feldtyp in der Tabelle oben ändert, stellt das Programm automatisch die Länge des Feldes auf 50 Zeichen um! Das ist nicht gut!

Ändern Sie nun alle char-Felder der Tabelle entsprechend ab.

Speichern Sie dann die Änderungen mit diesem Button:

SQLServer Aendern char Speichern.png

Das ManagementStudio führt die Änderungen aus. Dazu erzeugt es einen umfangreichen Script, der die Tabelle umbenennt, eine temporäre Tabelle mit den neuen Feldern anlegt, die Daten kopiert, die alte Tabelle löscht und die temporäre Tabelle umbenennt.

Dieses Script kann man sich mit diesem Button erzeugen lassen:

SQLServer Aendern char Script erzeugen.png


Wozu braucht man den Script?
In den meisten Fällen werden die Änderungen wie oben beschrieben funktionieren.
Bei sehr umfangreichen Tabellen dauert die Ausführung des Scripts im Änderungsfenster (oben) sehr lange und nach einiger Zeit kann es zu einer Timeout-Fehlermeldung kommen.
In diesem Fall kann man den erzeugten Script in das "normale" Ausführungsfenster kopieren und hier ausführen

SQLServer Aendern char Script ausfuehren.png

Im Ausführungsfenster gilt der in den Optionen eingestellte Timeout-Parameter (0=Kein Timeout), im Änderungsfenster gilt der wohl nicht!


Auf diese Art und Weise müssen Sie alle Tabellen/Spalten ändern, die im Fehlerbericht stehen!


Danach können Sie das Update ausrollen und das Programm frei geben.