Access 2003 VBA で、ADOを使用してSQL Server 2008 R2 Express のテーブルを参照しています。
Seekメソッドを使いたいのですが、Indexプロパティーを設定すると、
「現在のプロバイダーは Index 機能に必要なインターフェイスをサポートしてません。」
のエラーが発生してしまいます。
SQL Server は初心者です。よろしくお願いいたします。
-以下ソースプログラムです-
Dim con As New ADODB.Connection
Dim rst As New ADODB.Recordset
con.Open "Provider=SQLOLEDB;SERVER=xxxxx;DATABASE=xxxxxx;UID=sa;PWD=xxxxxx;" 'SQL-Serverへ接続
rst.Open "testdata", con, adOpenKeyset, adLockOptimistic, adCmdTableDirect
Debug.Print rst.Supports(adSeek), rst.Supports(adIndex)
’----結果、 false false
rst.Index = "index1"
' ---- 「現在のプロバイダーは Index 機能に必要なインターフェイスをサポートしてません。」のメッセージ
rst.Seek 0, adSeekAfter
No.2ベストアンサー
- 回答日時:
> DAO感覚でIndexしてseekすれば高速検索が簡単にできると甘く考えておりました。
そう美味しい話はあまり、ありません。
DAO感覚でやろうするなら、一捻りしてパススルークエリとワークテーブルを使うやり方があります。
最初のクエリ発行の際にある程度の絞り込みが出来るのが前提ですが、ワークテーブル(INDEX作成済み)の全件削除、パススルーのSQL組み立てとこのパススルークエリのデータをワークテーブルに挿入するクエリの実行。
後は、非接続ですが、高速に扱えます。
更新の場合は、別途ADOでもいいので更新・削除・追加クエリを発行することになります。
ただし、非接続なので、他のユーザーが更新していないか、チェックして更新用のSQLを実行することになりますので、ADOのトランザクション機能を使うのがいいかもしれません。
欠点は最初のパススルークエリでのデータ件数が多いと、ネットワーク負荷・DISK負荷が高いのでレスポンスが悪いのと、ワークテーブルの全件削除と挿入を繰り返すのでローカルのACCESSのファイルが肥大化しやすいことです。
No.1
- 回答日時:
SQLOLEDBで作成するRECORDSETがIndex、Seekに対応していないためだと思います。
大震災で被災してしまい、遅れましたが回答ありがとうございます。
つい先ほど、電力復旧いたしました。
DAO感覚でIndexしてseekすれば高速検索が簡単にできると甘く考えておりました。
もう少し勉強します。
それにしても、findメソッドだと激しく遅いです。
万一、SQLOLEDB以外でIndex、Seekに対応するADOプロバイダーをご存知の方がいらっしゃったら教えていただけると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Access(アクセス) アクセス レポートを開いたときにパラメーターの自動入力がしたい 4 2022/11/30 11:21
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) エクセル VBA 条件付き書式 簡略化したい 2 2022/06/02 17:46
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Ruby パイソンエラーについて 1 2022/12/24 14:07
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
ACCESSVBAのseekで複数INDEX検索方法について
Access(アクセス)
-
ACCESS VBAでSeekメソッドの処理記述
Access(アクセス)
-
ACCESSで複数主キーにおけるseek検索
その他(Microsoft Office)
-
-
4
SQLの速度をあげるには・・・
Visual Basic(VBA)
-
5
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
6
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
7
Access200のFilterとFindの違い
その他(データベース)
-
8
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
9
ACCESSのFindコマンドが遅い
その他(プログラミング・Web制作)
-
10
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
11
【ADO】「Execute」を使うときは「Update」は不要?
Visual Basic(VBA)
-
12
結合テーブルクエリPrimaryKey取得について
PowerPoint(パワーポイント)
-
13
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
14
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
15
実行時エラー -2147217900 ADODBでレコードセットオープン時エラー
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessテーブル作成クエリを実...
-
UNIONなどで複数のテーブルから...
-
SI Object Browserのテーブルス...
-
テーブル作成クエリで新テーブ...
-
DBのCreate文スクリプト作成に...
-
Accessにインポートした複数の...
-
レプリケーションしているテー...
-
ユニオンクエリの結果をテーブ...
-
位置を指定してフィールドを追...
-
Access のリレーションシップで...
-
SQLサーバーのテーブルの値...
-
PL/SQLでFROM句に変数を使いたい
-
ロータスアプローチ2001とACCES...
-
クエリのキャンセルがいつにな...
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
SELECT時の行ロックの必要性に...
-
データの二重表示の原因
-
重複するキーから一番古い年月...
-
[ BETWEEN ] vs [ >= AND <= ]
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでテーブルの最終行が...
-
accessテーブル作成クエリを実...
-
クエリのキャンセルがいつにな...
-
ユニオンクエリの結果をテーブ...
-
SI Object Browserのテーブルス...
-
UNIONなどで複数のテーブルから...
-
あるテーブルのデータを追加、...
-
ストアドをまたがるローカル一...
-
Accessにインポートした複数の...
-
コンボボックスで入力したもの...
-
列サイズ変更時、DB停止は必要?
-
SQLサーバーのテーブルの値...
-
Access のリレーションシップで...
-
レプリケーションしているテー...
-
位置を指定してフィールドを追...
-
SQLスクリプトを自動生成する方法
-
テーブル作成クエリで新テーブ...
-
ADOでSeekメッソッドが使えませ...
-
excel テーブル
-
VIEWしか読み取れないユーザの...
おすすめ情報