1

コードを使用して MS Access データベースのスキーマを変更する必要がありますが、テーブル内のフィールドの順序または配置を指示できるようにしたいと考えています。

たとえば、TableOne に Field10、Field20、Field30 の 3 つのフィールドがある場合。既存のフィールドの末尾に追加するだけでなく、Field10 と Field20 の間に Field15 などを追加できるようにしたいと考えています。

おそらく何かが足りないのでしょうが、ADO、ADOX ADOD などはすべて新しいフィールドを最後に追加するだけのようです。MS Access内でそれを行うことができ、それが機能するので、それが可能であることはわかっています。

4

1 に答える 1

0

VBA を使用して を変更しDAO.TableDef、追加する前に新しいフィールドのOrdinalPositionプロパティを指定できます。イミディエイト ウィンドウからこのサンプル セッションを構築できるかどうかを確認します。

set db = currentdb
for each f in db.tabledefs("DiscardMe").fields : _
? f.name, f.ordinalposition : _
next
ID             0 
empid          1 
dtpunched      2 
fake_yesno     3 

set newfield = db.tabledefs("DiscardMe").createfield("fld2", dbtext)
newfield.ordinalposition = 1
db.tabledefs("DiscardMe").fields.append newfield

ただし、テーブルにはOrdinalPosition= 1 の 2 つのフィールドが含まれていることに注意してください。

for each f in db.tabledefs("DiscardMe").fields : _
? f.name, f.ordinalposition : _
next
ID             0 
empid          1 
dtpunched      2 
fake_yesno     3 
fld2           1 

Access のヘルプ トピックでは、「同じコレクション内の 2 つ以上の Field オブジェクトが同じ OrdinalPosition プロパティ値を持つことができます。その場合、それらはアルファベット順に並べられます」と説明されています。 したがって、クエリ は次のようになりますSELECT TOP 1 DiscardMe.* FROM DiscardMe;

ID empid fld2 dtpunched fake_yesno
 1   100       4/3/2012          0

いくつかの改良により、そのアプローチはあなたが望むものを得るかもしれません。ただし、列の序数に依存することは避けます。それらが変更されたとしても、コードを壊したくありません。

于 2013-02-06T05:12:59.980 に答える