Verwendung von ADO mit alten Datenbanken: Unterschied zwischen den Versionen
(→Felder konvertieren) |
(→Felder manuell konvertieren (MSSQL)) |
||
Zeile 112: | Zeile 112: | ||
[[Datei:SQLServer_Baum_Tabelle_Felder.png]] | [[Datei: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: | ||
+ | |||
+ | [[Datei: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: | ||
+ | |||
+ | [[Datei: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. |
Version vom 24. Februar 2017, 16:58 Uhr
Inhaltsverzeichnis
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.
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:
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:
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:
Ä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:
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.