Access等で使われるJET SQLについての質問です。


Mysqlなどで利用できる limit句が、JET SQLでは利用できないと下記ページに書いており、困っております。

http://office.microsoft.com/ja-jp/access/HA012314361041.aspx

何かlimit句の変わりに使えるようなものはあるでしょうか?


※変わりにTOPパラメータを使うという考えは、同一の値がある場合、データ量が変化するので使えません。

------------------------------------------------------------------------

 現在、mdbファイルを、別のプログラムから現在操作しています。(.NET C#)
 
 JETに頼らず、一度データセットに全て取り込んで、プログラム側で処理しようかなとも思うのですが、物凄く重くなりそうで考え中です。
(最大で4万レコード程がフィールド数10個の1テーブルに入ります)

 何かいいアイデアがあれば教えてください。

回答の条件
  • 1人3回まで
  • 登録:2007/10/13 11:16:41
  • 終了:2007/10/19 18:16:26

回答(3件)

id:freemann No.1

freemann回答回数307ベストアンサー獲得回数492007/10/13 14:28:11

ポイント27pt

いい案とは言えないですが、OleDBDataReaderを使って、希望する行数まで読み飛ばして、欲しい行の情報のみをDataSetなりDataTableに保存してはどうですか?

当然のことながら後ろの行数のデータほどパフォーマンスは悪くなりますが・・・

id:F-15X No.2

F-15X回答回数111ベストアンサー獲得回数132007/10/13 14:30:24

ポイント27pt

SQLのTOP句と ADO.NETのFill メソッドを併用してはいかがでしょうか?

C#

int currentIndex = 0;
int pageSize = 5;

string orderSQL = "SELECT TOP " + pageSize + 
  " * FROM Orders ORDER BY OrderID";

// Assumes that connection is a valid SqlConnection object.
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);

DataSet dataSet = new DataSet();
adapter.Fill(dataSet, currentIndex, pageSize, "Orders");

参考

クエリ結果のページング

id:hayama5

リンク先興味深いです。早速呼んでみます。

2007/10/15 08:59:37
id:KUROX No.3

KUROX回答回数3542ベストアンサー獲得回数1402007/10/13 22:19:24

ポイント26pt

ADOXとか使うんですかね?

>最大で4万レコード程がフィールド数10個の1テーブルに入ります

SELECTして出来たレコードセットを1レコードずつ処理する

とかなら、普通に可能だと思います。

郵便番号辞書とかは10万件だとおもうので、それに比べても

大きいとは思えないので、心配することはないと思いますが・・。

ORACLEでもlimit句は使えないです。

id:hayama5

ADO.NETを利用します。4万件読み込むと、メモリはどれぐらい消費するのでしょうか…

2007/10/15 08:59:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません