Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


17 / 2272 ツリー ←次へ | 前へ→

【13290】SQLの規定値設定時に実行時エラー3293がでる たらっち 19/6/19(水) 14:52 質問[未読]
【13291】Re:SQLの規定値設定時に実行時エラー3293が... よろずや 19/6/19(水) 21:52 回答[未読]
【13292】Re:SQLの規定値設定時に実行時エラー3293が... よろずや 19/6/19(水) 22:42 回答[未読]
【13293】Re:SQLの規定値設定時に実行時エラー3293が... たらっち 19/6/21(金) 18:56 質問[未読]

【13290】SQLの規定値設定時に実行時エラー3293が...
質問  たらっち  - 19/6/19(水) 14:52 -

引用なし
パスワード
   テーブル作成クエリで作成したテーブル(フィールド名に、現在月マイナス5ヶ月〜プラス5ヶ月がついています(現在が2019年6月だとすると[2019/01/01]〜[2019/11/01])。
テーブル作成クエリだと、全てのフィールドが作成されない場合があるので、あらかじめ全てのフィールド(11ヶ月分のフィールド)を整数型(integer)で作成しておきます。

strYMDFld(i)は配列です。上の例だとstrYMDFld(0)="2019/01/01"、strYMDFld(10)="2019/11/01"です。
DoCmd.RunSQL "ALTER TABLE [T_106100] ALTER COLUMN [" & strYMDFld(i) & "] INTEGER DEFAULT 0;"
というところでエラー3293「ALTER TABLE ステートメントの構文エラー」がでます。
エラーの原因が特定できず困っています。
分かる方、お力添えお願いいたします。

【13291】Re:SQLの規定値設定時に実行時エラー329...
回答  よろずや  - 19/6/19(水) 21:52 -

引用なし
パスワード
   ▼たらっち さん:
>テーブル作成クエリだと、全てのフィールドが作成されない場合があるので、あらかじめ全てのフィールド(11ヶ月分のフィールド)を整数型(integer)で作成しておきます。
>
>strYMDFld(i)は配列です。上の例だとstrYMDFld(0)="2019/01/01"、strYMDFld(10)="2019/11/01"です。

DoCmd.RunSQL "ALTER TABLE [T_106100] ADD COLUMN [" & strYMDFld(i) & "] INTEGER DEFAULT 0;"

ではいかがでしょう?

【13292】Re:SQLの規定値設定時に実行時エラー329...
回答  よろずや  - 19/6/19(水) 22:42 -

引用なし
パスワード
   DEFAULT ステートメントは、Access OLE DB プロバイダーおよび ADO 経由でのみ実行できます。 Access の [SQL ビュー] ユーザー インターフェイスからこのステートメントを使用すると、エラー メッセージが返されます。

ht tps://docs.microsoft.com/ja-jp/office/vba/access/concepts/structured-query-language/modify-a-table-s-design-using-access-sql

だそうです。

【13293】Re:SQLの規定値設定時に実行時エラー329...
質問  たらっち  - 19/6/21(金) 18:56 -

引用なし
パスワード
   よろずや様

ご回答ありがとうございます。
以下のようにADOを使用してSQLを実行したら、
cn.Execute strSQLのところで(SQL実行時)
「80004005 テーブル レベル入力規則の 構文エラー。」
とエラーがでました。
strSQL内の"DEFAULT 0" を消すとエラーなく実行され、当該フィールドは数値型に変わります。
何か設定が悪いのか、プロバイダが違うのか...。
原因お分かりでしたらお教えください。よろしくお願いいたします。

↓以下ソース一部

Dim strCnString As String
Dim cn As ADODB.Connection
strCnString = "Provider=Microsoft.ACE.OLEDB.12.0;"
strCnString = strCnString & "Data Source=" & Application.CurrentDb.Name

Set cn = CreateObject("ADODB.Connection")
cn.Open (strCnString)

strSQL = "ALTER TABLE [T_106100] ALTER COLUMN [" & strYMDFld(i) & "] INTEGER DEFAULT 0;"
    cn.Execute strSQL
Set cn = Nothing


▼よろずや さん:
>DEFAULT ステートメントは、Access OLE DB プロバイダーおよび ADO 経由でのみ実行できます。 Access の [SQL ビュー] ユーザー インターフェイスからこのステートメントを使用すると、エラー メッセージが返されます。
>
>ht tps://docs.microsoft.com/ja-jp/office/vba/access/concepts/structured-query-language/modify-a-table-s-design-using-access-sql
>
>だそうです。

17 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078185
(SS)C-BOARD v3.8 is Free