2016-09-26 9 views
0

me.filterの内容をクエリの最後に追加しようとしています。フォームフィルタをWhere句に変換します。

?qdf.sqlの結果を受け取り、それを通常のクエリに配置すると、 'パラメータ節の構文エラー'が表示されます。

パラメータpar_car_id Long; SELECT tool_tran.car_id、tool_tran.d008g、tool_tran.d046d INTO tmp_tbl_tool_export FROM tool_tran;

On Error GoTo ErrTrap 

Dim dbs As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim rst As DAO.Recordset 
Dim strNewWHERE As String 
Dim strSQL As String 
Dim i As Integer 

If fnTableExists("tmp_tbl_tool_export") = True Then 
    DoCmd.DeleteObject acTable, "tmp_tbl_tool_export" 
Else 
End If 

Set dbs = CurrentDb 

Set qdf = dbs.QueryDefs("qry_tmp_tbl_tool_export") 

If Me.Filter <> "" Then 
    strNewWHERE = " WHERE ((tool_tran.car_id)=[forms]![frm_select_car_universal]![txt_car_id]) AND " & Me.Filter 
    strNewWHERE = Replace(strNewWHERE, "[", "") 
    strNewWHERE = Replace(strNewWHERE, "]", "") 
    strNewWHERE = Replace(strNewWHERE, "qry_tool_tran_expanded", "tool_tran") 
Else 
End If 

'looks to append converted filter to end of query def 

If strNewWHERE <> "" Then 
    qdf.sql = Left(qdf.sql, InStr(qdf.sql, ";") - 1) & strNewWHERE & ";" 
Else 
    qdf.sql = Left(qdf.sql, InStr(qdf.sql, ";") - 1) 
End If 

qdf.Parameters("par_car_id") = [Forms]![frm_select_car_universal]![txt_car_id] 

qdf.Execute 
qdf.Close 

Set qdf = Nothing 
Set dbs = Nothing 

答えて

1

VBAからSQL実行が開いているフォームについて知らないので、あなたは、フォームからの値そのものを含める必要があります。

strNewWHERE = " WHERE ((tool_tran.car_id)=" & [forms]![frm_select_car_universal]![txt_car_id].Value & ") AND " & Me.Filter 
+0

私はあなたのポストは、物事を改善したが、まだどのように見ますエラーが発生します。あなたが言ったことに基づいてなぜ私が知っていると思います。 – Kaw4Life

+0

私はこのアプローチがうまくいかないことを恐れています。クエリには複数の結合があるため、whereステートメントのフィールド名の前に正しいテーブル名を見つける方法がありません。 – Kaw4Life

+1

あなたは何を意味するのかはっきりしていませんが、フィールド名が一意でない場合は、テーブル名に接頭語を付ける必要があります。これは常にクエリでエイリアスを使用できます。 – Gustav