データ型をメモ型にして既存テーブルにフィールドを追加する方法

このQ&Aのポイント
  • データ型をメモ型にするためには、ADOXのColumns.Appendメソッドの第2引数にadLongVarWCharを指定します。
  • adLongVarWCharは、Accessのフィールドデータ型でメモ型に相当するものです。
  • オブジェクトブラウザでは、フィールドデータ型の中からadLongVarWCharを選択することでメモ型に設定することができます。
回答を見る
  • ベストアンサー

データ型をメモ型にして既存テーブルにフィールドを追加したい(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○○」にすればいいのでしょう? (文字数が多いためテキスト型では収まりません) オブジェクトブラウザで見ても、多すぎてどれなのかわかりません。 ご教授よろしくお願い致します。

noname#150256
noname#150256

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

数年前Excelでmdbを作って遊んだ事がありますが、すっかり忘れてしまいました。ご参考まで。 http://www.nurs.or.jp/~ppoy/access/access/acEt019.html http://msdn.microsoft.com/ja-jp/library/cc389790.aspx

noname#150256
質問者

お礼

大変参考になりました。ご回答ありがとうございます。

関連するQ&A

  • ADOXによるテーブルのコピー

    Access2000を勉強中のものです。 ADOXによってテーブルをコピーしたいのですが、 下記のようなソースを書いてもうまくいきません。 どのようにすればコピーできるのでしょうか? -------------------------------------------- Function テーブルのコピー() Dim cl As New ADOX.Catalog Dim tb As New ADOX.Table Dim sb As New ADOX.Table cl.ActiveConnection = CurrentProject.Connection Set tb = cl.Tables!コピー元のテーブル Set sb = tb 'コピーしたテーブルの名前を設定 sb.Name = "新しいテーブル" 'テーブルを追加する 'cl.Tables.Append sb MsgBox (sb.Name & "を作成しました。") End Function

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

  • ハイパーリンク型を指定することは可能ですか?

    VBAでテーブル(フィールド)を作る際にハイパーリンク型を指定することは可能ですか? Sub test() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "テーブル" tbl.Columns.Append "URL", adVarWChar cat.Tables.Append tbl Set cat = Nothing End Sub アクセスでこんな感じで作ってるのですが adVarWCharの部分をハイパーリンク型にしたいです。 しかし http://www.accessclub.jp/ado/adox/06.html を見てるとデータ型にハイパーリンク型が見当たらないのですが、不可能という事でしょうか?

  • テーブルのすべてのフィールド名を配列として取り出せ

    テーブルのすべてのフィールド名を配列として取り出せるように変数に格納したいのですが 詰みました。 Private Sub test() Dim cat As ADOX.Catalog Dim clm As ADOX.Column Dim tmp As Variant Dim myTable As String myTable = "T_Table" Set cat = CreateObject("ADOX.Catalog") cat.ActiveConnection = CurrentProject.Connection For Each clm In cat.Tables(myTable).columns tmp = Array("フィールド1", "フィールド2") Next clm End Sub のようなことがしたいのですが、clm.nameでせっかく名前が取得できるのに、 どうやったらtmpに格納できるのでしょうか? Arrayを使わない方法はあるのでしょうか?

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

  • access 最終閲覧レコードを開く

    フォームを閉じるときに表示していたレコードを次回開くときにも表示させたいのです。 データにはIDをふっているのですが、レコードの番号と同じではなく、フォームを閉じるときにIDを記録するテーブルを作成して次回オープン時に呼び出そうとしたのですが、GoToRecord を使うのではうまくいかないでしょうか? フォームを閉じるときは下のように作りました Private Sub Form_Close() Dim cat As ADOX.Catalog Dim tb As ADOX.Table Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tb = New ADOX.Table tb.Name = "T最終閲覧" tb.Columns.Append "ID", adInteger cat.Tables.Append tb Set cat = Nothing ここに     .AddNew ![ID] = [Forms]![フォーム名]![ID] .Update としています。 このデータをオープン時に生かすことができず、詰まっています レコード番号自体を記録することがきるかもわからず、どんどん後回しになってしまって何時まで経っても完成しません。 何かヒントでも構いませんのでご教授いただければと思います。

  • アクセスのインポートエラー 続き

    先ほど、質問しました続きです。以下のVBAを作成しましたが、うまくいきません。助言お願いします。 Option Compare Database Private Sub 実行_Click() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim strName As String Dim i As Long strName = "エラー" i = 0 Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection For Each tbl In cat.Tables If tbl.Name = strName Then i = 1 If MsgBox(tbl.Name & "テーブルを削除しますか?", _ vbYesNo) = vbYes Then cat.Tables.Delete tbl.Name MsgBox tbl.Name & "テーブルの削除を完了しました。" End If Next tbl If i <> 1 Then MsgBox strName & "テーブルが存在しません。" Set cat = Nothing 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

  • Excel VBA SQL ADOフィールド名変更

    「年度」、「月」、「ID」、「名前」の4つフィールドからなる 「テスト」というテーブルの「年度」を「年」に書き換えたいのですが、 「年度」フィールドの値を年度から年には書き換えることができたのですが、 フィールド名の「年度」を「年」に書き換えるには、 ADOで、EXCELでは、どのように記述すればよいのでしょうか。 以下は、ACCESSのVBAの例を参考にして記述したのですが Excel2010のVBAでは「CurrentProject」のところでエラーに なってしまいます。 strSQL = ・・・のような形式で記述して adoCON.Execute (strSQL)でフィールド名を 変更することはできないのでしょうか。 よろしくお願いします。 --- Excel VBA ----------------------------------- Dim adoCON As New ADODB.Connection Dim strSQL As String Dim odbdDB As Variant odbdDB = "C:\TEST\Database.accdb" adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & odbdDB & "" adoCON.Open '「年度」フィールドの値の年度を年に変換する strSQL = "UPDATE テスト SET 年度 = 年度+1 WHERE VAL(月) < " & 4 & ";" adoCON.Execute (strSQL) adoCON.Close Set adoCON = Nothing 'フィールド名の年度を年に変更する Dim cat As ADOX.Catalog Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection 'エラー発生 cat.Tables("テスト").Columns("年度").Name = "年" Set cat = Nothing -----------------------------------------------

  • Emptyだとなんでダメなのでしょうか?

    Sub Sample() Dim cat As ADOX.Catalog Dim clm As ADOX.Column Dim cn As New ADODB.Connection Dim myTable As String Dim SQL As String myTable = "T_会社名" Set cat = CreateObject("ADOX.Catalog") Set cn = CurrentProject.Connection cat.ActiveConnection = cn For Each clm In cat.Tables(myTable).Columns cn.Execute "UPDATE T_会社名 SET T_会社名.店名 = Replace([T_会社名]![店名],Chr(10),Empty) WHERE (T_会社名.店名=Chr(10));" Next clm cn.Close: Set cn = Nothing End Sub 上記の様に、Emptyだと 実行時エラー -2147217904 1つ以上の必要なパラメーターの値が設定されていません。 と言うエラーになります。 しかし、Emptyを""""にすると問題なく実行できます。

専門家に質問してみよう