Announcement

Collapse
No announcement yet.

ADO und Oracle: Problem mit INTEGER-Feldern

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

  • ADO und Oracle: Problem mit INTEGER-Feldern

    Hallo,

    ich bin gerade dabei, eine Datenbank-Anwendung, die bisher mit der BDE arbeitete, auf ADO umzustellen. Die Anwendung kann bisher mit verschiedenen Datenbank-Systemen arbeiten (u.a. ACCESS, Oracle, in Zukunft auch MSDE), je nach Geschmack des Kunden.

    Das Problem liegt nun darin, dass es im Oracle-SQL keine INTEGER-Datentypen (z.B. für ID-Felder) gibt (stattdessen benutze ich im SQL-Script z.B. NUMERIC(10)). Beim BDE-Oracle-Treiber gab es einen praktischen Schalter ENABLE INTEGERS, wenn man diesen auf TRUE setzte, wurden NUMERIC-Felder ohne Nachkommastellen als INTEGER-Felder interpretiert. Beim Oracle ADO-Treiber von Microsoft habe ich so etwas noch nicht gefunden, was zur Folge hat, dass beim Öffnen der Oracle-Datenbank die Fehlermeldung

    Unterschiedliche Typen für Feld 'ID': erwartet: Integer, gefunden BCD

    erhalte. Der Zugriff auf ACCESS oder MSDE klappt dagegen ohne Probleme. Kennt jemand eine Lösung für dieses Problem oder gibt es u.U. einen anderen ADO-Treiber für ORACLE, der eine entsprechende Einstellung wie in der BDE ermöglicht?

    Danke für alle Tips

  • #2
    Hallo Jürgen,
    bisher ist mir bei ähnlichen Problem nur folgende Veränderung in der ADODB.PAS eingefallen:

    procedure TCustomADODataSet.CheckFieldCompatibility(Field: TField;
    FieldDef: TFieldDef);
    var
    Compatible: Boolean;
    begin
    case Field.DataType of
    ftVariant: { TVariantField should work for any field type }
    Compatible := True;
    ftFloat, ftCurrency, ftBCD, <B>ftInteger</B>: { Numeric and Doubles are interchangeable }
    Compatible := FieldDef.DataType in [ftFloat, ftCurrency, ftBCD, <B>ftInteger</B>];
    ftString, ftWideString: { As are string and widestring }
    Compatible := FieldDef.DataType in [ftString, ftWideString];
    else
    Compatible := False;
    end;
    if not Compatible then inherited;
    end;

    Aus Greifswald
    Jens Knöche

    Comment


    • #3
      Hallo Jens,

      tausend Dank aus Bonn. Mit Deinem Tip bin ich einen entscheidenden Schritt weitergekommen, mit der Ergänzung in der ADODB.PAS klappt es nun tatsächlich. Und ich hab schon gedacht, dass ich der einzige mit einem solchen Problem wäre.

      Nochmals Dank

      Comment

      Working...
      X