VB5.0でACCESSのデータを扱っています。
フォームにリストボックス(list1)とテキストボックス(text1)があります。
テキストボックスに入力した文字(変数 KANA を使います。)を含むレコードをリストボックスに表示させたいのですが
エラー「パラメータが少なすぎます。1を指定してください」とでます。
ACCESSのデザインはこんな感じです
テーブル:【顧客TBL】
-------------------------
フィールド名 データ型
-------------------------
ID 数値型 (主キー)
かな テキスト型
住所 テキスト型
-------------------------
テーブル:【契約TBL】
----------------------
フィールド名 データ型
----------------------
ID 数値型 (主キー)
保険種類 テキスト型
証券番号 テキスト型
----------------------
コードはこんな感じです
Private Sub Command1_Click()
List1.Clear
Dim mdb As Database
Dim SQL1 As String
Dim mrs1 As Recordset
Dim KANA As String
KANA = Text2.Text
'データベースをオープン
Set mdb = OpenDatabase("顧客契約2.mdb")
'選択クエリーを取得
SQL1 = "select 顧客TBL.顧客ID,顧客TBL.顧客かな,契約TBL.保険種類,契約TBL.証券番号 from 顧客TBL left join 契約TBL on 顧客TBL.顧客ID = 契約TBL.顧客ID where 顧客ID.顧客かな like ""%" & KANA & "%"" "
'条件に一致するレコードを取得
Set mrs1 = mdb.OpenRecordset(SQL1, dbOpenDynaset)
↑
「パラメータが少な すぎます。1を指定してください」
のエラーがでて、mrs1 = nothing
If Text2.Text <> "" Then
List1.Clear
List1.AddItem Left(mrs1.Fields("顧客ID") & Space(3), 3) + vbTab + Left(mrs1.Fields("顧客かな") & Space(10), 10) + vbTab + Left(mrs1.Fields("保険種類") & Space(10), 10) + vbTab + mrs1.Fields("証券番号")
'オブジェクトを閉じる
mrs1.Close
mdb.Close
'オブジェクトを解放
Set mrs1 = Nothing
Set mdb = Nothing
色々試しましたがエラーの意味がよくわかりません。
わかる方どうぞよろしくお願いします。。
> 「パラメータが少な すぎます。1を指定してください」
このエラーが出る時は、SQL 中に「スペルミス」がある可能性が高いですよ。
つまり、
・SQL 中に、列名や関数名として認識できない、未定義のキーワードが 1 つ含まれていた。
・Jet はそれを、SQL 中の変数(パラメータ)であると解釈した。
・しかし、QueryDef を経由せずに Recordset を開いているため、その Parameter は処理されていない。
・結果として、エラーメッセージが表示される。
のような状況である、ということです。
で。もしかしたら、
Dim Q As DAO.QueryDef
Set Q = DB.CreateQueryDef("", SQL)
のようにして無名クエリを作り、それを
Dim P As DAO.Parameter
For Each P In Q.Parameters
Debug.Print P.Name
Next
のようにして Parameter を列挙することで、その
「変数とみなされてしまった未定義キーワード」を
調べることができるかも。
あぁ、これかな。
> where 顧客ID.顧客かな like ""%" & KANA & "%""
FROM 句にあるテーブルは、[顧客TBL] と [契約TBL] だけなのに、
WHERE 句では、[顧客ID] というテーブルを参照しようとしていますね。
魔界の仮面弁士様
毎度ありがとうございます。
顧客IDのところを顧客TBLと書かないといけませんでした。
ご指摘通りでした。
つまらないミスで申し訳ないです。
お手数かけてすみません。
ありがとうございました!!
ツイート | ![]() |