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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
アクセスVBAのMe!と[ ]
Access(アクセス)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
DAOでフィールドのデータ型を変更するには?
Visual Basic(VBA)
-
-
4
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
5
VB6.0でコンピュータ名の取得
Visual Basic(VBA)
-
6
VB6.0のIsNull関数に相当するもの
Visual Basic(VBA)
-
7
データベース操作(DAO)でのフィールド追加について
Visual Basic(VBA)
-
8
VB6にてネットワーク上にある共有フォルダを・・・
Visual Basic(VBA)
-
9
VisualBasic6.0のFormat関数でmSecを表示したい
Visual Basic(VBA)
-
10
Visual Basic 6.0 コンボボックスのChangeイベントが発生しません
Visual Basic(VBA)
-
11
ACCESSのテーブルで、昇順並び替え後、連番フィールドを作成したい
Access(アクセス)
-
12
ACCESSで400以上のフィールドがある場合の作成方法‥
その他(データベース)
-
13
VB6.0でテキストボックスの書式設定をしたいのですが、
Visual Basic(VBA)
-
14
実行時エラー '3464': 抽出条件でデータ型が
Access(アクセス)
-
15
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
16
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataTableに特定のフィールドが...
-
日付と文字列を条件としてDLook...
-
Accessのフィールド名に半角括...
-
Access 2010で実行時エラー3061
-
2つ目のレコードの値を取得す...
-
accessでフィールド追加のあと...
-
NULLを含む文字列の結合で...
-
テーブルのデータ型の変更がで...
-
Access Dcount関数で引数が指定...
-
ADOをし使用して、Accessのテー...
-
クリスタルレポートで0件時の表示
-
クリスタルレポートの式フィー...
-
クリスタルレポート(8.5)の書式...
-
ADOでNullフィールドの抽出
-
FTPサーバーから受信したファイ...
-
2次元のdictionary
-
ACCESSのエラー
-
ACCESSで日別集計をする場合
-
INT64対応のprintf系関数はあり...
-
AccessのDAOでフィールド名を配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
DataTableに特定のフィールドが...
-
accessでフィールド追加のあと...
-
INT64対応のprintf系関数はあり...
-
2つ目のレコードの値を取得す...
-
Access 2010で実行時エラー3061
-
日付と文字列を条件としてDLook...
-
AccessのDAOでフィールド名を配...
-
SQLで複数のテーブルと結合した...
-
テーブルのデータ型の変更がで...
-
フィールド名をループの添え字...
-
クリスタルレポート(8.5)の書式...
-
AccessVBAで他テーブルのデータ...
-
アクセスでADO 並べ替えが適用...
-
Accessの画像挿入のVBAコード
-
NULLを含む文字列の結合で...
-
クリスタルレポートで文字列の...
-
ACCESSデータベースにV...
-
ノーツ:ユーザ名から別名を取...
-
Access クエリで変数を参照する...
おすすめ情報