[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/06/30(Fri) 09:30
投稿者名:まっち
Eメール:
URL :
タイトル:
条件が合わなければクリアーにするには
お世話になっております。
VB6とaccessを連結させてVB6からデータを抽出している状況です。
現在、いくつか条件をtextboxに記入して検索ボタンを押せばlistboxに条件のあった検索結果が表示するよう
にしていますが、
これを条件が合わない場合、検索ボタンをクリック時、listboxをクリアー(白紙に)する方法はあるのでし
ょうか?
できればエラーを表示するよりクリアーになったほうがいいです。

よろしくお願いいたします。

投稿時間:2006/06/30(Fri) 09:34
投稿者名:
Eメール:
URL :
タイトル:
Re: 条件が合わなければクリアーにするには
> これを条件が合わない場合、検索ボタンをクリック時、listboxをクリアー(白紙に)する方法はあ

のでし
> ょうか?
なにやら分かりませんが、リストボックスのclearメソッドでリストボックスの要素をすべてクリアする
ことができます

投稿時間:2006/06/30(Fri) 10:48
投稿者名:まっち
Eメール:
URL :
タイトル:
Re^2: 条件が合わなければクリアーにするには
もさんご回答ありがとうございます。


clearメソッドの使用はわかったのですが、すみませんどのように設定をすればよいか悩んでおります。

ちなみに現在のプロシージャは
    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.Text & "*'"
    
    End If
    
    If txtm.Text <> "" Then
            strSQL = strSQL & " where 取引TBL.番号 like '*" & txtm.Text & "*'"
            
    End If

で1つずつの検索はできます。(listboxに表示が出ます)

これを2つ同時検索(番号とかな)にするとクエリーえらーになってしますのです。
すべてにclearを設定しなければいけないのでしょうか?

投稿時間:2006/06/30(Fri) 13:48
投稿者名:uc0079
Eメール:
URL :
タイトル:
Re^3: 条件が合わなければクリアーにするには
>     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" で始まるようにする工夫が必要です。

投稿時間:2006/06/30(Fri) 14:50
投稿者名:まっち
Eメール:
URL :
タイトル:
Re^4: 条件が合わなければクリアーにするには
> >     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 '*" & txtname.Text & "*'"
            Else
            strSQL = strSQL & "and 顧客TBL.顧客かな like '*" & txtname.Text & "*'"
    End If

    If txtnum.Text <> "" Then
            strSQL = strSQL & " where 契約TBL.証券番号 like '*" & txtnum.Text & "*'"
            Else
            strSQL = strSQL & "and 契約TBL.証券番号 like '*" & txtnum.Text & "*'"
    End If

実行してみましたが、実行時エラー:3075 構文エラー:演算子がありません
というエラーが起き
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)が黄色いラインがひかれるのです。

実は先ほどの"and"を使っていない状況でもこのようなエラーが起きました。
"and"の使い方がおかしいのかクエリーの設定がおかしいのでしょうか?

投稿時間: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

投稿時間:2006/06/30(Fri) 16:23
投稿者名:まっち
Eメール:
URL :
タイトル:
Re^6: 条件が合わなければクリアーにするには
> > > >     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

かずちんさんご面倒をおかけしました。
一度このような方法で作成していきます。

ありがとうございました。