VBで文書を検索するシステムを作ったのですが、検索実行のたびに表示されるレコードが増えます。

このQ&Aのポイント
  • VBで作成した文書検索システムで、検索実行のたびに表示されるレコードが増えてしまいます。原因がわかりません。
  • VBで作成した文書検索システムで、検索実行する度にMSHFlexGrid上に表示されるレコードが増えていきます。原因が分かりません。
  • VBで作成した文書検索システムで、検索を実行するたびにレコードが増えてしまいます。原因が分からず困っています。
回答を見る
  • ベストアンサー

VBで文書を検索するシステムを作ったのですが、検索実行のたびに表示されるレコードが増えます。

VBで文書検索を行うシステムを作っているのですが、文字列を変えて検索するたびに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

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

前回の検索結果を削除していないので検索を実行するたびに結果が増えていくのは当然でしょう MSHFlexGrid1.Clearとして一度初期化してから Doループを実行してみましょう Clearメソッドで不具合があるのでしたらRemoveItemを使って不要な結果を削除するようにしてください for n = MSHFlexGrid1.Rows to 1 step -1   MSHFlexGrid1.RemoveItem n next といった具合です

higuchi-yu
質問者

お礼

ご回答ありがとうございました。 おかげさまで問題解決致しました。

関連するQ&A

  • VB6でmdbファイルのレコードを検索かけた場合に時折エラーがでます。

    VB6.0を使って資料のデーターベースを作っているのですが、質問させてください。 アクセスのmdbファイルからデータを読みとり、Command1ボタンを押した際にテキストボックスに入力した任意の文字列が含む資料名のレコードを抽出する機能を持たせています。 また、OPTIONボタンでA~Jまでの資料区分ごとに絞り込みを行う機能(option7を押した場合は全資料区分から検索)も持たせているのですが、テキストボックスに文字列を入力後、OPTIONボタンで資料区分Aを検索⇒Command1ボタン⇒OPTIONボタンで資料区分B⇒Command1ボタン等のように繰り返しての検索をすると時折フリーズして動かなくなります。特に該当レコードが0の後に発生する場合が多いようです 原因が分からず困っています。よろしくお願いします。 Private Sub Command1_Click() Dim kubun As String '文字列型 資料の区分 Dim mojiretsu_k As String '文字列型 検索用文字列 Dim a 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 ' 接続文字列を設定 Adodc1.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Persist Security Info=False;" & _ "Data Source=資料.mdb;" & _ "Mode=Read" ' レコードソースにSQL文を指定 mojiretsu_k = Text1.Text If Option18.Value = True Then '現行文書のみ検索 If Option7.Value = True Then'全文書区分から検索 Adodc1.RecordSource = "Select 資料区分,資料名称,ファイルパス From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 廃止フラグ = False order by ID" Else'指定された資料区分で検索 Adodc1.RecordSource = "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 Adodc1.RecordSource = "Select 資料区分,資料名称,ファイルパス,廃止フラグ From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 廃止フラグ = true order by ID" Else Adodc1.RecordSource = "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 Adodc1.RecordSource = "Select 資料区分,資料名称,ファイルパス,廃止フラグ From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' order by ID" Else Adodc1.RecordSource = "Select 資料区分,資料名称,ファイルパス,廃止フラグ From T_SHIRYO WHERE 資料名称 like'%" & mojiretsu_k & "%' and 資料区分 = """ & kubun & """ order by ID" End If End If ' データを再取得 Adodc1.Refresh With MSHFlexGrid1 .FocusRect = flexFocusNone .HighLight = flexHighlightAlways End With End Sub

  • VB2005でOracleのレコード操作について

    こんばんわ! VB2005よりOracleに接続しレコードをテキストに吐き出す単純なプログラムなのですが、以下のようなテーブルの複数レコードを以下のテキスト結果のように1レコードにしたいのですが。。 <テーブル> ID  名称   明細数 回数 1 あああ   2 3 1 いいい 2 3    ↓ <テキスト結果> ID,明細数,名称1,回数1,名称2,回数2 1,2,あああ,3,いいい,3 <コード> con.ConnectionString = ("User ID=XXX;Password=XXX;Data Source=XXX") con.Open strsql = "select * from XXX" comm = New OracleCommand(StrSql, con) My.Computer.FileSystem.WriteAllText(Path,"",False,enc) dr = comm.ExecuteReader Do Until dr.Read = False strEdit(dr) Loop Function strEdit(Byval Dr As OracleDataReader) As Boolean ・   ・   ・ OutStr &= Dr("ID") if Dr("明細数") >= 2 Then 【ここでADOの「MoveNext」と同等なもの】   End If OutStr &= vbCrLf My.Computer.FileSystem.WriteAllText(Path,OutStr,True,enc) end Function 又は他に良い方法があればご教授いただけませんでしょうか? 宜しくお願い致します。

  • エクセルVBAのオプションボタンがうまくいきません 

    エクセルのVBAでフォームをつくり 3つのオプションボタンを配置し チェックした項目のとき、指定したセルに「レ」の印を書き込ませたいのですが、うまくいきません。 同じフォーム内のテキストボックスやコンボボックスの内容はうまくセルに書き込めるのですが・・・ オプションボタンのグループは設定してあります。 下のように記述したのですが、なぜ思うように動作しないか教えてください。 If オプション(3) = True Then ActiveCell.Value = "レ" ElseIf オプション(1) = True Then Range("H21").Value = "レ" ElseIf オプション(2) = True Then Range("H23").Value = "レ" End If

  • ACCESSのインポートエラーファイルをまとめて削除したい。

    ACCESSでインポートする度エラーファイルが自動で作成されます。 エラーの原因は問題ないので、無視して繰り返しインポートしています。 あとで、まとめてエラーファイルをVBAで削除したいのですが、名称に $ またはブランクがあるからなのか 「DROP TABLE または DROP INDEX ステートメントの構文エラーです。」になります。 下記、記述のVBAでファイル名を他の名前にすると削除できるのですが、自動で割当てられる名称だとエラーがでます。 エラーファイルだけまとめて削除する方法、またはエラーファイル自体を作成しない方法はあるのでしょうか。宜しくお願い致します。 VBA初心者なので宜しくお願いいたします。 <例> 3つのエラーファイル 東京$_インポート エラー 東京$_インポート エラー1 東京$_インポート エラー2 <VBAの一部> strSQL = "SELECT Name" & _ " FROM MSysObjects" & _ " WHERE Type=1 AND Name Like 'インポート%'" rst.Open strSQL, cn, adOpenKeyset, adLockPessimistic Do Until rst.EOF = True strSQL = "DROP TABLE " & rst("Name") cn.Execute strSQL rst.MoveNext Loop

  • モジュールを使ってフラグを作成

    Form1に問題をつくりラジオボタンでチェックできるようにして、Form2にチェックした内容の解答を表示させるプログラムを作りましたが、モジュール内でフラグを立てて、チェックをおこなう方法がわからないので、教えていただけませんか。 Form1 Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click If Option1.Checked = True Then '鼻の長い動物 Form2.Label1.Text = "象です。" ElseIf Option2.Checked = True Then '首の長い動物 Form2.Label1.Text = "きりんです。" ElseIf Option3.Checked = True Then '足の速い動物 Form2.Label1.Text = "チーターです。" Else End If Form2 Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click Form2.Show() Me.Hide()

  • エクセル OptionButton

    FromにOptionButtonを貼り付けてセルの値を呼び出してFromのTextBoxなどに表示させるものを作成して上手くいっていましたが・・・・・ OptionButton1をクリックしたらSheetのセルに”男”と記載される マクロを作成しました。(以下の通りです) If オプション事故 = True Then SH2.Cells(lngNumber, 6) = "男" ElseIf OptionButton1 = True Then SH2.Cells(lngNumber, 6) = "男" ElseIf OptionButton2 = True Then SH2.Cells(lngNumber, 6) = "女" End If 今回困っているのはこれの逆で、セルの値が”男”なら OptionButton1にマークが付くようにしたいのですが こんなことできますか?下記のようにしてみましたができません! If SH1.Cells(lngNumber, 6) = "男" Then OptionButton1.Value = True ElseIf SH1.Cells(lngNumber, 6) = "女" Then OptionButton2.Value = True End If すいません教えて下さい!!

  • VBのコーディングについて

    はじめまして。VBの課題で行き詰ってしまったので、力を貸していただければと思います。 課題は【商品一覧からレコードを取得し、取得したレコードを商品区分で集計し、商品区分・商品件数・売上合計金額を区分別売上表に出力する】 といったものです。 商品一覧には、【商品区分・商品名・売上】の順にデータが入っています。 自分なりに考えた手順は Private Sub コマンド1_Click() Dim INP_DATA As String Dim kubun_01 As String Dim syohin_01 As String Dim uriage_01 As Integer Dim kubun_02 As String Dim syohin_02 As String Dim uriage_02 As Integer  Open "C:INFILE.txt" For Input As #1 Open "C:OUT_FILE.txt" For Output As #2 'ファイルの終了までループ Do Until EOF(1) Line Input #1, INP_DATA '読み込んだレコードの各項目を変数に代入 kubun_01 = Trim(Left(INP_DATA, 10)) syohin_01 = Trim(Mid(INP_DATA, 11, 10)) uriage_01 = Right(INP_DATA, 8) '一行目かどうか If Trim(Mid(INP_DATA, 11, 10)) = syohin_01 kubun_01 = Trim(Left(INP_DATA, 10)) syohin_01 = Trim(Mid(INP_DATA, 11, 15)) uriage_01 = Right(INP_DATA, 8) ElseIf Trim(Mid(INP_DATA, 11, 10)) <> syohin_01 Then kubun_02 = Trim(Left(INP_DATA, 10)) syohin_02 = Trim(Mid(INP_DATA, 11, 10)) uriage_02 = Right(INP_DATA, 8) End If If kubun = kubun_hikaku_2 Then goukei = uriage_hikaku_2 + uriage ElseIf kubun <> kubun_hikaku_2 Then Print #2, kubun; syohin; goukei End If Loop '新たに比較用の変数に格納 Do Until EOF(1) Line Input #1, INP_DATA kubun_01 = Trim(Left(INP_DATA, 10)) syohin_01 = Trim(Mid(INP_DATA, 11, 10)) uriage_01 = Right(INP_DATA, 8) Loop Debug.Print "PROGRAM END" Close #1 Close #2 End Sub となっています。長くなってしまい申し訳ありません。 上記のコーディングですと、欲しいデータが返ってこないので、 どなたかご教授いただけないでしょうか?? よろしくお願いいたします。

  • アクセスで検索したものを直接編集したいのですが・・・

    アクセスで検索したものを直接編集したいのですが・・・。今のところ、検索はできるのですが、編集ができません。読み取り専用ですと表示されます。(VBAの本を参照してここまで頑張ったのですが、記載は下記のとおりです。)よろしくお願いいたします。 Private Sub 検索_Click() Dim wCNN As ADODB.Connection Dim wRec As ADODB.Recordset Dim strSQL As String Set Me.Recordset = Nothing Me.得意先名.ControlSource = "" Me.住所.ControlSource = "" Me.TEL.ControlSource = "" strSQL = "SELECT * FROM 得意先マスタ" If IsNull(Me.検索文字) = False And Len(Me.検索文字) <> 0 Then If IsNull(Me.検索区分) = True Or Len(Me.検索区分) = 0 Then MsgBox "検索区分を選択してください。", vbOKOnly + vbCritical, "" Me.検索区分.SetFocus Exit Sub End If strSQL = strSQL & " WHERE " & Me.検索区分 & " LIKE '%" & Me.検索文字 & "%'" End If strSQL = strSQL & ";" Set wCNN = Application.CurrentProject.Connection Set wRec = New ADODB.Recordset wRec.Open strSQL, wCNN, adOpenStatic, adLockReadOnly If wRec.EOF = False And wRec.BOF = False Then Set Me.Recordset = wRec Me.得意先名.ControlSource = wRec("得意先名").Name Me.住所.ControlSource = wRec("住所").Name Me.TEL.ControlSource = wRec("TEL").Name End If wRec.Close Set wCNN = Nothing Set wRec = Nothing Me.Requery End Sub

  • Access2007 サブフォームのレコードを一括印刷する方法

    お世話になっております。 サブフォームは帳票型になっており、下記で表示されている全レコードのチェックが入ります。 これと平行して、各レコードを印刷したいのですが、カーソルがあるレコードのみがレコードの数だけ印刷されてしまいます。 これを各レコードごとに印刷したいと思います。 Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me.RecordsetClone With rst If .RecordCount > 0 Then .MoveFirst Do Until .EOF .Edit !チェック = True DoCmd.OpenReport "印刷", acNormal, , "コード=" & Me.コード .Update .MoveNext Loop End If .Close End With ご教授いただければ幸いです。よろしくお願いいたします。

  • クリックされたオプションボタンによって、常時複数のテキストBOXの桁数を変えたい

    掲題の件ですが、クリックされたオプションボタンによって常時テキストの桁数を変えたいのですが、 これを複数の組み合わせで行いたいときはどのsub(form_load等)にどのように記述したらよいでしょうか? 例えば、オプションボタンで3桁、4桁、5桁の選択肢があるとすると、 Private Sub Option1_Click(Index As Integer) Me.text1.MaxLength = 3 End Sub Private Sub Option2_Click(Index As Integer) Me.text2.MaxLength = 4 End Sub Private Sub Option3_Click(Index As Integer) Me.text3.MaxLength = 5 End Sub となりますが、この組み合わせを複数作りたい場合、オプションボタンとテキストboxをコントロール配列にして、 Dim i As Integer For i = 0 to 3 If Option1(i).Value = True Then Me.text(i).MaxLength = 3 ElseIf Option2(i).Value = True Then Me.text(i).MaxLength = 4 ElseIf Option3(i).Value = True Then Me.text(i).MaxLength = 5 End If Next このような形になると思いますが、これですとForm_Loadに貼り付けても常時桁を変えることができません。 どのsubにどのようにコードを記述したらよいか教えていただけたら幸いです。 よろしくお願い致します。

専門家に質問してみよう