1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Fehler beim Erstellen von Tabelle per VBA

Discussion in 'Office-Programme' started by qutx, Apr 24, 2009.

Thread Status:
Not open for further replies.
  1. qutx

    qutx Byte

    Hallo,
    ich bin am verzweifeln... Ich möchte mir per VBA eine Tabelle in Access erstellen, leider bekomme ich beim Anfügen von einigen Feldern immer den Laufzeitfehler '3259' - Invalid field data type...

    Nach einigen Versuchen habe ich herausgefunden, dass es nur bestimmte Datentypen betrifft

    Das ist mein Code:

    Code:
    Dim fld As DAO.Field, tbl As DAO.TableDef
    Set tbl = CurrentDb.CreateTableDef(outptTable)
      
    tbl.fields.Append tbl.CreateField("f01", dbBigInt)
    tbl.fields.Append tbl.CreateField("f02", dbBinary)
    tbl.fields.Append tbl.CreateField("f03", dbBoolean)
    tbl.fields.Append tbl.CreateField("f04", dbByte)
    'tbl.fields.Append tbl.CreateField("f05", dbChar)
    tbl.fields.Append tbl.CreateField("f06", dbCurrency)
    tbl.fields.Append tbl.CreateField("f07", dbDate)
    'tbl.fields.Append tbl.CreateField("f08", dbDecimal)
    tbl.fields.Append tbl.CreateField("f09", dbDouble)
    'tbl.fields.Append tbl.CreateField("f10", dbFloat)
    tbl.fields.Append tbl.CreateField("f11", dbGUID)
    tbl.fields.Append tbl.CreateField("f12", dbInteger)
    tbl.fields.Append tbl.CreateField("f13", dbLong)
    tbl.fields.Append tbl.CreateField("f14", dbLongBinary)
    tbl.fields.Append tbl.CreateField("f15", dbMemo)
    'tbl.fields.Append tbl.CreateField("f16", dbNumeric)
    tbl.fields.Append tbl.CreateField("f17", dbSingle)
    tbl.fields.Append tbl.CreateField("f18", dbText)
    'tbl.fields.Append tbl.CreateField("f19", dbTime)
    'tbl.fields.Append tbl.CreateField("f20", dbTimeStamp)
    tbl.fields.Append tbl.CreateField("f21", dbVarBinary)
    
    Bei den auskommentierten kommt der Fehler.

    Ich vermute, dass die betroffenen Datentypen nicht 1 zu 1 in Access abgebildet werden können :mad: obwohl sie für das Field Objekt eigentlich erlaubt wären.

    Meine Frage: gibt es eine eingebaute Übersetzungsfunktion für diese Datentypen oder hat jemand eine andere Idee?

    Vielen Dank im Vorraus!
     
  2. Hascheff

    Hascheff Moderator

    Hallo qutx,
    wirklich helfen kann ich nicht. Ich geh davon aus, dass du dich in der Hilfe vergewissert hast, dass in deiner Access-Version (welche?) die Konstanten existieren. In meiner (Office2000) gibt es nicht alle, aber z.B. auch dbDecimal.
    An anderer Stelle wird auch in der Hilfe genannt, welche Zahlenwerte hinter den Konstanten stehen, hier nicht. Aber das würde dich auch nicht weiterbringen.
    Mir ist in der Hilfe auch aufgefallen, dass das Syntaxbeispiel etwas anders aussieht:
    Bei den auskommentierten Typen ist auch keine Gemeinsamkeit zu entdecken.

    Tut mir leid.
    Gruß Hascheff
     
  3. qutx

    qutx Byte

    Hallo Haschef,
    danke erstmal für Deine Hilfe. Die verwendete Access Version ist 2003 (sorry, hatte vergessen die anzugeben, die Datentypen werden so in der Hilfe zur Type Eigenschaft so aufgeführt). Nach einigen Versuchen bin ich nun der Meinung, dass es wohl tatsächlich an DAO / Access Inkompatibilitäten liegt.

    Seltsam ist auch (ist wohl ein Bug!), dass der von dir angesprochene dbDecimal eigentlich schon in Access existiert (man kann ihn einem Feld beim manuellen erstellen zuweisen und ihn über VBA als dbDecimal wieder einlesen) sich jedoch nicht per Skript setzen lässt.

    Ich werde am Montag versuchen, mein Skript auf das neuere ADODB Objekt umzustellen und schauen, ob der Fehler auch dort auftritt.

    Als Zwischenlösung habe ich die betroffenen Typen abgefangen und durch dbDouble, dbText und dbDate ersetzt.

    Gruss, qutx
     
Thread Status:
Not open for further replies.

Share This Page