Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1048 / 2272 ツリー ←次へ | 前へ→

【8998】SQLサーバーを利用した検索について ニッキ 07/1/15(月) 16:22 質問[未読]
【9011】Re:SQLサーバーを利用した検索について kohji 07/1/19(金) 9:50 回答[未読]
【9016】Re:SQLサーバーを利用した検索について ニッキ 07/1/19(金) 14:19 質問[未読]
【9017】Re:SQLサーバーを利用した検索について kohji 07/1/19(金) 14:52 回答[未読]
【9018】Re:SQLサーバーを利用した検索について ニッキ 07/1/19(金) 15:52 質問[未読]
【9019】Re:SQLサーバーを利用した検索について kohji 07/1/19(金) 15:56 発言[未読]

【8998】SQLサーバーを利用した検索について
質問  ニッキ  - 07/1/15(月) 16:22 -

引用なし
パスワード
   データ(40万件)をテーブルに置き、クエリーの抽出条件で

  A Like [Forms]![抽出]![a] & "*"
  B Like [Forms]![抽出]![b] & "*"
  C Like [Forms]![抽出]![c] & "*"  とした場合、

フォーム上で、

  [a]のみを入力した場合、
  [b]のみを入力した場合、
  [c]のみを入力した場合、どれも抽出時間は5〜7秒程ですが

データをSQLサーバー(ODBC)に置き換えた場合、
上記と同一条件で抽出すると
  [a]のみを入力した場合、0.5秒と早くなったのに対し
  [b]と[c]のみを入力した場合、どれも抽出時間は10秒以上と延びてしまいます。

また、クエリーの Aの条件を削除すると、今度は 
  [b]のみを入力した場合、0.5秒と早くなり
  [c]のみを入力した場合、10秒以上となります。

この後、クエリーの Aの条件を追加しても、元には戻らず
  [b]のみを入力した場合、0.5秒と早くなり
  [a]と[c]のみを入力した場合、10秒以上となります。

尚、フォームを使わず、クエリーの条件に直接入力した場合は、
すべて抽出時間は早く問題はありません。

原因が解らず、解決の方法が見つかりません。
ご指導を宜しくお願い致します。

【9011】Re:SQLサーバーを利用した検索について
回答  kohji  - 07/1/19(金) 9:50 -

引用なし
パスワード
   ニッキさん こんにちは

>尚、フォームを使わず、クエリーの条件に直接入力した場合は、
>すべて抽出時間は早く問題はありません。

フォームのフィルタ機能を使用しての抽出時間は遅いが
クエリに直接入力しての抽出時間は早い…
という理解でよろしいでしょうか?

であれば
コード上でクエリを直接書き換えて
フォームではフィルタ機能を使用せずに表示のみ行えば
もしかしたら早くなるかもしれませんよ

あくまでも 推測ですが…

【9016】Re:SQLサーバーを利用した検索について
質問  ニッキ  - 07/1/19(金) 14:19 -

引用なし
パスワード
   kohji さん 回答ありがとうございます。


フォームのフィルタ機能を使用しているわけではありません。
クエリーの抽出条件に
   Like [Forms]![抽出]![a] & "*"
と入れた場合と、
   Like "abc*"
と入れた場合で抽出時間が変わってしまうと言うことです。

【9017】Re:SQLサーバーを利用した検索について
回答  kohji  - 07/1/19(金) 14:52 -

引用なし
パスワード
   でしたら
クエリを直接コードから書き換えて(Like "abc*"の形)
フォーム上では表示のみにすれば 早くなると思うのですが…

コードは 以下のような感じでいいと思います

Function Query_Update()
  Dim wQuery As String, wSQL As String

  Dim oCat As New ADOX.Catalog
  Dim oCmd As ADODB.Command
  Dim oViw As ADOX.View

  '作成するクエリ名
  wQuery = "Q_xxxx"

  '作成するクエリのSQL文
  wSQL = "SELECT * FROM [xxxx] WHERE [Field] Like 'xxxx*';"

  With oCat
    .ActiveConnection = CurrentProject.Connection
    .Views.Refresh
  End With

  DoEvents
  With oCat
    For Each oViw In .Views
      If oViw.Name = wQuery Then
        .Views.Delete wQuery
        Exit For
      End If
    Next
  End With

  DoEvents
  Set oCmd = New ADODB.Command

  oCmd.CommandText = wSQL
  oCat.Views.Append wQuery, oCmd

  On Error Resume Next
  Set oCmd = Nothing
  Set oCat = Nothing
  On Error GoTo 0
End Function

ただし
参照設定[Microsoft ADO Ext 2.7 DLL And Security]を有効にしてください

参考になれば幸いです

【9018】Re:SQLサーバーを利用した検索について
質問  ニッキ  - 07/1/19(金) 15:52 -

引用なし
パスワード
   kohji さん ありがとうございます。


早速、処理してみようかと思いますが、抽出結果を別のフォームで表示するように
なっております。

何か注意する所はありますでしょうか?
宜しくお願い致します。

【9019】Re:SQLサーバーを利用した検索について
発言  kohji  - 07/1/19(金) 15:56 -

引用なし
パスワード
   クエリの書き換えさえできれば
問題ないと思いますよ

注意する箇所は特にないように思います

また 結果を聞かせてください

1048 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free