- ベストアンサー
ACCESSデータベースにVB6(DAO)でフィールドを追加したい
既存のACCESSデータベースのテーブルにVB6のDAOでフィールドを追加したいのですが、テーブル名.Fields.Append とかいうメソッドがあるようですが、使用方法がわからずフィールドを追加が出来ません。 具体的には、フィールド名"電話番号"で、文字型で固定文字数13を追加したいのです。 どうぞよろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
VB6.0からDA0を使用して、既存のAccessのテーブルへのフィールド追加、という事でしたら以下のコードで出来ました。 Sub Main() Dim dbs As DAO.Database Dim s_sql As String Set dbs = OpenDatabase("C:\test.mdb") s_sql = "ALTER TABLE テーブル名 ADD COLUMN フィールド1 TEXT(10)" dbs.Execute s_sql Set dbs = Nothing End Sub
その他の回答 (6)
- nda23
- ベストアンサー率54% (777/1415)
>tbl.Fields("電話番号").???????? = "" とかで""をセットするフィールドプロパティはないのでしょうか? ないです。 プロパティというのは属性、初期値、規約などの性格を決めるだけで、 現存するレコードの、あるいは追加されたフィールドの値を設定/更新 するものではありません。 つまり、「プロパティを設定/変更する」と、「値を設定/変更する」は 全く違う行為です。プロパティを変更しただけで、値まで変わって しまうようなシステムでは危なくて誰も使えないでしょう。
お礼
回答ありがとうございました。 初期値としてNULLでなく""をセット出来ないかと思って書いたのですがNULLしかセット出来ないのですね。
- senko0306
- ベストアンサー率80% (4/5)
「Nullの使い方が不正です」が表示される状況が こちらでは掴めないので、すみませんが推測になります。 新しく追加したフィールドの「値要求」と「空文字列の許可」の設が関係しているような気がします。 まだ解決されてない様でしたら、 テーブルの上記のフィールドプロパティを直接直しみて、 現象が改善されるか確認してみて頂けますか? 改善されるようでしたら、 下記のコードの様に、 フィールド追加時に「値要求」は「いいえ」、 「空文字列の許可」は「はい」の設定を プラスしてやればOKだと思います。 (コード自体の動作確認はしてあります。) Sub フィールド追加テスト2() Dim dbs As DAO.Database Dim tbl As DAO.TableDef Dim s_sql As String Set dbs = OpenDatabase("C:\test.mdb") 'フィールドの追加 s_sql = "ALTER TABLE テーブル名 ADD COLUMN フィールド2 TEXT(10)" dbs.Execute s_sql 'フィールドプロパティの設定 Set tbl = dbs.TableDefs("テーブル名") tbl.Fields("フィールド2").Required = False '値要求 tbl.Fields("フィールド2").AllowZeroLength = True '空文字列の許可 Set tbl = Nothing dbs.Close Set dbs = Nothing End Sub
補足
テーブルの上記のフィールドプロパティを直接直してみて、nda23 さんから教わったCurrentDb.Execute "UPDATE Youken SET 電話番号=''" をやるとエラーはでなくなりましたので、フィールドプロパティの設定をするプログラム追加しその後、 CurrentDb.Execute "UPDATE Youken SET 電話番号=''" をやると全てプログラムから出来る様になりました。 CurrentDb.Execute "UPDATE Youken SET 電話番号=''" じゃなく tbl.Fields("電話番号").???????? = "" とかで""をセットするフィールドプロパティはないのでしょうか?
- nda23
- ベストアンサー率54% (777/1415)
>追加したフィールドを表示すると「Nullの使い方が不正です。」 どういう表示のしかたをしたのでしょう?データシートビューなら 開けるはずです。 追加したフィールドの最初の設定値はNullです。空文字列にしたい 場合はフィールド追加後に「UPDATE テーブル SET 新フィール=""」を 実行しなければなりません。 cf. CurrentDb.Execute "UPDATE テーブル SET 新フィールド=''"
補足
アドバイスありがとうございます。 >どういう表示のしかたをしたのでしょう? フォームのテキストボックスに表示しようとしただけです。 CurrentDb.Execute "UPDATE Youken SET 電話番号=''" を追加してみましたがダメでした。 ACCESS で直接テーブルのデザインを見てみたら、空文字列の許可項目が’いいえ’になっていますが関係あるのでしょうか?
- nda23
- ベストアンサー率54% (777/1415)
Dim S As DAO.TableDefs Dim T As DAO.TableDef Dim F As DAO.Field Set S = CurrentDb.TableDefs Set T = S("Table") '★実際のテーブル名に合わせてください Set F = T.CreateField("NewName", dbText, 50) '★ T.Fields.Append F CreateField(DAO)のヘルプを参照してみてください。 基本的に複数形で表現してあるものはコレクション(集団)で 単数形のものはオブジェクトです。 (1)テーブル定義コレクションを記録する (2)コレクションから名前を指定してテーブル定義オブジェクトを取得する。 (3)フィールドを作成する。テーブル定義オブジェクトのメソッドだが できたフィールドオブジェクトとは関連付かない。 (4)テーブルの中のフィールド・コレクションに上記を追加(Append)する。 尚、Set S = CurrentDb.TableDefs を省略して Set T = CurrentDb.TableDefs("Table") とやると失敗します。 これは昔(10年以上前)からあるクセでオカシイとは思ってるんですが、 直りませんね。 あと、インデックスやプロパティも同様の感覚で作れます。
お礼
回答ありがとうございます。 いくつかの回答を見てわかって来た気がします。 まだ完全じゃありませんが..... 追加したフィールドを表示すると「Nullの使い方が不正です。」と出ます。 表示でエラー処理をするといいのですが、追加(Append)するとき""をセット出来ないのでしょうか?
- redfox63
- ベストアンサー率71% (1325/1856)
ごめんなさい 1つプロパティが抜けてました tbldef.Fields.Append newFld Fieldsが抜けておりました m(__)m
お礼
出来ました。 ありがとうございました。 私に応用力があれば気づくんだったんでしょうけどすみません。 もっと勉強したいと思います。 また何かありましたらよろしくお願いいたします。
- redfox63
- ベストアンサー率71% (1325/1856)
DAOでやるなら そのテーブルのTableDefオブジェクトを取得して CreateFieldでFieldオブジェクトを生成 Appendメソッドで追加 といった手順です ' MDBファイルを objDB(DAO.Database型)に取得してあると仮定 Dim objTBLDef as TableDef Dim objFld as Field Set objTblDef = objDB.TableDefs("テーブル名") on error resume next ' 列:電話番号があるかをチェック set objFiel = objTBLDef.Fields("電話番号") On error goto 0 if objFld Is Nothing then ' 新規に 列:電話番号を作成 Set objFld = objTBLDef.CreateField("電話番号", dbText, 13 ) ' テーブルに 電話番号を追加 objTBLdef.Append objFld End if set objFlg = nothing Set objTBLdef = nothing
補足
早速のご回答ありがとうございます。 いろいろやってみましたが解決しません。 'MDBファイルを objDB(DAO.Database型)に取得してあると仮定 とありますが、MDBファイルをopen するといいのでしょうか? Set objDB = Workspaces(0).OpenDatabase(App.path "\Data\master.mdb") を付け加えてしてやっていましたが、objTBLdef.Append objFld の所で、「メソッドまたはデータメンバが見つかりません。」とコンパイルエラーが出てしまいます。 宜しくお願いいたします。
お礼
ありがとうございました。 短いコードで出来よろこんでいます。 色んな方法があるのですね。 とても勉強になりました。
補足
追加したフィールドを表示すると「Nullの使い方が不正です。」と出ます。 表示でエラー処理をするといいのですが、SQL記述で""をセット出来ないのでしょうか?