Access VBAによるテーブル作成時の書式

このQ&Aのポイント
  • Access VBAにおいて、テーブルを作成する際の書式設定についての方法を教えてください。
  • テーブル作成時に数値型のフィールドの書式を3桁にする方法が知りたいです。
  • テーブルのデザインでは書式を『000』とすることで3桁になりますが、VBAでテーブルを作成する際はどのようにすれば良いですか?
回答を見る
  • ベストアンサー

Access VBAによるテーブル作成時の書式

お世話になります。 VBAにてテーブルを作成した際の、書式設定についてご教授願います。 以下のようにテーブルを作成しております。 Set cdb = CurrentDb() Set ctb = cdb.CreateTableDef("TBL") ctb.Fields.Append ctb.CreateField("A番号", dbInteger) cdb.TableDefs.Append ctb Set ctb = Nothing cdb.Close Set cdb = Nothing この『A番号』フィールドは数値型で、書式を3桁にしたいと思っております。 テーブルのデザインでは書式のところに『000』と入れれば、001、002・・・となりますが、上記のようにVBAでテーブル作成したとき、どのようにすればよいか分かりません。 以上、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

リンク先をもう一度確認してください >Set prp = fld.CreateProperty("Format", dbInteger, "000") Set prp = fld.CreateProperty("Format", dbtext, "000") ですよ。 追加して fld.Properties.Append prp の後に Application.RefreshDatabaseWindow を足してください (無くても問題は有りませんがデータベースウィンドウが即更新します)

naoto0216
質問者

お礼

ご回答ありがとうございます。 早速、dbtextに変更したところ3桁になりました。 勉強不足ですみません。この箇所はてっきり当該フィールドのデータ型を指定する所かと思い、dbintegerとした次第です。 ありがとうございました。 大変助かりました。

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

こちらで解決するでしょう。 http://www.ruriplus.com/msaccess/Exp/exp0140.htm ただ、DAO と ADO の両方に参照設定がしてあると 期待しない方のライブラリを見に行ってしまうかもしれないので Dim db As Database → なにもしない Dim tdef As TableDef → DAO.Tabledef Dim fld As Field → DAO.Field Dim prp As Property → DAO.Property にしてください。 んで、"@@@@"の部分を、"000" で、 また、『書式』が『Format』なのは分かったけど他のは?は、 設定していないものは参照できませんので一旦手作業で設定します その後 Sub てすと() Dim db As Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Dim prp As DAO.Property On Error Resume Next Set db = Application.CurrentDb Set tdf = db.TableDefs("てーぶる名") For Each fld In tdf.Fields Debug.Print "fieldName= " & fld.Name For Each prp In fld.Properties Debug.Print , "name=" & prp.Name _ , "type= " & prp.Type _ , "value= " & prp.Value Next Next End Sub なんてので調べてました。

naoto0216
質問者

お礼

ご回答ありがとうございます。 教えて頂いたサイトを参考にし、以下のようにしました。 しかし、テーブル自体は作成されますが、やはり書式が設定できません。 Dim db As Database Dim tdef As DAO.TableDef Dim fld As DAO.Field Dim prp As DAO.Property Set db = CurrentDb Set tdef = db.CreateTableDef("TBL") Set fld = tdef.CreateField("A番号", dbInteger) tdef.Fields.Append fld tdef.Fields.Refresh db.TableDefs.Append tdef db.TableDefs.Refresh Set fld = tdef.Fields("A番号") Set prp = fld.CreateProperty("Format", dbInteger, "000") fld.Properties.Append prp どこか間違っておりますでしょうか。

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.2

こちらなどが分かりやすいですね。 http://www.accessclub.jp/bbs3/0461/superbeg135048.html

naoto0216
質問者

お礼

ご回答ありがとうございます。 教えて頂いたサイトを参考にし、以下のようにしました。 しかし、テーブル自体は作成されますが、やはり書式が設定できません。 Dim oDb As DAO.Database Dim oTd As DAO.TableDef Dim oPrp As DAO.Property Dim flTNK As DAO.Field Set oDb = CurrentDb Set oTd = oDb.CreateTableDef("TBL") Set flTNK = oTd.CreateField("A番号", dbInteger) oTd.Fields.Append flTNK oDb.TableDefs.Append oTd Set oPrp = flTNK.CreateProperty("Format", dbInteger, "000") flTNK.Properties.Append oPrp どこか間違っておりますでしょうか。

  • KEN87778
  • ベストアンサー率66% (4/6)
回答No.1

以下ではだめですか? ctb.Fields.Append ctb.CreateField("A番号", dbInteger , 3)

naoto0216
質問者

お礼

早速のご回答ありがとうございます。 試してみましたが、3桁にはなりませんでした。 また、 ctb.Fields.Append ctb.CreateField("A番号", dbInteger , "000") もダメでした。

関連するQ&A

  • DAOでテーブルを作成

    DAOでテーブルを作成したいのですが 主キーにしてオートナンバー型にするにはどうすればいいですか? Sub MyTableCreate() Dim db As DAO.Database Dim tbdef As DAO.TableDef Dim Field1 As DAO.Field Dim Field2 As DAO.Field Set db = CurrentDb Set tbdef = db.CreateTableDef("T_test") Set Field1 = tbdef.CreateField("ID", dbInteger) Set Field2 = tbdef.CreateField("氏名", dbText, 20) tbdef.Fields.Append Field1 tbdef.Fields.Append Field2 db.TableDefs.Append tbdef db.Close: Set db = Nothing End Sub これで、IDフィールドを主キーにしつつ、 dbIntegerではなくオートナンバー型にしつつ、 主キーを付与する方法を教えてください。 DAOのType プロパティのヘルプを見たのですがありませんでした。 今回は http://www.accessclub.jp/dao/20.html を参考にしました。

  • Access 2000 の VB での テーブル作成について質問です。

    下記のようにAccess 2000のVBからDAOを使ってテーブルを作っておりますが、 作るフィールドに規定値の設定もVBからできないのでしょうか?DAOだと無理なのでしょぅか? 教えてください Dim db As DAO.Database Dim tbdef As DAO.TableDef Dim flID As DAO.Field Set db = CurrentDb Set tbdef = db.CreateTableDef("テーブル") Set flID = tbdef.CreateField("ID", dbInteger)   tbdef.Fields.Append flID   db.TableDefs.Append tbdef db.Close: Set db = Nothing

  • Accessのテーブルへ複数の主キーを設定するには

    Access2003のVBAを使って開発していますが、 サーバーから取得したローカルテーブルに 複数の主キーを設定したいのですが、うまくいきません。 ソースは下記です。 Dim db As Database Dim Tbdef As TableDef Dim Fld As Field Dim Idx As Index Set db = CurrentDb Set Tbdef = db.TableDefs("TWorker") Set Idx = Tbdef.CreateIndex("INDEX_WORKER") Idx.Fields.Applend Idx.CreateField("作業者番号") Idx.Fields.Applend Idx.CreateField("登録日時") ★ Idx.Primary = True Tbdef.Indexes.Append Idx ★行で落ちるというか、終了してしまいます。 1つの主キーなら設定できるのですが、 複数設定する方法をご教授いただけますか。 よろしくお願いします。

  • Accessのテーブル定義作成をVBAから行う

    こんばんは フィールド定義の方法はネットで検索してある程度分かりました。 しかし、次の指定が解りません。 値要求と空文字列の許可です。 指定しないとどちらもいいえになります。はいにするにはどうすればよいのでしょうか。 今は次のようにしています。 Dim Table As DAO.TableDef Dim Field As DAO.Field Set Field = Table.CreateField("フィールの名称", dbText, 文字列の長さ) Table.Fields.Append Field

  • ハイパーリンク型の場合、エラーになります。

    DAOでテーブルを作成しようとすると ハイパーリンク型の場合、エラーになります。 Sub Sample() Dim db As DAO.Database Dim tbdef As DAO.TableDef Dim Field1 As DAO.Field Set db = CurrentDb Set tbdef = db.CreateTableDef("T_test") Set Field1 = tbdef.CreateField("氏名", dbHyperlinkField) tbdef.Fields.Append Field1 db.TableDefs.Append tbdef db.Close: Set db = Nothing End Sub Type プロパティ のヘルプを見ると、dbHyperlinkFieldはないのですが dbHyperlinkFieldではないのでしょうか? DAO.DataTypeEnum のメンバの中にもハイパーリンクはないようです。

  • Access 2000 VBA リンクテーブル

    Access 2000 VBAでシステム開発を行っております。 Oracle 7 と接続してリンクテーブルを作成しています。 通常は問題なく動作するのですが、 Access のフォーム上にボタンを配置して、あるボタンがクリックされたら、 リンクテーブルの参照先を変更して、リンクテーブルを再作成するといったことを 行おうと考えております。 しかし、ソース上でリンクテーブルの参照先を変更しても、 元の参照先でリンクテーブルが作成されてしまい、大変困っております。 どなたか本現象について分かられる方がいらっしゃいましたらご回答のほど 宜しくお願いいたします。 以下がリンクテーブル作成時のソースになります。 Function Create_odbc_table(str_OraTblName As String, str_mdbTblName As String) As Long On Error GoTo Create_odbc_table_Err Create_odbc_table = True Set DBS = CurrentDb DBS.TableDefs.Delete Trim(str_mdbTblName) DBS.TableDefs.Refresh Set tdfA = DBS.CreateTableDef(Trim(str_mdbTblName)) tdfA.Connect = "ODBC;DSN=" & DSN_NAME & ";UID=" & Oracle_UID & ";DBQ= " & Trim(TNS) & ";ASY=OFF;PWD=" & Oracle_PWD & ";TABLE=" & Trim(str_OraTblName) tdfA.SourceTableName = Trim(str_mdbTblName) DBS.TableDefs.Append tdfA DBS.Close end function

  • アクセス2000で作成したデータベースにテーブルを追加したいのです 「Set tbl = catDB.Tables![会費管理2]」 

    アクセスで作成したデータベースがあります。 簡単にテーブルを追加するプログラムを作成したいのですが可能かしら? 現在[会費管理2]というテーブルが無いので[会費管理2]と言うテーブルを追加して、そのテーブルに各フィールドを作成したいのです。 作成したSet tbl = catDB.Tables![会費管理2] に '以下追加したいフィールド Set colAdo = New ADOX.Column With colAdo .Name = "数値1" .Type = adInteger .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "数値2" .Type = adInteger .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "数値3" .Type = adInteger .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "日付" .Type = adDate .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "金額" .Type = adCurrency .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = Nothing Set tbl = Nothing Set catDB = Nothing cnn.Close End Sub

  • アクセス2000のデータベースにテーブルを追加して、フィールドを作成したい 

    アクセス2000のデータベースがあります。 このファイル「c:\ynet\Hz2data1.mdb」に新しいテーブル「会費管理2」を追加して、フィールドを作成したいのです。 現在は「会費管理2」テーブルがあるのを前提に下記のように書き込みしてみましたが・・・ 新しく「会費管理2」テーブルを指定したファイル「c:\ynet\Hz2data1.mdb」に作成してフィールドも作成するのを同時にできるのかしら? どなたか助けていただければ幸いです。                                           かしこ Private Sub コマンド1_Click() Beep If (MsgBox("データをアップデートしますが宜しいですか? 作業は一瞬で終わりますよ!!") = 7) Then End If Dim cnn As ADODB.Connection Dim catDB As ADOX.Catalog Dim tbl As ADOX.Table Dim colAdo As ADOX.Column strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" strCon = strCon & "Data Source=c:\ynet\Hz2data1.mdb" Set cnn = CurrentProject.Connection Set catDB = New ADOX.Catalog catDB.ActiveConnection = cnn Set tbl = New ADOX.Table tbl.Name = "会費管理2" '以下追加したいフィールド Set colAdo = New ADOX.Column With colAdo .Name = "個別台帳ID" .Type = adInteger .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "会費名称ID" .Type = adInteger .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "会費区分ID" .Type = adInteger .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "年度" .Type = adInteger .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "入金日" .Type = adDate .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "入金額" .Type = adCurrency .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = Nothing Set tbl = Nothing Set catDB = Nothing cnn.Close End Sub

  • Access VBA 削除

    またお世話になります。 Access2003を使用しています。 不要になったアカウントを削除できるようなものを作成したいのですがうまくいきません。 リストボックスに表示されたアカウントを選択し、 ボタンを押すとテーブルから削除できるというものを考えています。 テーブル名: tbl_ユーザー フィールド名: ユーザー名 パスワード アカウント フォーム名: frm_Account_Delete  リストボックス: UserList  コマンドボタン: Del いろいろ調べて自分なりに作ってみたのですがエラーが出てしまいました。 ―――以下VBAコード――― Dim db As Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("tbl_ユーザー") If IsNull(UserList) Then MsgBox "削除するアカウントを選択してください" Else If MsgBox(UserList & "を削除しますか?", vbYesNo) = vbYes Then db.TableDefs.delete UserList     MsgBox "UserListを削除しました。" End If End If rs.Close db.Close Set db = Nothing ―――以上――― これだと”このコレクションには項目がありません”というエラーが出ます。 アドバイスをよろしくお願いします。

  • リンク元のパスを変更したい vba  アクセス

    アクセスです。 該当する複数のテーブルの、リンク元のパスを変更したいのですが Sub Sample() Dim DB As Database Dim T As TableDef Dim mystr As String Set DB = OpenDatabase(CurrentProject.FullName) For Each T In DB.TableDefs mystr = CurrentDb.TableDefs(T.Name).Connect If mystr Like "*\\該当のパス*" Then Debug.Print T.Name Debug.Print CurrentDb.TableDefs(T.Name).Connect  ’自分としてはこれで変更できると思った CurrentDb.TableDefs(T.Name).Connect = _ ";DATABASE=C:\新たなパス\○○.accdb" Debug.Print CurrentDb.TableDefs(T.Name).Connect End If Next DB.Close Set DB = Nothing End Sub を実行してもエラーにもならないし、リンクテーブルのパスも変わりません。 CurrentDb.TableDefs(T.Name).Connect はパスの取得しかできないのでしょうか? パスを設定する方法を教えてください。 よろしくお願いします。

専門家に質問してみよう