VB6からMDBのテーブルにフィールドの追加するには

解決


 2008-03-18 11:38:44  No: 139313  IP: 192.*.*.*

DAO を使用して MDB内のMEMBERテーブルにフィールドを追加したいのですが上手くできません。
知識不足により調べながら試しに作ってはみたのですが開くだけで追加されません。
重要部分が抜けていると思い継続して試しているところですが宜しくお願い致します。

ちなみにMDBにフィールドの追加を行いたい場合、フィールドを追加した空のMDBを用意して
全ての内容を移行させる方が望ましいのでしょうか?

Private Sub Command1_Click()
    Dim Mydb As DAO.Database
    Dim tdf As TableDef
    Dim fdNew(3) As Field
    
    Set Mydb = DAO.DBEngine.Workspaces(0).OpenDatabase("C:\test\test.mdb", False, True, "MS Access;pwd=1111")
    Set tdf = Mydb.CreateTableDef("MEMBER")
    
    Set fdNew(0) = tdf.CreateField("FIELD1", dbText)
    fdNew(0).Size = 50
    Set fdNew(1) = tdf.CreateField("FIELD2", dbText)
    fdNew(1).Size = 50
    Set fdNew(2) = tdf.CreateField("FIELD3", dbText)
    fdNew(2).Size = 50
    Set fdNew(3) = tdf.CreateField("FIELD4", dbText)
    fdNew(3).Size = 50
    
    tdf.Fields.Append fdNew(0)
    tdf.Fields.Append fdNew(1)
    tdf.Fields.Append fdNew(2)
    tdf.Fields.Append fdNew(3)

    Mydb.TableDefs.Refresh
    
    Mydb.Close
    Set Mydb = Nothing
End Sub

編集 削除
もげ  2008-03-18 13:40:31  No: 139314  IP: 192.*.*.*

>    Set Mydb = DAO.DBEngine.Workspaces(0).OpenDatabase("C:\test\test.mdb", False, True, "MS Access;pwd=1111")

排他モードで開くのと、

>    Set tdf = Mydb.CreateTableDef("MEMBER")

既にMEMBERテーブルがあるならCREATEしちゃダメかと。

    Set Mydb = DAO.DBEngine.Workspaces(0).OpenDatabase("C:\test\test.mdb", , True, "MS Access;pwd=1111")
    Set tdf = Mydb.TableDefs("MEMBER")

編集 削除
 2008-03-18 15:29:43  No: 139315  IP: 192.*.*.*

もげさま  返信ありがとうございます!!

早速教えて頂いた2点を修正して実行してみたのですが、変更点の1行目で「パスワードが正しくありません」と表示されました。
色々変更して試している中で
Set Mydb = DAO.DBEngine.Workspaces(0).OpenDatabase("C:\test\test.mdb", False, False, "MS Access;pwd=1111")
Set Mydb = DAO.DBEngine.Workspaces(0).OpenDatabase("C:\test\test.mdb", True, False, "MS Access;pwd=1111")
のどちらかとした場合に上手くできました。しかしどちらにすべきか、これでよいものなのか疑問が残ります(汗)

パスワード前には何を指定しているのか調べてみます。
ありがとうございました。

編集 削除
 2008-03-18 17:38:12  No: 139316  IP: 192.*.*.*

もうしわけありません。追加の質問をさせてください。
MDBに直接フィールド(テキスト型)を作成した際の設定と異なる箇所が2つありました。
空文字列の許可は AllowZeroLength = True で指定できたのですが、Unicode圧縮の設定が行えません。
UnicodeCompression かと思い試してはみたのですがエラーになります。
ご存じの方おりましたら宜しくお願い致します。

編集 削除
もげ  2008-03-18 17:46:41  No: 139317  IP: 192.*.*.*

CreatePropertyしてみてください。http://www.accessclub.jp/bbs6/0010/das2557.html

編集 削除
 2008-03-18 21:37:32  No: 139318  IP: 192.*.*.*

もげさま  返信ありがとうございます2!!

教えて頂いたサイトを参考に色々試していたことろ何とかできました。
大変助かりました。ありがとうございます。
また質問させて頂くことがありましたら宜しくお願い致します。

編集 削除