
No.2ベストアンサー
- 回答日時:
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
この回答への補足
追加したフィールドを表示すると「Nullの使い方が不正です。」と出ます。 表示でエラー処理をするといいのですが、SQL記述で""をセット出来ないのでしょうか?
補足日時:2008/11/10 17:15No.7
- 回答日時:
>tbl.Fields("電話番号").???????? = "" とかで""をセットするフィールドプロパティはないのでしょうか?
ないです。
プロパティというのは属性、初期値、規約などの性格を決めるだけで、
現存するレコードの、あるいは追加されたフィールドの値を設定/更新
するものではありません。
つまり、「プロパティを設定/変更する」と、「値を設定/変更する」は
全く違う行為です。プロパティを変更しただけで、値まで変わって
しまうようなシステムでは危なくて誰も使えないでしょう。
回答ありがとうございました。
初期値としてNULLでなく""をセット出来ないかと思って書いたのですがNULLしかセット出来ないのですね。
No.6
- 回答日時:
「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("電話番号").???????? = "" とかで""をセットするフィールドプロパティはないのでしょうか?
No.5
- 回答日時:
>追加したフィールドを表示すると「Nullの使い方が不正です。
」どういう表示のしかたをしたのでしょう?データシートビューなら
開けるはずです。
追加したフィールドの最初の設定値はNullです。空文字列にしたい
場合はフィールド追加後に「UPDATE テーブル SET 新フィール=""」を
実行しなければなりません。
cf.
CurrentDb.Execute "UPDATE テーブル SET 新フィールド=''"
この回答への補足
アドバイスありがとうございます。
>どういう表示のしかたをしたのでしょう?
フォームのテキストボックスに表示しようとしただけです。
CurrentDb.Execute "UPDATE Youken SET 電話番号=''" を追加してみましたがダメでした。
ACCESS で直接テーブルのデザインを見てみたら、空文字列の許可項目が’いいえ’になっていますが関係あるのでしょうか?
No.4
- 回答日時:
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)するとき""をセット出来ないのでしょうか?
No.1
- 回答日時:
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 の所で、「メソッドまたはデータメンバが見つかりません。」とコンパイルエラーが出てしまいます。
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
このQ&Aを見た人はこんなQ&Aも見ています
-
ADOをし使用して、Accessのテーブルの中のフィールドを消したいのですが。
Visual Basic(VBA)
-
希望の位置へフィールドを追加するには?
その他(Microsoft Office)
-
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
-
4
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
5
Accessのデータのインポートで重複分を排除
その他(Microsoft Office)
-
6
[VBA] ADOの Clone と AddNew
その他(プログラミング・Web制作)
-
7
ACCESSでフィールド名の変更(VBA)
Access(アクセス)
-
8
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
9
データベース操作(DAO)でのフィールド追加について
Visual Basic(VBA)
-
10
Accessでフォームへのフィールドの追加方法について
その他(ソフトウェア)
-
11
VB6でユーザー定義型がNothingかどうか調べるには?
Visual Basic(VBA)
-
12
Access サブフォームでの選択行の取得
その他(データベース)
-
13
ACCESS クエリで、グループ化したものをカウントしたい
その他(データベース)
-
14
ACCESS フォームの詳細セクションのコントロールを全て非連結で作ろ
その他(Microsoft Office)
-
15
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
16
Accessで別mdbのテーブルをコピー
その他(プログラミング・Web制作)
-
17
Access vbaで重複レコードの削除がしたい
Visual Basic(VBA)
-
18
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
19
他のMDBのテーブルに追加したい
その他(プログラミング・Web制作)
-
20
Access の VBA 実行中に他の操作をさせたくない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Notesのフォームを動的に・・・
-
AccessのDAOでフィールド名を配...
-
Access 2010で実行時エラー3061
-
C# return文の代入につてい
-
BASICでFIELDやPUTやGETの練習...
-
ACCESSデータベースにV...
-
2つ目のレコードの値を取得す...
-
クリスタルレポート(8.5)の書式...
-
アクセス ADO Null以外のレコ...
-
accessでフィールド追加のあと...
-
AS/400の論理ファイルで年度だ...
-
スプレッドシートのnull表示
-
日付と文字列を条件としてDLook...
-
ADOX フィールドのRequiredプ...
-
rs.filterで、likeの検索ができ...
-
2次元のdictionary
-
VB.NETのOleDbCommandにて文字...
-
ACCESSのフィールドデータの照...
-
ADOでNullフィールドの抽出
-
ExcelVBAからAccessMDB内のテー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでフィールド追加のあと...
-
INT64対応のprintf系関数はあり...
-
Accessのフィールド名に半角括...
-
DataTableに特定のフィールドが...
-
2つ目のレコードの値を取得す...
-
テーブルのデータ型の変更がで...
-
Access 2010で実行時エラー3061
-
クリスタルレポート(8.5)の書式...
-
AccessのDAOでフィールド名を配...
-
ADOでNullフィールドの抽出
-
ACCESSデータベースにV...
-
クリスタルレポートで困ってい...
-
クリスタルレポートで文字列の...
-
Access クエリで変数を参照する...
-
2次元のdictionary
-
SQLでフィールド番号を指定する...
-
AccessVBAで他テーブルのデータ...
-
Access VBA 添付型フィールド
-
ACCESSで日別集計をする場合
-
アクセス ADO Null以外のレコ...
おすすめ情報