• ベストアンサー
  • 困ってます

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数295
  • ありがとう数2

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

  • ベストアンサー
  • 回答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件の時に回避できるようにしてはどうでしょうか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連する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

  • 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 となっています。長くなってしまい申し訳ありません。 上記のコーディングですと、欲しいデータが返ってこないので、 どなたかご教授いただけないでしょうか?? よろしくお願いいたします。

  • VB 繰り返し(ループ)について教えてください

    私は最近プログラムを書く仕事に就いたのですがまったくの初心者でなかなか課題が先に進めずに困っています。もしわかる方いましたら是非教えていただけるとうれしいです。 今わからないのが、繰り返し(ループ)です。 何とか一桁目は完成しましたがこの先がどうやってもうまくいきません。左にTextBox、真ん中にCommand、左にLabelがあり左に整数を入れて真ん中を押すと左に漢数字で表示されるという形で5桁まで出来るようにしたいのです。 今出来ているものをとりあえずはりますので是非教えてください。 Option Explicit Private Sub Command1_Click() Dim a As Integer Dim b As String a = Val(Text1.Text) If a = 0 Then b = "0" ElseIf a = 1 Then b = "一" ElseIf a = 2 Then b = "二" ElseIf a = 3 Then b = "三" ElseIf a = 4 Then b = "四" ElseIf a = 5 Then b = "五" ElseIf a = 6 Then b = "六" ElseIf a = 7 Then b = "七" ElseIf a = 8 Then b = "八" Else b = "九" Label1.Caption = b End Sub

  • もしも新規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"にしても同じです。 どこかおかしい部分があるのでしょうか?

  • VB6.0 で

    現在、VB6.0でイルミネーションもどきのプログラムを作成しています。 8つのランプコントロールがコントロール配列されていて、初めは全て消灯している状態から、コマンドボタンを1回クリックすると一番右側の一つが点灯し、またクリックすると右のランプが消えて、左隣のランプが点灯します。 これを繰り返していって、一番左のランプが点灯したら再び一番右のランプが点灯するという下の図の様な感じです。 7 6 5 4 3 2 1 0 ←オブジェクトCWBtnのIndex番号です。 ○○○○○○○● ↓ ○○○○○○●○ ↓ ○○○○○●○○ ↓ ○○○○●○○○ ↓ ○○○●○○○○ ↓ ○○●○○○○○ ↓ ○●○○○○○○ ↓ ●○○○○○○○ ↓ ○○○○○○○● この繰返しです。 現在のコードです。当方、VBを勉強し始めて未熟ですので、まずどういった変数を用意するか、データ型はどうしようなどで深く悩んでしまうレベルです。突っ込みどころ満載でしょうが、ご容赦下さい。。。 Private Sub cmd2_Click() '変数の宣言 Dim Index As Integer   For Index = 0 To 7 Step 1 If CWBtn(Index).Value = False Then Select Case Index Case 0 CWBtn(0).Value = True Case 1 CWBtn(1).Value = True Case 2 CWBtn(2).Value = True Case 3 CWBtn(3).Value = True Case 4 CWBtn(4).Value = True Case 5 CWBtn(5).Value = True Case 6 CWBtn(6).Value = True Case 7 CWBtn(7).Value = True End Select Exit For ElseIf CWBtn(Index).Value = True Then Select Case Index Case 0 CWBtn(0).Value = False Case 1 CWBtn(1).Value = False Case 2 CWBtn(2).Value = False Case 3 CWBtn(3).Value = False Case 4 CWBtn(4).Value = False Case 5 CWBtn(5).Value = False Case 6 CWBtn(6).Value = False Case 7 CWBtn(7).Value = False End Select End If Next Index 実行は出来るのですが、うまくいきません。 どなたか教えて下さい。宜しくお願いします。

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

    お世話になります。 先般、お教え頂きました別のダブルクリックイベントプロシージャと 下記の当日の日付を入力するという処理を同じシート上で行いたいのですが、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 よろしくお願いします。

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

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

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