ADOXでmdbファイルにオートナンバー型フィールド作成するとエラー

このQ&Aのポイント
  • ADOXを使ってmdbファイルを作るときにオートナンバー型フィールドを作るとエラーが発生します。
  • オートナンバーにしない場合は正常にmdbファイルが作成されます。
  • 対処法をご存知の方、教えてください。
回答を見る
  • ベストアンサー

ADOXでmdbファイルにオートナンバー型フィールド作成するとエラー

ADOXを使ってmdbファイルを作るときに、オートナンバー型フィールドを作るステートメントを入れると 「Microsoft JET Database Engine (0x80040E21) 複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。」 というエラーになります。 試しにオートナンバーにしないと、正常にmdbファイルが作成されます。 対処法をご存知の方、是非とも教えてください。 以下がソースの一部です。 Set catDB = CreateObject("ADOX.Catalog") catDB.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\hoge.mdb" Set tbl = CreateObject("ADOX.Table") With tbl .Name = "Contacts" Set .ParentCatalog = catDB With .Columns .Append "ContactId", adInteger ' ContactId フィールドをオートナンバー型に設定します。 .Item("ContactId").Properties("AutoIncrement") = True .Append "CustomerID" .Append "Phone" End With End With catDB.Tables.Append tbl←ここでエラーになります。 Set catDB = Nothing

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

こちらでは、上記のソースで正常に作成できました。 なんでMDACのバージョン等の問題かと。 最新のものを入手して試してみてください。

sisyou
質問者

お礼

お礼をすることを忘れていました。 大変申し訳ありません。 どうもありがとうございました。

sisyou
質問者

補足

回答ありがとうございます。 MDACのバージョンを調べたところ 2.0でしたので、最新の2.8をインストールしてみました。 しかし、状況はかわらずでした。 Accessのバージョンなども関係しているのでしょうか?

関連するQ&A

  • アクセス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

  • ADOX フィールドのRequiredプロパティを

    ADOX フィールドのRequiredプロパティをFalseにしたい アクセスです。 Sub test() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim idx As ADOX.Index Dim varRet As Variant Dim strMsg As String Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "test" tbl.Columns.Append "氏名ID", adInteger '手作業で数値型のフィールドを作るとこれがデフォルトになる tbl.Columns.Append "氏名", adVarWChar, 50 cat.Tables.Append tbl 主キーを作る Set idx = New ADOX.Index idx.Name = "Primary" idx.PrimaryKey = True idx.Columns.Append "氏名ID" tbl.Indexes.Append idx MsgBox tbl.Name & "テーブルを作成しました。" Set cat = Nothing End Sub ********************************************************** 上記のコードでテーブルを作ると、RequiredをTrueにしてないのに、 実際にテーブルにデータを入れてる時に、NULLにしようとすると、 ********************************************************** フィールドに必要なプロパティが True に設定されているため、 このフィールド '<フィールド名>' には Null 値は挿入できません。値を入力してください。 ********************************************************** となります。 Requiredプロパティの規定値は、False になってますが、 なぜか値を要求されてしまいます。 ADOXで上記のコードに追加してRequiredをFalse にする方法を教えてください。、

  • ADOX 複数回フィールドを定義することは出来ませ

    アクセス2010ですが アクセスの仕様を見ると テーブル内のフィールド数の最大値は255なのですが ADOXでVBAでテーブルを作成してるのですが 実行時エラー -2147217858 複数回フィールドを定義することは出来ません。 と言うエラーになり、テーブルが作れません。 vbaコードの一部は Set cat = New ADOX.Catalog Set tbl = New ADOX.Table cat.ActiveConnection = CurrentProject.Connection tbl.Name = "test" For i = LBound(tmp) To 200 ' UBound(tmp) Col = tmp(i) tbl.Columns.Append Col, adVarWChar, 20 tbl.Columns(Col).Attributes = adColNullable Next i cat.Tables.Append tbl です。 ためしに To 200 を To 100 にしても同じようなエラーになりました。 何でエラーになるのでしょう???

  • C#_ADOXでMDBファイル作成時、メモ型設定

    お疲れ様です。 質問をお願い致します。 Os:WindowsXp Access:Access2003 IDE:VidualStudio2008 C#_ADOXでMDBファイルの作成を行っております。 200桁以上の大きい桁数のデータを扱う列が欲しい為、列にメモ型の指定をして、TBLを作成したいと思っております。 メモ型を指定する為、データタイプを以下のように"ADOX.DataTypeEnum.adLongVarWChar"としておりますが、出力されたMDBファイルを確認すると、テキストになっております。 こちらのサイト様を参考にさせて頂いたのですが、設定方法が違うのでしょうか? http://www.accessclub.jp/ado/adox/06.html また、メモ型にした際に、400桁と指定することは可能でしょうか? //メイン処理 void main() { string DBSource = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\DB\\DB.MDB; Jet OLEDB:Engine Type=5"; // データソースの作成を行う ADOX.CatalogClass catalog = new ADOX.CatalogClass(); catalog.Create(DBSource); CreateTblClass createTblClass = new CreateTblClass(); createTblClass .CreateTbl(catalog); } //MDBファイル、テーブルの作成を行う public void CreateTbl(CatalogClass catalog) { // テーブルを作成する(TEST_TBL) ADOX.TableClass table = new ADOX.TableClass(); table.ParentCatalog = catalog; table.Name = "TEST_TBL"; /*TEST_CD列は、想定通り、テキスト型の8桁で列が作成できます*/ // テストコード列の作成(TEST_CD) ADOX.ColumnClass columnTestCd = new ADOX.ColumnClass(); columnTestCd.ParentCatalog = catalog; //列名を設定 columnTestCd.Name = "TEST_CD"; //桁数を設定 columnTestCd.DefinedSize = 8; //型を設定 table.Columns.Append(columnTestCd, ADOX.DataTypeEnum.adVarChar, columnTestCd.DefinedSize); /*問題のメモ型列*/ // 備考列の作成(BIKOU) ADOX.ColumnClass columnBikou = new ADOX.ColumnClass(); columnBikou.ParentCatalog = catalog; //列名を設定 columnBikou.Name = "BIKOU"; //桁数を設定 ※「フィールドサイズが長すぎます」とエラーになり400に設定できない為、200と暫定的に設定しております! columnBikou.DefinedSize = 200; //型を設定 table.Columns.Append(columnItemTypeDesc, ADOX.DataTypeEnum.adLongVarWChar, columnItemTypeDesc.DefinedSize); //プライマリーキーの設定 table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "TEST_CD", "", ""); catalog.Tables.Append(table); } 大変申し訳ないのですが、どうぞ、宜しくお願い致します。

  • ADOXでAccessのファイルを作る

    ADOXで下記のようにAccessファイルを作ろうと思うのですが Dim cat As New ADOX.Catalog Dim tbl As New ADOX.Table Dim col As New ADOX.Column Dim idx As New ADOX.Index cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & ここには作成先のパス & ";" _ & "Jet OLEDB:Engine Type=4;" tbl.Name = "T_連絡先" col.Name = "連絡場所" col.Type = adVarWChar col.DefinedSize = 20 col.ParentCatalog = cat col.Properties("Jet OLEDB:Allow Zero Length") = True tbl.Columns.Append col Set col = Nothing col.Name = "連絡番号" col.Type = adVarWChar col.DefinedSize = 13 col.ParentCatalog = cat col.Properties("Jet OLEDB:Allow Zero Length") = True tbl.Columns.Append col Set col = Nothing cat.Tables.Append tbl Set tbl = Nothing 4台ある中の2台のPCでは問題なくファイルが作成されましたが、残り2台に関してはファイルは作成されるもののテーブルは作成されませんでした。 コードを削除しながらテストしてみると、"連絡場所"フィールドに問題があるらしく、"連絡場所"フィードのコードを削除すると問題なくテーブルも作成されます。 しかも、不思議なことにコードを変えずにフィールド名"連絡場所"を"連絡場所1"とするとテーブルは問題なく作成されます。マシンはすべてWin2000ProにVB6SP5です。とんでもなく初歩的なところでミスをしているような感じもしますが、まったく原因がつかめませんので、どうかよろしくお願いいたします。

  • ADOX Append Null許可フィールド作成

    お世話になります。 既存テーブルにフィールドを追加したところNull不許可で作成されました。 Dim CAT As ADOX.Catalog CAT.Tables("TM住所録").Columns.Append "年賀状", adVarWChar, 2 検索したところ次のようなサンプルがあったのですが、下のエラーになります。 CAT.Tables("TM住所録").Columns("年賀状").Attributes = adColNullable 実行時にエラー -2147217887 複数ステップのOLE DBの操作でエラーが発生しました。 各OLE DBの状態の値を確認して下さい。作業は終了しませんでした。 appendで追加したフィードをNull許可にするにはどうしたらいいでしょうか? よろしくお願いいたします。

  • アクセス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

  • アクセスのテーブルに項目を追加するコードの作成方法

    現在作成済みのアクセスのテーブルにいくつかの項目を追加するプログラムを作っています。 「Name = "場所ドライブ"」 「.Name = "区画図ドライブ"」 「.Name = "区画図"」 以上の項目をテキスト型で追加したいのです。 同時に現在ある「Name = "場所"」というはすでに存在する項目を「OLEオブジェクト型」から「テキスト型」に変更したいのです。 単純に「Name = "場所"」をテキスト型で追加したコードを作成したら動きません。 どなたか助けていただけますか。下記にコードを書きます。                                          祥子 Private Sub コマンド1_Click() Beep If (MsgBox("データをアップデートします!!") = 7) Then End If Dim cnn As New ADODB.Connection Dim catDB As New ADOX.Catalog Dim colAdo As ADOX.Column Dim tbl As ADOX.Table Dim strCon As String Dim lIdx As Long strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" strCon = strCon & "Data Source=c:\ynet\Hz2data1.mdb" cnn.Open strCon catDB.ActiveConnection = cnn Set tbl = catDB.Tables![区画1] '変更か削除したいフィールド 'CurrentProject.Connection.Execute "ALTER TABLE [区画1] ALTER COLUMN 場所 TEXT(255)" '以下追加したいフィールド Set colAdo = New ADOX.Column With colAdo .Name = "場所ドライブ" .Type = adVarWChar .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "場所" .Type = adVarWChar .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "区画図ドライブ" .Type = adVarWChar .Attributes = adColNullable End With tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "区画図" .Type = adVarWChar .Attributes = adColNullable End With

  • VBScriptでAccessMDBにテーブルを作成時、値要求はいのフィールドが作成できない。

    Access97で使用しているデータベースに、 スクリプトでテーブルを作成する必要が出てきたので、 作成してみたのですが、プロパティで値要求を「はい」に設定しているにも関わらず、 設定する事が出来ませんでした。 設定の仕方が悪いのでしょうか? 下記にサンプルソースを上げました。 教えて頂けると助かります。 よろしくお願い致します。 -------------------------------------- Option Explicit 'データベースパス Dim strDBPath Dim strDBName strDBName = "db1.mdb" Dim strDBFullPath 'ファイルが存在する場所 strDBFullPath = Replace(WScript.ScriptFullName,WScript.ScriptName, "") 'FileSystemObject Dim objFS 'SQL文 Dim strSQL 'テーブル名 Const strTBL = "テスト" 'ADOX用定義 Const adBoolean = 11 'ブール値型 Const adColFixed = 1 '値要求 はい Const adColNullable = 2 '値要求 いいえ Dim objCat Dim objTbl Dim objCol 'ADOオブジェクトを作成します Set objCat = WScript.CreateObject("ADOX.Catalog") Set objTbl = WScript.CreateObject("ADOX.Table") Dim strJoin strJoin = "" strJoin = strJoin & "Provider=Microsoft.Jet.OLEDB.4.0;" strJoin = strJoin & "Data Source=" & strDBFullPath & strDBName & ";" strJoin = strJoin & "Jet OLEDB:Engine Type=5;" objCat.ActiveConnection = strJoin 'テーブル名を定義します objTbl.Name = strTBL objCat.Tables.Append objTbl '■列の設定 'フラグ Yes/No型 はい - Set objCol = WScript.CreateObject("ADOX.Column") With objCol ' フィールド名 .Name = "フラグ" ' データ型 .Type = adBoolean ' 値要求 はい .Attributes = adColFixed End With objCat.Tables(strTBL).Columns.Append objCol Set objCol = Nothing Set objTbl = Nothing Set objCat = Nothing

  • ADO&mdbで、リンクテーブルの作り方

    お世話になっています。 行き詰って困っています。 あるmdb(Access2000形式)内のテーブルを別のmdb(同)から見られるようリンクテーブルを作りたいのですができません。 VB.NET 2005 でやっています。 いろいろ調べてMSDN等からサンプルを引っ張り、以下のように作っても、 Dim catDB As ADOX.Catalog = New ADOX.Catalog Dim tblLink As ADOX.Table = New ADOX.Table catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Mdb_Link With tblLink .Name = "TEST_TBL" .ParentCatalog = catDB .Properties("Jet OLEDB:Create Link") = True <---ここと .Properties("Jet OLEDB:Link Provider String") = Mdb_Test <---ここと .Properties("Jet OLEDB:Remote Table Name") = "TEST_TBL" <---ここ End With catDB.Tables.Append(tblLink) catDB = Nothing .Propertiesの3行でエラー(プロパティ'Item'は'ReadOnly'です。)になってしまい、サンプル通りに行きません。 これについて何か心当たりありましたら教えてくださると嬉しいです。

専門家に質問してみよう