Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Tabellenerstellung mit Code





Frage

Hallo, ich hab da mal ein Problem Ich arbeite mit Access 2000. Ich erstelle temp. Tabellen vor dem Füllen mit Werten in einer Funktion. Beispiel: ------------------------------------------------- Dim DB As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Set DB = CurrentDb Set tdf = DB.CreateTableDef("tArtikel") Set fld = tdf.CreateField("MaxWert", dbDouble) tdf.Fields.Append fld DB.TableDefs.Append tdf DB.TableDefs.Refresh Application.RefreshDatabaseWindow Set DB = Nothing ------------------------------------------------- Dabei wird das Feld "MaxWert" als Zahl mit dem Typ Double angelegt. Nun meine Frage. Kann ich diesem Feld auch gleich zuweisen, das die Zahl z.B. 2 Kommastellen haben soll? Habe weder in meinen Büchern noch in der Online-Hilfe etwas gefunden. Vielen Dank schon mal für die Hilfe!

Antwort 1 von lleopard

Hallo Spaceman,

ein bisschen probieren, und schon wars da, undzwar sehr wohl in der Access-Hilfe, man mußte nur etwas phantasie und geduld haben...

Hier die Lösung:

Sub Test()
Dim dbs As DATABASE, tdf As TableDef
Dim fld As Field

' Bezug auf aktuelle Datenbank zurückgeben.
Set dbs = CurrentDb
' Bezug auf Tabelle "tArtikel" zurückgeben.
Set tdf = dbs.TableDefs!tArtikel
'Und aus der Auflistung der Felder, die Eigenschaft für Dezimalstellen auf 2 setzen
tdf.Fields("MaxWert").Properties("DecimalPlaces") = 2

Set dbs = Nothing
End Sub

wobei das die entscheidende Zeile ist, die du in dein Modul eibauen müsstest:

tdf.Fields("MaxWert").Properties("DecimalPlaces") = 2

Gruß Leo

Antwort 2 von spaceman

Danke Leo,

ich probiers gleich mal aus. Wäre ja wirklich einfach.

Antwort 3 von spaceman

Habe jetzt alles gleich ausprobiert. Leider bekomme ich ständig bei Ausführen der betreffenden Zeile den Laufzeitfehler 3270, "Eigenschaft nicht gefunden". Finde aber auch nicht die Ursache. Woran kann das nun wieder liegen?

Antwort 4 von lleopard

Hi spaceman,

Vielleicht an deiner Access-Version.

Wenn du deinen Code mal Schrittweise ausführst und dann im Testfenster dir die Einträge ansiehst, solltest du eigentlich rausfinden, wie und wo man die Eigenschaft DecimalPlaces einstellt. Ich hab Access97 und 2003. Probiert hatte ich das mit 97. Ich weiß aber auch nicht, ob das unter 2003 klappt.... werde es testen! ;-)

Gruß Leo

Antwort 5 von lleopard

Hi,

habs jetzt unter 2003 auch getestet und es funzt...

Hast du mal probiert meine function / sub separat laufen zu lassen? also einfach mal testweise ohne Felder zu erstellen.

Der Fehler liegt vielleicht in der Abfolge. Wenn du Felder erstellst, kannst du nicht gleich auf das tabledef-objekt zugreifen und einstellungen ändern. Habs noch nicht probiert, aber das könnte ein grund sein...

lg leo

Antwort 6 von spaceman

Hi, Leo

Habe deine Sub-Routine separat laufen lassen. Da tritt die Fehlermeldung direkt beim Ausführen deiner Zeile

tdf.Fields("MaxWert").Properties("DecimalPlaces") = 2

auf. Wie gesagt "Eigenschaft nicht gefunden". Das gleiche passiert auch wenn ich es in meine Funktion einbaue. Ach wenn ich es nach der vollständigen Tabellenerstellung als separate Funktion starte. Habe auch schon versucht ob vielleicht ein Verweis fehlt. Konnte aber auch da keinen Erfolg erziehlen.

Gruß spaceman

Antwort 7 von lleopard

hi spaceman,

Das hat mit den Verweisen auch nix zu tun. Wenn er die Eigenschaft so nicht kennt, dann schau doch mal nach wie sie bei dir heißt.

Wie gesagt, einfach im Einzelschritt die Routine bis zu dieser Zeile laufen lassen, dann im Testfenster einfach mal die Items unter fields => Properties checken. Bei mir wars Item24, da steht dann "DecimalPlaces". Vielleicht steht bei dir ja Dezimalstellen oder so.

Also wie gesagt, bei mir funktioniert es unter 97 und 2003!

Gruß Leo

Antwort 8 von spaceman

Hi Leo

Mit dem Letzten kann ich nicht wirklich was anfangen.
In welchem Testfenster sehe ich welches Item es ist?
Und wo sehe ich welches Item, welcher Begriff ist?

Einzelschritt (F8) ist mir klar, denn da hab ich ja gesehen das er genau bei der Zeile hängenbleibt. Mit dem anderen kann ich mal ehrlich gesagt nichts anfangen.
Es funktioniert sicherlich auch unter 2000, ich weiß nur nicht wie!

Gruß spaceman

Antwort 9 von lleopard

hi spaceman

ich habe ehrlich gesagt Office2000 einfach übersprungen. Deswegen weiß ich nicht wie das bei A2K aussieht. Aber!!!

in jeder Access-Version hast du ein Testfenster, meistens zu als Button zu finden neben dem Objektkatalog, wo man auch die Verweise einstellt. Das Ding heißt auch Testfenster, wenn man die Maus draufhält. sieht aus wie ein windowsfenster, hat aber ein rotes Ausrufezeichen im icon. Solltest du leicht finden. Das mußt du halt mal aktivieren.

Dann findest du auch die Einträge zu deinem Tabellenobjekt und kannst dir die Properties ansehen. Dort findest du dann auch die Items.

Gruß Leo

Antwort 10 von spaceman

hi Leo,

ein Testfenster gibt es bei Access 2000 nicht. Habe alles durchsucht. Habe auch im Menü Anpassen... nach dem Symbol gesucht, welches du beschrieben hast. Auch dieses habe ich nicht hefunden. Es gibt aber im Menü --> Ansicht ein Local-Fenster. In diesem werden beim Ablauf der Sub-Routiene TableDef und auch Fields angezeigt. Wenn man sich dann weiter durchklickt kann man unter Field und dann Properties die Items sehen. Es sind bei mir Item1 bis Item20.
Bei deren Namen weist aber nichts auf irgendwas mit Dezimalstellen oder änliches hin. Da gibt es nur sowas wie Name, Type, Value und so.

Gruß spaceman

Antwort 11 von lleopard

Hi spaceman

Dann liegt es vielleicht doch an deiner Access-Version!?

Zitat:
Bei deren Namen weist aber nichts auf irgendwas mit Dezimalstellen oder änliches hin. Da gibt es nur sowas wie Name, Type, Value und so.


Wie gesagt, sowohl Access97 als auch 2003 machen das problemlos. hast du ne möglichkeit das mit einer anderen Version zu testen???

Gruß leo

Antwort 12 von spaceman

hi Leo

Danke für deine Hilfe. Mal sehen ob ich mal auf einer anderen Version testen kann. Ich kann mir momentan nichts besseres leisten. Muss es eben so gehen.

Gruß spaceman

Antwort 13 von Marie

na dann versuchs mal so, zuerst das feld anhängen, dann die property, Achtung ungetestet

Gruß Marie

Dim fFormat As Property,

Set fld = tdf.Fields("MaxWert")
Set fFormat = fld.CreateProperty("DecimalPlaces", DB_BYTE, 2)
fld.Properties.Append fFormat

Antwort 14 von Marie

sorry, geschlampt:

Dim fFormat As Property

Set fld = tdf.Fields("MaxWert")
Set fFormat = fld.CreateProperty("DecimalPlaces", DBBYTE, 2)
fld.Properties.Append fFormat

Antwort 15 von spaceman

hi Marie,

vielen Dank, das mit den 2 Dezimalstellen hat funktioniert.
Bei der Allgemein - Anzeige für das Feld in der Entwicklungsansicht der Tabelle wird es angezeigt.
Aber die in die Tabelle eingegebenen Werte werden trotzdem als Zahl ohne Nachkommastellen angezeigt. Ich vermute mal das es an dem FORMAT des Feldes liegt. Das muss sicherlich auch noch auf Standardzahl eingestellt werden. Jedenfalls funktioniert es wenn man in der fertigen Tabelle von Hand das Format umstellt. Hab auch schon im Code versucht das FORMAT bei der Erstellung mit vorzugeben, aber ich weiß den Syntax und auch den Begriff für Standardzahl nicht.
Kannst du mir da auch noch mal weiterhelfen?

Gruß spaceman

Antwort 16 von spaceman

hi und Danke noch mal an alle.

Habe das mit Format und der Standardzahl hingekriegt. Funktioniert auch alles wie ich es mir vorgestellt habe.

Gruß spaceman

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: