Announcement

Collapse
No announcement yet.

Neues Feld in einer existierenden Access-Datenbank anlegen

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

  • Neues Feld in einer existierenden Access-Datenbank anlegen

    Hallo,

    um in einer existierenden Access-Datenbank ein neues Text-Feld anzulegen (mit der Eigenschaft 'Allow zero length'=True), habe ich mir folgene kleine Routine geschrieben,
    an die der Connection-String, der Name der Tabelle, der Name des neuen Feldes und die Feldlänge übergeben wird. Grundlage waren einige Beispiele im Forum, die sich aber alle auf die Neuanlage einer Tabelle (und nicht der Ergänzung einer vorhandenen) beziehen.

    Das Problem ist nun, dass nach Aufruf der Routine kein neues Feld in der Datenbank vorhanden ist. Was Mache ich falsch?

    uses
    ADOX_TLB, ADODB_TLB;

    function CreateMDBCharField( const constr, sTable, sField: string; const len: integer ): boolean;
    var
    aConnection: _Connection;
    aCatalog: _Catalog;
    aTable: _Table;
    aColumn: _Column;
    begin
    try
    aConnection := CoConnection.Create;
    aConnection.Open( constr, '', '' , adConnectunspecified );
    aCatalog := CoCatalog.Create;
    aCatalog.Set_ActiveConnection( aConnection );
    aTable := CoTable.Create;
    aTable.ParentCatalog := aCatalog;
    aTable.Name := sTable;
    aColumn := CoColumn.Create;
    with aColumn do
    begin
    ParentCatalog := aCatalog;
    Name := sField;
    Type_ := adVarWChar;
    DefinedSize := len;
    Properties['Jet OLEDB:Allow Zero Length' ].Value := true;
    end;
    aTable.Columns.Append( aColumn, 0, 0 );
    aTable.Columns.Refresh;
    aConnection.Close;
    Result := true;
    except
    Result := false;
    end;
    end;

  • #2
    Hier nochmal der Quelcode mit Umbrüchen

    <PRE>

    uses ADOX_TLB, ADODB_TLB;

    function CreateMDBCharField( const constr, sTable, sField: string; const len: integer ): boolean;
    var
    aConnection: _Connection;
    aCatalog: _Catalog;
    aTable: _Table;
    aColumn: _Column;
    begin
    try
    aConnection := CoConnection.Create;
    aConnection.Open( constr, '', '' , adConnectunspecified );
    aCatalog := CoCatalog.Create;
    aCatalog.Set_ActiveConnection( aConnection );
    aTable := CoTable.Create;
    aTable.ParentCatalog := aCatalog;
    aTable.Name := sTable;
    aColumn := CoColumn.Create;
    with aColumn do
    begin
    ParentCatalog := aCatalog;
    Name := sField;
    Type_ := adVarWChar;
    DefinedSize := len;
    Properties['Jet OLEDB:Allow Zero Length' ].Value := true;
    end;
    aTable.Columns.Append( aColumn, 0, 0 );
    aTable.Columns.Refresh;
    aConnection.Close;
    Result := true;
    except
    Result := false;
    end;
    end;
    </PRE&gt

    Comment

    Working...
    X