PDA

Vollständige Version anzeigen : ACC97 - Änderung der Feldgröße via VBA


Ohnesorg
04.01.2002, 09:57
Hallo,

hätte nicht gedacht, dass ich noch mal ein vernünftiges Hilfegesuch Poste.

Ich muss per VBA die Feldgröße ändern.

An sich kein Thema mit
Erstelle Spalte in entsprechender Größe Übernehme alle Werte in die neue Spalte Lösche alte Spalte


Geht aber nicht!
Irgend ein Wahnsinniger hat 255 Spalten in die Tabelle eingefügt und fleißig mit Werten gefüllt.
Dank seiner wirren Module, Makros, Constraints und vielen Formularen würde es mich Wochen kosten da durchzusteigen um die Tabelle aufzusplitten.
:mad:
Da ich die erste 180 Spaltengrößen ändern muss, bietet sich ein Script geradezu an. Nur sind die Eigenschaften "Size" und "FieldSize" schreibgeschützt.

Gibt es eine andere Möglichkeit? <img src="confused.gif" border="0">

Kurt aus Kienitz
04.01.2002, 11:41
Hallo,

Mit folgendem Code kann man mind. die Size angeben (in diesem Fall 3):

Dim AktDb As Database
Dim TabDef As TableDef
Dim fld1 As Field

Set AktDb = CurrentDb
Set TabDef = AktDb.TableDefs("Kd1")

With TabDef
Set fld1 = .CreateField("TA", dbText, 3)
.Fields.Append fld1
End With

Anne Berg
04.01.2002, 11:46
Hallo,

(das mit dem Append geht ja grade nicht!)

Aber was hältst Du davon, die Tabellenstruktur neu anzulegen und dann die Daten auf die neue Struktur zu kopieren?!

Ohnesorg
04.01.2002, 11:57
Danke Dir, Kurt.
Wenn ich das richtig sehe, wird hier eine neue Spalte erstellt. Genau da liegt aber das Problem, weil ich keine 180 neuen Spalten erstellen kann.
0 bis 255 sind bereits belegt. Heißt, die Tabelle ist voll!
Und wenn ich den Trottel von Datenbank-Admin sehe, der die Datenbank erstellt hat, drehe ich ihm den Hals um! Da sind redundanzen drin ohne Ende!
Bsp: Er hat drei Module, in denen jeweils nur eine beliebige Tabelle geöffnet und geschlossen werden kann. (Openrecordset... und Tabelle.close Set Tabelle = Nothing.)
Das sagt doch alles, oder?

@ Anne
Wie kann ich dann den Ursprünglichen Autowert übernehmen, der auch als Primary Key definiert ist?
Der Autowert ist nämlich nicht mehr so ganz fortlaufend, da einige Datensätze bereits gelöscht wurden.

Anne Berg
04.01.2002, 12:12
Wenn du den Autowert mit in die Feldliste nimmst, bleibt der alte Wert erhalten.

Gustav Kurz
10.01.2002, 19:59
<font size="2" face="verdana">Hallo Ohnesorg,

folgender Code dürfte Dir weiterhelfen: Access2000!

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Dim</span> tbl <span class="TOKEN">As</span> TableDef, fld <span class="TOKEN">As</span> Field, fldAnzahl <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">On</span> <span class="TOKEN">Error</span> <span class="TOKEN">Resume</span> <span class="TOKEN">Next</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> tbl <span class="TOKEN">In</span> CurrentDb.TableDefs
<span class="TOKEN">If</span> Left(tbl.Name, 4) <> "MSys" <span class="TOKEN">Then</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> fld <span class="TOKEN">In</span> tbl.Fields
<span class="TOKEN">If</span> fld.Type = dbText <span class="TOKEN">Then</span>
DoCmd.RunSQL "ALTER TABLE [" & tbl.Name & "] ALTER COLUMN [" & fld.Name & "] VARCHAR(200)"
fldAnzahl = fldAnzahl + 1
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> fld
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> tbl
MsgBox "...es wurden " & fldAnzahl & " Felder geändert!", , "Tabellenfelder ändern...!"
</pre></div>

Gruß
Gustav