Announcement

Collapse
No announcement yet.

Hilfe ! Problem mit ADOX

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

  • Hilfe ! Problem mit ADOX

    Hallo, <br>
    ich habe ein D5-Programm, hinter dem eine Access-Datenbank liegt... nun ist es so, dass die Haupttabelle in dieser Datenbank eigentlich dynamisch geändert werden muss, wenn neue Spalten dazukommen... ich habe das so gelöst, dass ich den Anwendern eine kleine mdb zur Verfügung stelle, in der die entsprechenden Spalten in einer Mustertabelle zur Verfügung stehen... <br>
    Im ersten Schritt kopiere ich mit einer Tabellenerstellungsabfrage die Daten aus der Originaltabelle in eine tempöräre Tabelle. <br>
    Mit ADOX erstelle ich dann eine neue Tabelle, und genau hier liegt bei ca 10% der Anwender das Problem, dass nämlich die Tabelle nicht angelegt wird und damit mein gesamtes Programm nicht mehr funktioniert. Auf allen Rechnern ist mindestens MDAC 2.5 installiert. Dafür habe ich gesorgt. Es handelt sich um unterschiedliche Betriebssysteme: mal win2000 mal 98, mal XP... wie gesagt, bei 90% der Anwender (insgesamt ca 300) funktioniert es und bei 10% wird die Tabelle nicht angelegt. Allerdings kommt auch keine Fehlermeldung, warum die nicht angelegt wird. <p><br>
    Hat jemand eine zündende Idee für mich ??? <br>
    Anbei ein wenig Quellcode: <br>
    <p>aCatalog: _Catalog;<br>
    aTable: _Table;<br>
    aColumn: _ColumnDisp;<br>
    aIndex: _Index;<br>
    i, y: Integer;<br>
    vColName: OleVariant;<br>
    </p>
    <p>(...)</p>
    <p><br>
    aCatalog := CoCatalog.Create;<br>
    aCatalog.Set_ActiveConnection(ADO2.ConnectionObjec t);<br>
    <br>
    aTable := CoTable.Create;<br>
    aTable.ParentCatalog := aCatalog;<br>
    aTable.Name := 'Daten';<br>
    <br>
    vColName := 'Key';<br>
    aTable.Columns.Append(vColName, adVarWChar, 100);<br>
    aColumn := aTable.Columns.Item[vColName] as _ColumnDisp;<br>
    aColumn.Properties['Nullable'].Value := False;<br>
    <br>
    aIndex := CoIndex.Create;<br>
    with aIndex do begin<br>
    &nbsp; Name := 'Key';<br>
    &nbsp; Columns.Append(aColumn.Name, aColumn.Type_, aColumn.DefinedSize);<br>
    &nbsp; PrimaryKey := False;<br>
    &nbsp; Unique := True;<br>
    end;<br>
    aTable.Indexes.Append(aIndex, EmptyParam);&nbsp;<br>
    <br>
    vColName := 'MV';<br>
    aTable.Columns.Append(vColName, adVarWChar, 13);<br>
    aColumn := aTable.Columns.Item[vColName] as _ColumnDisp;<br>
    aColumn.Properties['Nullable'].Value := False;<br>
    <br>
    vColName := 'Jahr';<br>
    aTable.Columns.Append(vColName, adInteger, 8);<br>
    aColumn := aTable.Columns.Item[vColName] as _ColumnDisp;<br>
    aColumn.Properties['Nullable'].Value := False;<br>
    <br>
    aCatalog.Tables.Append(aTable);<br>
    <br>
    (...)</p>
    Bin für jede schnelle Hilfe dankbar.

  • #2
    hmm...

    Versuchs mal so! Bei meinen Kunden funktioniert es so die ganze Zeit.

    mfg Frank

    var<br>
    DataSource : string;<br>
    dbName,cs : string;<br>
    <br>
    begin<br>

    dbName:='C:\MDB\Datenbank.mdb';<br>

    DataSource :=<br>
    'Provider=Microsoft.Jet.OLEDB.4.0' +<br>
    ';Data Source=' + dbName +<br>
    ';Jet OLEDB:Engine Type=5';<br>

    Catalog1.Create1(DataSource);<br>

    ADOConnection1.ConnectionString := DataSource;<br>
    ADOConnection1.LoginPrompt := False;<br>
    ADOCommand1.Connection := ADOConnection1;<br>
    cs:='CREATE TABLE NEUTabelle (' +<br>
    'ID COUNTER,'+ // NOT NULL IDENTITY PRIMARY KEY,' +<br>
    'Datum DATE,'+<br>
    'Betrag CURRENCY,'+<br>
    'Vermerk Text(30),'+<br>
    'Wer SMALLINT,'+<br>
    'Summe CURRENCY)';<br>

    ADOCommand1.CommandText := cs;<br>
    ADOCommand1.Execute;<br>

    cs:='CREATE UNIQUE INDEX idxPrimary '+<br>
    'ON NEUTabelle (ID, Datum) WITH PRIMARY';<br>
    ADOCommand1.CommandText := cs;<br>
    ADOCommand1.Execute;<br>
    <br>
    end;<br&gt

    Comment

    Working...
    X