投稿日 | : 2006/06/30(Fri) 15:06 |
投稿者 | : かずちん |
Eメール | : |
URL | : |
タイトル | : Re^5: 条件が合わなければクリアーにするには |
> > > strSQL = "SELECT 客TBL.客ID, 客TBL.客かな, 取引TBL.種類, 取引TBL.番号
FROM 客TBL
> > _
> > > & INNER JOIN取引TBL ON 客TBL.客ID = 取引TBL.客ID "
> > >
> > > If txtx.Text <> "" Then
> > > strSQL = strSQL & " where 客TBL.客ID = " & txtx.Text
> > >
> > > End If
> > >
> > > If txtn.Text <> "" Then
> > > strSQL = strSQL & " where 客TBL.客かな like '*" &
; txtn.Tex
> > t & "*'"
> > >
> > > End If
> > >
> > > If txtm.Text <> "" Then
> > > strSQL = strSQL & " where 取引TBL.番号 like '*" &
; txtm.Tex
> > t & "*'"
> > >
> > > End If
> >
> > このままだと、条件を記入した分だけWhere句ができてしまいますよね?
> > 二つ以上条件を記入させなくするか、二つ目以降の条件の場合は
> > "where" ではなく"and" で始まるようにする工夫が必要です。
>
> uc0079さんありがとうございます。
> 早速 "and"を使い作成してみました。
>
> strSQL = "SELECT 顧客TBL.顧客ID, 顧客TBL.顧客かな, 契約TBL.保険種類, 契約TBL.証
券番号
FROM 顧
> 客TBL INNER JOIN 契約TBL ON 顧客TBL.顧客ID = 契約TBL.顧客ID "
>
> If txtid.Text <> "" Then
> strSQL = strSQL & " where 顧客TBL.顧客ID = " & txtid.Text
> End If
>
> If txtname.Text <> "" Then
> strSQL = strSQL & " where 顧客TBL.顧客かな like '*" & txtn
ame.Text & "*'"
> Else
> strSQL = strSQL & "and 顧客TBL.顧客かな like '*" & txtname
.Text & "*'"
> End If
>
> If txtnum.Text <> "" Then
> strSQL = strSQL & " where 契約TBL.証券番号 like '*" & txtn
um.Text & "*'"
> Else
> strSQL = strSQL & "and 契約TBL.証券番号 like '*" & txtnum.
Text & "*'"
> End If
>
> 実行してみましたが、実行時エラー:3075 構文エラー:演算子がありません
> というエラーが起き
> Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)が黄色いラインがひかれるのです。
>
> 実は先ほどの"and"を使っていない状況でもこのようなエラーが起きました。
> "and"の使い方がおかしいのかクエリーの設定がおかしいのでしょうか?
上記のSQL文も最初に投稿していただいたSQL文と同様にWHERE文が繰り返されてしまっています。
更に条件が入っていないのに検索条件に加えるのは良くありません。
かなりベタ書きですが、下記のように書けば複数の検索条件が入力されてもWHERE文が重複される事はな
いでしょう。
Dim strSelectSQL as String
Dim strWhereSQL as String
'==========================================
' SELECT文
'==========================================
strSelectSQL = vbNullString
strSelectSQL = "SELECT"
strSelectSQL = strSelectSQL & " 客TBL.客ID"
strSelectSQL = strSelectSQL & ",客TBL.客かな"
strSelectSQL = strSelectSQL & ",取引TBL.種類"
strSelectSQL = strSelectSQL & ",取引TBL.番号"
strSelectSQL = strSelectSQL & " FROM 客TBL"
strSelectSQL = strSelectSQL & "INNER JOIN 取引TBL"
strSelectSQL = strSelectSQL & " ON 客TBL.客ID = 取引TBL.客ID"
'==========================================
' WHERE文
'==========================================
strWhereSQL = vbNullString
If txtx.Text <> vbNullString Then
If strWhereSQL <> vbNullString Then
strWhereSQL = strWhereSQL & " AND 客TBL.客ID = '" & txtx.Text
& "'"
Else
strWhereSQL = strWhereSQL & " 客TBL.客ID = '" & txtx.Text &am
p; "'"
End If
End If
If txtn.Text <> vbNullString Then
If strWhereSQL <> vbNullString Then
strWhereSQL = strWhereSQL & " AND 客TBL.客かな Like '*" & txt
n.Text & "*'"
Else
strWhereSQL = strWhereSQL & " 客TBL.客かな Like '*" & txtn.Te
xt & "*'"
End If
End If
If txtm.Text <> vbNullString Then
If strWhereSQL <> vbNullString Then
strWhereSQL = strWhereSQL & " AND 取引TBL.番号 Like '*" & txt
m.Text & "*'"
Else
strWhereSQL = strWhereSQL & " 取引TBL.番号 Like '*" & txtm.Te
xt & "*'"
End If
End If
If strWhereSQL <> vbNullString Then
strWhereSQL = "Where" & strWhereSQL
End If
strSelectSQL = strSelectSQL & strWhereSQL