Watch, Follow, &
Connect with Us

For forums, blogs and more please visit our
Developer Tools Community.


Welcome, Guest
Guest Settings
Help

Thread: FireDAC-FDQuery メモリが不足


This question is answered. Helpful answers available: 2. Correct answers available: 1.


Permlink Replies: 4 - Last Post: Sep 8, 2015 10:01 AM Last Post By: Kosuke Kamei
LIN LICHIEH

Posts: 3
Registered: 11/12/06
FireDAC-FDQuery メモリが不足  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 6, 2015 6:40 AM
開発環境:Win 7 Pro 64bit, memory 16GB, Delphi XE7 Ent + FireDAC + FirdBird25(embed)

データ件数:30万件まで
①FDTable→OPENできた
②FDQuery→全件取得できた

データ件数:35万件以上
①FDTable→OPENできた
②FDQuery→全件取得→「メモリが不足」エラー発生
※デザイン時FDQueryは全件取得できているのに、EXE単体実行時にエラー

もしかするとFDQueryのどこかの設定をすれば治るのでは
FormatOptions-MaxStringSizeなどをいろいろ弄っても全然だめでした。

※FDQueryの抽出件数が少ない場合は全然問題なかった。

どなたかご教授してください。よろしくお願いいたします。
Hikaru FUKUSHI

Posts: 65
Registered: 11/11/02
Re: FireDAC-FDQuery メモリが不足  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 6, 2015 10:06 PM   in response to: LIN LICHIEH in response to: LIN LICHIEH
LIN LICHIEHさん、こんにちは。福士と申します。

データ件数:35万件以上
①FDTable→OPENできた
②FDQuery→全件取得→「メモリが不足」エラー発生
※デザイン時FDQueryは全件取得できているのに、EXE単体実行時にエラー

もしかするとFDQueryのどこかの設定をすれば治るのでは
FormatOptions-MaxStringSizeなどをいろいろ弄っても全然だめでした。

そのあたりの設定はTFDQueryのFetchOptionsプロパティ

FireDAC.Stan.Option.TFDFetchOptions - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/XE7/ja/FireDAC.Stan.Option.TFDFetchOptions

かもしれません。たとえばUnidirectional

FireDAC.Stan.Option.TFDFetchOptions.Unidirectional - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/XE7/ja/FireDAC.Stan.Option.TFDFetchOptions.Unidirectional

をTrueにすることで状況は改善しそうですが、代わりにデータセットをグリッドに
表示することができなくなるという制約があります。具体的にどのような状況で
メモリ不足になっているのかがわからないので、どのオプションをどのように
変更したら解決するのかはわかりませんが、おそらく TFDQuery.FetchOptions が
お探しのものだと思います。

直接的な答えにはなっていませんが、参考にしてください。

--
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fukushi@tts-inc.co.jp
LIN LICHIEH

Posts: 3
Registered: 11/12/06
Re: FireDAC-FDQuery メモリが不足  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 7, 2015 3:00 AM   in response to: Hikaru FUKUSHI in response to: Hikaru FUKUSHI
ご返事ありがとうございます。

TFDQuery.FetchOptions をいろいろ試してみたが、全然だめでした。

今わかったところでは、デザイン時FDQueryのFetchOption-Modeを fmAll にすれば、
デザイン時でもActiveすることができなかった(Erroe:メモリが足りません)。
fmOnDemandの場合は大丈夫。

デザイン時、FDTableの場合、fmOnDemandをAcitveにする時間(一瞬)
                    fmAllの場合は結構時間かかった。

そうなると、FDQueryがfmOnDemandに設定した場合でも、EXEが実際に動く際は
fmAll の状態で動かしているのでは?ちょっと疑わしい....

UnidirectionalをTrueにすると件数かからわず 「 [FireDAC][Comp][DS]-211. 単方向データセット
[Qry_Corp] に対して操作を実行することはできません. 」が表示されます。

行の取得に関する
http://docwiki.embarcadero.com/RADStudio/XE7/ja/%E8%A1%8C%E3%81%AE%E5%8F%96%E5%BE%97%EF%BC%88FireDAC%EF%BC%89
に書かれた一般的な使用例(いくつかのパターン)を試してみたが、こちらもだめでした。

引き続き、試してみます。

LIN LICHIEH

Posts: 3
Registered: 11/12/06
Re: FireDAC-FDQuery メモリが不足  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 7, 2015 6:37 AM   in response to: LIN LICHIEH in response to: LIN LICHIEH
自己レス 解決できました。

原因はTMSさんのTDBAdvGridコンポーネントの限界かもしれません。
TDBAdvGridを普通のTDBGridに置き換えたら、一瞬で表示することができました。

アドバイスなどありがとうございました。
Kosuke Kamei

Posts: 1
Registered: 11/22/00
Re: FireDAC-FDQuery メモリが不足  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 8, 2015 10:01 AM   in response to: LIN LICHIEH in response to: LIN LICHIEH
TDBAdvGridではありませんが、以前にTAdvGridで大量のデータを表示しようとして例外が発生したことがあります。
ソースを調べてみたら、多くの変数がShortintで定義されていたのでIntegerに変更したら動作するようになりました。
同様の問題かもしれないですね。

亀井
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02