Announcement

Collapse
No announcement yet.

Erzeugung einer Tabelle in DLL mit BDE Initialisierung

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

  • Erzeugung einer Tabelle in DLL mit BDE Initialisierung

    hallo miteinander,
    ich habe eine Frage zu BDE und DLL. Und zwar möchte ich einem anderen Programm die Möglichkeit geben eine Tabelle in einer Access Datenbank anzulegen. Wie ich vermute muß die BDE dazu initialisiert werden und ein Alias angelegt werden. Können diese Aufgaben in der DLL implementiert werden oder gibt es irgendwelche Restriktionen.

    Viele Dank im voraus
    Frank

  • #2
    Hallo,

    für diese Aufgabe ist die BDE am schlechtesten geeignet. Zum einen hat die BDE keinen nativen ACCESS-Treiber, sondern nur einen SQL-Link (<i>IDDA3532.DLL</i> oder <i>IDDAO32.DLL</i>) auf die Microsoft DAO-Engine (die aber heute nicht mehr von Microsoft unterstützt wird). Daher wird die BDE nur auf "alten" Rechnern erfolgreich auf ACCESS-Datenbanken zugreifen können, auf denen keine aktuelle Microsoft-Software (Office XP etc.) installiert ist.

    Anstelle der BDE ist ADO - genauer gesagt <b>ADOX</b> (ADO Extension for Data Definition Language and Security) - die 1. Wahl. Das könnte mit Delphi so aussehen. Zuerst wird einmalig über <i>Projekt | Typbibliothek importieren</i> die ADOX-Bibliothek in die ADOX_TLB.pas übersetzt und in das eigene Projekt eingebunden:
    <pre>
    uses ADOX_TLB;

    resourcestring
    cCONNECTSTRING = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';

    procedure TFormMain.Button1Click(Sender: TObject);
    var
    aCatalog : _Catalog;
    aTable : _Table;
    aColumn : _Column;
    aIndex : _Index;
    sDBPath : String;
    sDS : String;
    vColName : OleVariant;
    begin
    MemoLog.Lines.Clear;
    sDBPath := EditMDB.Text;
    if FileExists(sDBPath) then
    begin
    DeleteFile(sDBPath);
    MemoLog.Lines.Add(Format('Datenbankdatei %s gelöscht',[sDBPath]));
    end;
    aCatalog := CoCatalog.Create;
    MemoLog.Lines.Add('Catalog...');
    sDS := aCatalog.Create(Format('%s%s',[cCONNECTSTRING, sDBPath]));
    MemoLog.Lines.Add(sDS);
    aTable := CoTable.Create;
    MemoLog.Lines.Add('Table...');
    aTable.ParentCatalog := aCatalog;
    aTable.Name := 'Kunden';

    // Spalte 1
    aColumn := CoColumn.Create;
    with aColumn do
    begin
    ParentCatalog := aCatalog;
    Name := 'KdnName';
    Type_ := adVarWChar;
    DefinedSize := 20;
    Properties['Description'].Value := 'Name des Kunden';
    Properties['Nullable'].Value := False;
    end;
    aTable.Columns.Append(aColumn, 0, 0);
    MemoLog.Lines.Add('Spalte 1 hinzugefügt...');

    // Spalte 2
    aColumn := CoColumn.Create;
    with aColumn do
    begin
    ParentCatalog := aCatalog;
    Name := 'Vorname';
    Type_ := adVarWChar;
    DefinedSize := 15;
    Properties['Description'].Value := 'Vorname des Kunden';
    Properties['Nullable'].Value := False;
    end;
    aTable.Columns.Append(aColumn, 0, 0);
    MemoLog.Lines.Add('Spalte 2 hinzugefügt...');

    // Spalte 3
    aColumn := CoColumn.Create;
    with aColumn do
    begin
    ParentCatalog := aCatalog;
    Name := 'eMail';
    Type_ := adVarWChar;
    DefinedSize := 20;
    Properties['Description'].Value := 'eMail-Adresse des Kunden';
    Properties['Default'].Value := '(unbekannt)';
    Properties['Jet OLEDB:Allow Zero Length'].Value := True;
    end;
    aTable.Columns.Append(aColumn, 0, 0);
    MemoLog.Lines.Add('Spalte 3 hinzugefügt...');

    // Spalte 4
    aColumn := CoColumn.Create;
    with aColumn do
    begin
    ParentCatalog := aCatalog;
    Name := 'Telefon';
    Type_ := adVarWChar;
    DefinedSize := 15;
    Properties['Description'].Value := 'Telefonnummer des Kunden';
    Properties['Nullable'].Value := True;
    end;
    aTable.Columns.Append(aColumn, 0, 0);
    MemoLog.Lines.Add('Spalte 2 hinzugefügt...');

    // Tabelle hinzufügen
    aCatalog.Tables.Append(aTable);
    MemoLog.Lines.Add('Tabelle hinzugefügt... ');

    // Primärschlüssel hinzufügen
    aIndex := CoIndex.Create;
    aIndex.Name := 'PKMix';
    vColName := 'KdnName';
    aColumn := aTable.Columns.Item[vColName] as _Column;
    aIndex.Columns.Append(aColumn.Name, aColumn.Type_, aColumn.DefinedSize);
    vColName := 'Vorname';
    aColumn := aTable.Columns.Item[vColName] as _Column;
    aIndex.Columns.Append(aColumn.Name, aColumn.Type_, aColumn.DefinedSize);
    aIndex.PrimaryKey := True;
    aIndex.Unique := True;
    aTable.Indexes.Append(aIndex, EmptyParam);
    MemoLog.Lines.Add('Index hinzugefügt... Fertig!');
    end;
    </pre&gt

    Comment


    • #3
      Besten Dank Herr Kosch, ich werde mich mal damit beschäftigen

      Comment

      Working...
      X