VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -