3

MS Access 2010では、(クエリデザイナを使用して)更新クエリを作成しています。実行時に更新する列の名前を変数として渡したいのですが。

SQLを記述し、VBAでクエリを実行してみました。これは最も簡単な方法のように思えました...しかし、更新を完了するためのSQLはかなり厄介になります。クエリビルダーGUIでこれを実行したいと思います。出来ますか?

これまで、クエリビルダーにフィールド名を入力してみました。

expr1:[field_name]

Accessは「Field_name」の入力を求めますが、これは「Cannotupdate'field_name';fieldnotupdateable」という結果になります。

また、私はこの方法を試しました:

Expr1: "'" & [field_name] & "'"

結果として「'」&[field_name]&"'"は有効な名前ではありません。句読点などを確認してください

以下は、私が構築しようとしているクエリをキャプチャしたスクリーンショットです。

私が提案しているクエリのスクリーンキャップ

4

3 に答える 3

2

UPDATEAccess のデータベース エンジンでは、ステートメント のターゲット フィールドの名前としてパラメーターを使用することはできません。

フィールド名を提供するためにパラメーターの代わりにユーザー定義関数を試してみると、結果は同じになります...喜びはありません。

SQL ステートメントを実行するときに、db エンジンがオブジェクト名を解決しないようです。この制限は、フィールド名だけでなく、テーブル名にも適用されます。IOW、次のクエリは失敗し、「入力テーブルが見つからないか、「テーブル名を入力してください」というクエリが見つかりません」というエラー メッセージが表示されます。

SELECT *
FROM [give me a table name];

それはあなたの状況とまったく同じではありませんが、理由があるのではないかと思います. データベースエンジンは、クエリを計画/実行するときのオブジェクト名の解決に関してあまりにも制限されています。

于 2012-11-27T19:41:21.397 に答える
1

おそらく最良の方法は、SQL を使用してプロンプトを作成し、これらの値を VBA の変数に割り当ててから、その変数値を SQL に追加することです。

したがって、これらの線に沿った何か。Updateクエリを使用していますが、ロジックは同じです

Dim SQL as string
dim **FieldName** as string

SQL = "Select [table]![" & Chr(34) & **FieldName** & Chr(34) & "] from ........" 

SQL 構築のヒントについては、こちらをご覧ください

于 2012-12-16T03:52:10.050 に答える
0

私はこの方法を頻繁に使用します-非常に古い投稿であることは知っていますが、これが誰かの助けになることを願っています-Davidが言ったことに基づいています:

Sub CreateQuery
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
Set dbs = CurrentDb
Set qdf = dbs.CreateQueryDef("NameOfNewQuery")
strSQL = "Select " 'notice the space
strSQL = strSQL & "FROM " 'notice the sapce
strSQL = strSQL & "WHERE;"
qdf.SQL = strSQL
qdf.Close
Set qdf = Nothing
Set dbs = Nothing
End Sub
于 2015-12-04T15:01:03.460 に答える