Announcement

Collapse
No announcement yet.

SQl-Script: im ARC o.k., mit Delphi aber Fehlermeldung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQl-Script: im ARC o.k., mit Delphi aber Fehlermeldung

    Hallo,

    im Rahmen eines Updates müssen in einigen Tabellen neue Spalten eingetragen und von bestehenden Spalten der Typ geändert werden. Das Update soll mit einem kleinen Delphi-Programm gelöst werden, welches ein SQL-Script ausführen soll. Es wird ADS Version 8.1 und Delphi 2005 verwendet.

    Beispiel:

    Eine Tabelle enthält u.a. folgende Spalten:
    PLZ - Integer
    Erstellt - CICharacter
    Geändert - CICharacter

    Die Tabelle soll nun so aussehen:

    PLZ - Char (Datentyp ändern, Inhalt aus "PLZ")
    CreateDate - Date (Spalte umbenennen, Datentyp ändern, Inhalt aus "Erfasst")
    ChangeDate - Date (Spalte umbenennen, Datentyp ändern, Inhalt aus "Geändert")
    ChangeCode - Char (neue Spalte)
    KZDelete - Logical (neue Spalte)

    Das SQL-Script sieht so aus (Kommentare nur zur Erklärung eingefügt):
    Code:
    -- Änderung Datentyp PLZ 
    ALTER TABLE Kunde ADD COLUMN PLZ2 Char(10);
    UPDATE Kunde SET PLZ2 = SUBSTRING(CONVERT(100000+PLZ, SQL_CHAR),2,5) WHERE PLZ IS NOT NULL;
    ALTER TABLE Kunde DROP PLZ;
    ALTER TABLE Kunde ADD COLUMN PLZ Char(10) position 9;
    UPDATE Kunde SET PLZ = PLZ2;
    ALTER TABLE Kunde DROP PLZ2;
    -- Datenfeld "Erfasst" umbennen
    ALTER TABLE Kunde ADD COLUMN CreateDate Date;
    UPDATE Kunde SET CreateDate = CONVERT (Erfasst, SQL_DATE) WHERE Erfasst IS NOT NULL;
    ALTER TABLE Kunde DROP Erfasst;
    -- Datenfeld "Geändert" umbennen
    ALTER TABLE Kunde ADD COLUMN ChangeDate Date;
    UPDATE Kunde SET ChangeDate = CONVERT (Geaend, SQL_DATE) WHERE Geaend IS NOT NULL;
    ALTER TABLE Kunde DROP Geaend;
    -- neues Datenfeld "ChangeCode" anlegen und Text eintragen
    ALTER TABLE Kunde ADD COLUMN ChangeCode Char (100);
    UPDATE Kunde SET ChangeCode = CONVERT ('DBUpdate', SQL_CHAR);
    -- neues Datenfeld "KZDelete" anlegen und mit 'FALSE' vorbelegen
    ALTER TABLE Kunde ADD COLUMN KZDelete Logical;
    UPDATE Kunde SET KZDelete = CONVERT (FALSE, SQL_BIT);
    Während das SQl-Script im Data Architect fehlerfrei funktioniert, kommt es im Delphi-Programm zu folgender Fehlermeldung:
    "Error 7200: AQE Error: State = 07006; Native Error = 2109 ... Location of error ... is: 382 (line: 8 column: 1)"

    Der Fehler müßte also in der Zeile liegen:
    Code:
    UPDATE Kunde SET CreateDate = CONVERT (Erfasst, SQL_DATE) WHERE Erfasst IS NOT NULL;
    Was könnte die Ursache für den Fehler sein bzw. wie sollte das SQL-Script aussehen ?

    Mike

  • #2
    Jetzt funktioniert es.

    Die betreffenden SQL-Zeilen müssen wie folgt geändert werden:
    Code:
    UPDATE Kunde SET CreateDate = CONVERT ((SubString(Erfasst,7,4) + '-' + SubString(Erfasst,4,2) + '-' + SubString(Erfasst,1,2)), SQL_DATE) WHERE Erfasst IS NOT NULL;
    Es gibt offensichtlich Unterschiede im Datumsformat.

    Mike

    Comment


    • #3
      das ist ein conversion error...in dem Feld erfasst (oder doch erstellt?) stehen ungültige Daten, also zB ein string, der sich nicht in ein Datum umwandeln läßt.

      Comment


      • #4
        Das Datenfeld 'Erfasst' enthält nur Einträge im Format 'dd.mm.jjjj' oder ist leer. Andere Einträge sind nicht vorhanden. Deshalb gibt es ja in der Fehlerzeile auch den Zusatz 'WHERE Erfasst IS NOT NULL'. Das SQL-Skript funktioniert ja mit dem DataArchitect auch fehlerfrei. Erst durch das Wandeln der Datumseinträge in ein Standardformat (jjjj-mm-dd) läuft das SQL-Skript auch im Delphi-Programm ohne Fehler.

        Comment


        • #5
          einfach mal eine TAdsSettings-Komponente mit verwenden (dort Dateformat einstellen) oder einen call nach AdsSetDateFormat vornehmen. Das fixt das Problem auch ohne die aufwändige umformatierung.

          Comment


          • #6
            Danke für den Tip. Für die nächsten Updates werde ich das so übernehmen.

            Comment

            Working...
            X