• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADOX Append Null許可フィールド作成)

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

このQ&Aのポイント
  • Null不許可で追加したフィールドをNull許可にする方法について
  • エラーが発生した際には、各OLE DBの状態の値を確認する必要がある
  • フィールドの追加にはADOXのCatalogオブジェクトを使用する

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

一応、Accessでの質問ということで。 質問について少し実験をしてみました。このADOXをAccessから なのかあるいはExcelなど他の環境から使うのかわかりませんが、 結果から申し上げますと、ADOXを使う場合は、 (1) 新規にテーブルを作るときに先にテーブルを作成し後から    フィールドを設定するようなコードを組むと「空文字の許可」    を「はい」にする、「値要求」をいいえにするなどデフォルト    の設定を変更することはできない。     この場合は、先にフィールドの設計をして、その後にテーブルを   作成する、という手順を踏む。 (2) 既存のテーブルにフィールドを追加するときに、フィールド の属性も変更しようとしてもフィールドの属性を設定し、 それからテーブルにフィールドを追加してもデフォルト の設定を変更できない。    この場合、どうしてもコードで属性を変更したいというので    あれば、ADOXを使うのは諦めてSQLでデータ定義クエリを作成    して、SQL文を実行する。たとえば、 strSQL = "alter table テーブル名 alter column フィールド名 text(255) constraint NantokaKantoka NOT NULL" DoCmd.RunSQL strSQL のように。SQL文中のNantokaKantokaは制約名で適当に設定。    ただし、「値要求」を「いいえ」から「はい」にはできるが    その逆、すなわち質問の変更はできない。    あるいは、DAOのTableDefオブジェクトを使用し、TableDefの    Fieldオブジェクトのプロパティから変更する。この方法ならば    ほぼ望むことが実現される。    たとえば、現在開いているファイルのとき、 Dim db As DAO.Database Dim tdf As DAO.TableDef Set db = CurrentDb Set tdf = db.TableDefs("既存のテーブル名") Dim fld As DAO.Field Set fld = tdf.Fields("既存のフィールド名") '値要求を「いいえ」に fld.Required = False '空文字の許可を「はい」に fld.AllowZeroLength = True    のように。 というのが、いろいろ試してみた結論です。ひょっとしたら ADOXでの方法があるのかもしれませんが、いろいろ検索 しても出てきませんでした。

readme_eml
質問者

お礼

ありがとうございます。 なかなか回答をもらえなかったため、諦めてログインもしてませんでした。 SQLで実行して確認させていただきます。 結果はまた、報告させていただきます。

readme_eml
質問者

補足

確認できました。 DAOを使うと既存テーブルの属性変更ができるみたいですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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 にしても同じようなエラーになりました。 何でエラーになるのでしょう???

  • 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 にする方法を教えてください。、

  • データ型をメモ型にして既存テーブルにフィールドを追加したい(ACCESS ADOX)

    Sub test() Dim cat As New ADOX.Catalog Dim tb As New ADOX.Table cat.ActiveConnection = CurrentProject.Connection 'テーブルを開く Set tb = cat.Tables("テーブル1") tb.Columns.Append "フィールド1", ad○○ Set cat = Nothing Set tb = Nothing End Sub これで既存のテーブルにフィールドを追加できることを知ったのですが データ型をメモ型にするにはどの「ad○○」にすればいいのでしょう? (文字数が多いためテキスト型では収まりません) オブジェクトブラウザで見ても、多すぎてどれなのかわかりません。 ご教授よろしくお願い致します。

  • アクセスでフィールド入替えのVisualBasic

    アクセス2000で作成したテーブルに現在「場所」というフィールドがあります。 このフィールドのデータ型を「OLEオブジェクト」から「テキスト型」に変える「VisualBasic」の書き方を教えてください。 [現在ある"場所"を削除してから・・・ tbl.Columns.Append colAdo Set colAdo = New ADOX.Column With colAdo .Name = "場所" .Type = adVarWChar .Attributes = adColNullable End With 上記を追加する形になるのでしょうか? お願いいたします。

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

    現在作成済みのアクセスのテーブルにいくつかの項目を追加するプログラムを作っています。 「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

  • 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

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

  • File.Existsでのファイルのある場合のDB作成

    分類[C#] はじめまして! 今回初めて質問させていただきます! 初めてなのでカテゴリーが間違ってないか心配です・・・。 さて、質問なのですがC#で if (!File.Exists("DB.mds")){   dbcele(); } と、書きこの場合「DB.mds」がない場合実行となると思うのですがDB.mdsがあるとき実行するとこのdbcele()が実行されてしまいます。 ちなみにこのdecare()は・・・ private void dbcele(){ try { ADOX.CatalogClass cat = new ADOX.CatalogClass(); cat.Create(strAC); object oMissing = System.Reflection.Missing.Value; // テーブルを作成する(CUSTOMER) ADOX.TableClass td = new ADOX.TableClass(); td.ParentCatalog = cat; td.Name = "DBT"; ADOX.ColumnClass hiduke = new ADOX.ColumnClass(); hiduke.ParentCatalog = cat; hiduke.Name = "日付"; hiduke.Properties["Jet OLEDB:Allow Zero Length"].Value = false; td.Columns.Append(hiduke, ADOX.DataTypeEnum.adDate, 0); cat.Tables.Append(td); } catch(Exception ex) { MessageBox.Show(ex.Message); } } で、このエラーメッセージが実行されてしまいます。 DB.mdsがある場合実行する必要はないのでこのエラーをなくしたいのですがどうすればいいでしょうか? 初心者のため、勘違いしてるかもしれませんがよろしくお願いします! どうかよろしくお願いします。

  • 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です。とんでもなく初歩的なところでミスをしているような感じもしますが、まったく原因がつかめませんので、どうかよろしくお願いいたします。

このQ&Aのポイント
  • TR9530のドライバーをインストールしようとした際に、プリンターが見つからないとの表示が出ます。IPアドレスを入力しても変わらずです。
  • 他のPCでは通常通りインストールできるため、対象のPCに問題があると考えられます。解決策について教えてください。
  • キヤノン製品に関する質問です。TR9530のネットワークのエラーに対する解決方法を教えてください。
回答を見る