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

このQ&Aのポイント
  • VB6.0を使って資料のデーターベースを作っている際に、Command1ボタンを押した時にテキストボックスに入力した任意の文字列が含まれるレコードを抽出する機能を持たせています。また、資料区分ごとに絞り込みを行う機能も持たせているのですが、繰り返し検索すると時折フリーズして動かなくなってしまいます。原因が分からず困っています。
  • VB6でmdbファイルのレコードを検索かけた場合に時折エラーが発生します。VB6.0を使ってデータベースを作成し、Command1ボタンを押した際に任意の文字列が含まれるレコードを抽出する機能を持っています。また、資料区分ごとに絞り込みをする機能もありますが、繰り返し検索を行うとフリーズして動かなくなることがあります。原因がわからず困っています。
  • VB6でmdbファイルのレコードを検索かけた場合に時折エラーが発生します。VB6.0を使ってデータベースを作成し、Command1ボタンを押した際に任意の文字列が含まれるレコードを抽出する機能を持っています。また、資料区分ごとに絞り込みをする機能もありますが、繰り返し検索を行うとフリーズして動かなくなることがあります。原因がわからず困っています。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
回答No.1

ADODC1が何なのかよくわからないのでサンプルを書いておきます。 ■ADOの接続 Dim oConn As ADODB.Connection Dim oRec As ADODB.Recordset Set oConn = New ADODB.Connection '________mdb________にmdbまでのフルパスを書く oConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=________mdb________") '________SQL________に作成したSQL文 Set oRec = oConn.Execute("________SQL________") While Not oRec.EOF '________COL________にmdbのカラム名を書く Debug.Print oRec.Fields("________COL________").Value oRec.MoveNext Wend oRec.Close Set oRec = Nothing oConn.Close Set oConn = Nothing エラーになる原因は0件の場合に With MSHFlexGrid1 .FocusRect = flexFocusNone .HighLight = flexHighlightAlways End With で何をどこに入れるか判断が付かないのかなって思われます。 0件の時に回避できるようにしてはどうでしょうか?

higuchi-yu
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 ご回答ありがとうございました。

関連するQ&A

  • 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

  • 複数の条件を満たすレコード検索教えてください!

    複数の条件を満たすレコード検索教えてください! 現在フォームのコマンドボタンでサブフォームの絞込みを下記のコードで行っています・・・が、 ”顧客コード”と”顧客名”を同時に入力して検索すると”顧客コード”を無視して”顧客名”だけを 検索してしまいます、複数の条件を全て満たすにはどうすれば良いか教えてください。 よろしくお願いいたします。 Private Sub cmd検索_Click() If Not IsNull(txt顧客コード) Then S顧客.Form.Filter = "顧客コード like '" & txt顧客コード.Value & "'" S顧客.Form.FilterOn = True End If If Not IsNull(cmb顧客区分) Then S顧客.Form.Filter = "顧客区分 like '" & cmb顧客区分.Value & "'" S顧客.Form.FilterOn = True End If If Not IsNull(txt顧客名) Then S顧客.Form.Filter = "顧客名カナ like '*" & txt顧客名.Value & "*'" S顧客.Form.FilterOn = True End If

  • エクセル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

  • エクセル 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 すいません教えて下さい!!

  • もしも新規Excelファイルを開いてる場合は閉じる

    Excel2003です・ ユーザーが新規Excelファイル(book1)かテスト用ファイルを開いている場合は閉じる処理を考えております。 Option Explicit Dim ws As Workbook, flag As Boolean Private Sub Workbook_Open() For Each ws In Workbooks If ws.Name = "Book1" Then flag = True Next ws If flag = True Then Workbooks("Book1.xls").Close   Else   End IF For Each ws In Workbooks If ws.Name = "テスト用.xls" Then flag = True Next ws If flag = True Then Workbooks("テスト用.xls").Close   Else   End IF End Sub このコードだとBook1を開いているのに、Trueで拾ってくれません。 ws.Name = "Book1.xls"にしても同じです。 どこかおかしい部分があるのでしょうか?

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

    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()

  • 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 Form_ApplyFilter If ApplyType = acShowAllRecords Then フィルタオプション = 1 ElseIf Filter <> “都道府県 = ‘東京都’” Then フィルタオプション = Null End if End Sub アクセスVBAの次の2行について教えてください。 よろしくお願いします。 ApplyType = acShowAllRecords ElseIf Filter <> “都道府県 = ‘東京都’” Then

  • フラグから区分値に置換するにはどうすればいいですか

    フラグから区分値に置換するにはどうすればいいですか。 以下はその例文です。 フラグでは、基本的に立てたり、倒したりするもので、 yesかnoの2通りしか分岐をさせることができません。 つまり、else ifが使えないということです。 一方区分値は複数の分岐をさせることができます。 なので、これにはelse ifが使えます。 それはいかに記述があります。 https://www.gixo.jp/blog/382/ そこで、以下の部分を区分値に置換するにはどのようにすればいいですか。 フラグから区分値に置換した事例を紹介してくれているサイトは皆無です。 以下は、そのコードです。 function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) var weekdayFlag = true; if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; return weekdayFlag; }

  • エクセル ダブルクリックで処理日の入力

    お世話になります。 先般、お教え頂きました別のダブルクリックイベントプロシージャと 下記の当日の日付を入力するという処理を同じシート上で行いたいのですが、VBエディターにどのように記述したら良いかわかりません。 当方、かなりの初心者です。 よろしくご教授くださいませ。 【新しく加えたい処理】 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("b4:C999")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub 【もともと使っている処理】 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("h1:h999")) Is Nothing Then With Target If .Value = "" Then .Value = "有" ElseIf .Value = "有" Then .Value = "無" ElseIf .Value = "無" Then .Value = "" End If End With ElseIf Not Intersect(Target, Range("i1:i999")) Is Nothing Then With Target If .Value = "" Then .Value = "要" ElseIf .Value = "要" Then .Value = "不要" ElseIf .Value = "不要" Then .Value = "" End If End With End If End Sub よろしくお願いします。

専門家に質問してみよう