tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルRecordsetをクリアにしても前回検索したレコードの内容が残ります
記事No12827
投稿日: 2008/07/26(Sat) 09:30
投稿者higuchi
VBで文書検索を行うシステムを作っているのですが、文字列を変えて検索するたびにMSHFlexGrid上に表示されるレコードが増えていきます。レコード数をカウントすると
レコード数自体は同じなのですが、MSHFlexGridコントロール上に前回の検索結果や
前回検索したレコード数と同じ数の空白のレコードが残ります。
原因がわかりません。よろしくお願いします。

Private Sub Command1_Click()

Dim kubun As String '文字列型
Dim mojiretsu_k As String '文字列型
Dim A As Integer '
Dim cn As New ADODB.Connection 'データベースに接続するためのコネクションオブジェクト
Dim cmd As ADODB.Command
Dim rst As ADODB.Recordset
Dim strSQL As String
Dim i As Integer


If Option7 = True Then
ElseIf Option8 = True Then
kubun = "a"
ElseIf Option9 = True Then
kubun = "b"
ElseIf Option10 = True Then
kubun = "c"
ElseIf Option11 = True Then
kubun = "d"
ElseIf Option12 = True Then
kubun = "e"
ElseIf Option13 = True Then
kubun = "f"
ElseIf Option14 = True Then
kubun = "g"
ElseIf Option15 = True Then
kubun = "h"
ElseIf Option16 = True Then
kubun = "i"
ElseIf Option17 = True Then
kubun = "j"
End If




Set cn = New ADODB.Connection
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False;" & _
"Data Source=aaa.mdb;" & _
"Mode=Read"
cn.Open

Set rst = New ADODB.Recordset

' レコードソースにSQL文を指定
mojiretsu_k = Text1.Text

If Option18.Value = True Then '現行文書のみ検索
If Option7.Value = True Then
strSQL = "Select 資料区分,資料名称,ファイルパス From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 廃止フラグ = False order by ID"
Else
strSQL = "Select 資料区分,資料名称,ファイルパス From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 資料区分 = """ & kubun & """ and 廃止フラグ = False order by ID"
End If
ElseIf Option19.Value = True Then '廃止文書のみ検索
If Option7.Value = True Then
strSQL = "Select 資料区分,資料名称,ファイルパス,廃止フラグ From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 廃止フラグ = true order by ID"
Else
strSQL = "Select 資料区分,資料名称,ファイルパス,廃止フラグ From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 資料区分 = """ & kubun & """ and 廃止フラグ = true order by ID"
End If
ElseIf Option20.Value = True Then '現行+廃止文書を検索
If Option7.Value = True Then
strSQL = "Select 資料区分,資料名称,ファイルパス,廃止フラグ From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' order by ID"
Else
strSQL = "Select 資料区分,資料名称,ファイルパス,廃止フラグ From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 資料区分 = """ & kubun & """ order by ID"
End If
End If


rst.Open strSQL, cn, adOpenStatic, adLockOptimistic, adCmdText


i = 0

Do While Not rst.EOF
With Form1.MSHFlexGrid1
.AddItem ""
.TextMatrix(i, 0) = rst.Fields("資料区分")
.TextMatrix(i, 1) = rst.Fields("資料名称")
.TextMatrix(i, 2) = rst.Fields("ファイルパス")

End With
i = i + 1
rst.MoveNext
Loop

rst.Close
cn.Close
Set rst = Nothing
Set cn = Nothing
End Sub

[ツリー表示へ]
タイトルRe: Recordsetをクリアにしても前回検索したレコードの内容が残ります
記事No12830
投稿日: 2008/07/26(Sat) 15:11
投稿者魔界の仮面弁士
> 検索するたびにMSHFlexGrid上に表示されるレコードが増えていきます。
見たところ、データバインドではなく、TextMatrix による手動割り当てなのですよね。
ということは、Recordset が書き換わろうがクリアされようが、MSHFlexGrid が
それに連動するわけでは無いのですから、Recordset の内容に応じて、MSHFlexGrid の
内容を増減/変更するための処理を書かねばなりません。

> 原因がわかりません。よろしくお願いします。
2 回目以降の検索の際に、前回の検索結果を MSHFlexGrid から取り除く処理を
書き漏らしているからでしょう。
検索後に、AddItem と TextMatrix で、Recordset の内容を MSHFlexGrid に
追加するだけでなく、その前に不要な行を除去するコードを記述してみてください。

[ツリー表示へ]
タイトルRe^2: Recordsetをクリアにしても前回検索したレコードの内容が残ります
記事No12832
投稿日: 2008/07/27(Sun) 09:28
投稿者higuchi
ご回答ありがとうございました。
ご指摘のとおり修正して消えるようになりました。




> > 検索するたびにMSHFlexGrid上に表示されるレコードが増えていきます。
> 見たところ、データバインドではなく、TextMatrix による手動割り当てなのですよね。
> ということは、Recordset が書き換わろうがクリアされようが、MSHFlexGrid が
> それに連動するわけでは無いのですから、Recordset の内容に応じて、MSHFlexGrid の
> 内容を増減/変更するための処理を書かねばなりません。
>
> > 原因がわかりません。よろしくお願いします。
> 2 回目以降の検索の際に、前回の検索結果を MSHFlexGrid から取り除く処理を
> 書き漏らしているからでしょう。
> 検索後に、AddItem と TextMatrix で、Recordset の内容を MSHFlexGrid に
> 追加するだけでなく、その前に不要な行を除去するコードを記述してみてください。

[ツリー表示へ]