喫茶XRAYトップページ


[9440] FireDACのParamByNameについて返信 削除
2015/12/2 (水) 23:39:57 Sara
みなさん こんばんは。

お知恵を拝借できれば幸いです。

Delphi 10 Seattle + FireDAC + Windows10 Proにて、画像管理ソフトを新調しています。

SQLiteにデータを保存する際に、

FDQuery1.SQL.Add('insert into Table1(Filename,Picture) values('aaa',:Picture)');
FDQuery1.ParamByName('Picture').LoadFromStream(Mem,ftBlob);

のような記述しているのですが、このとき、状況によって、FDQuery1.ParamsCountが0
になることがあって困っています・・・
つまりDelphi 10 Seattleが、ParamByNameでPictureが無いとエラーはく・・・

フォルダー内の画像を読み込んで保存する際は、正常に動くのですが、
アーカイブ内の画像を読み込んで保存しようとすると、上記のエラーになる・・・

特にメモリリークしているようでもないのですが・・・
(終了時Delphiはメモリリークしているとは言ってこない)

そこで、FireDACのかわりにZeosLibにて同じ処理をすると問題なく終了する・・・
FireDACの問題なのでしょうかね・・・

アーカイブが、ZIPでもLZHでもSusieの特殊なアーカイバでも同じようになる・・・
アーカイブの管理でメモリリークしてFDQuery1を破壊しているのであれば、
話は分かるんですが、メモリリークしている感じでもないんですよね・・・

ReportMemoryLeaksOnShutdown := True;
としているだけなので、厳密にメモリリークしていないとは言い切れない
のかもしれませんが・・・

どなたか意見を頂けると助かります。



[9441] Re:FireDACのParamByNameについて返信 削除
2015/12/3 (木) 10:19:27 福士
Saraさん、こんにちは。

  FDQuery1.Unprepare;
  FDQuery1.SQL.Clear;
> FDQuery1.SQL.Add('insert into Table1(Filename,Picture) values('aaa',:Picture)');
  FDQuery1.Prepare;
> FDQuery1.ParamByName('Picture').LoadFromStream(Mem,ftBlob);

としてみたらどうですか?

[9443] Re2:FireDACのParamByNameについて返信 削除
2015/12/3 (木) 20:37:06 Sara
福士さん こんばんは。

>
>   FDQuery1.Unprepare;
>   FDQuery1.SQL.Clear;
> > FDQuery1.SQL.Add('insert into Table1(Filename,Picture) values('aaa',:Picture)');
>   FDQuery1.Prepare;
> > FDQuery1.ParamByName('Picture').LoadFromStream(Mem,ftBlob);
>
> としてみたらどうですか?


やってみたところ・・・

Prepareの前にParamByName('Picture').DataTypeを入れろと怒られました。
ので、

 FDQuery1.Unprepare;
 FDQuery1.SQL.Clear;
 FDQuery1.SQL.Add('insert into Table1(Filename,Picture) values('aaa',:Picture)');
 FDQuery1.ParamByName('Picture').DataType := ftBlob;
 FDQuery1.Prepare;
 FDQuery1.ParamByName('Picture').LoadFromStream(Mem,ftBlob);

としたところ、通常フォルダーでは正常に動作しますが、アーカイブだと
 FDQuery1.ParamByName('Picture').DataType := ftBlob;
の部分で、やはり、Pictureがないと怒られます・・・

どうしたものでしょうね・・・おとなしくZeosLibにするしかないか・・・(^^;

[9444] Re3:FireDACのParamByNameについて返信 削除
2015/12/3 (木) 21:54:53 福士
Saraさん、こんばんは。

データがどこに由来するのかによってデータベース周りの動作が変わるというのは
考えにくいと思います。

> としたところ、通常フォルダーでは正常に動作しますが、アーカイブだと

やはり最低限の再現プログラムを作ってみるのがいいのでは?

[9445] Re4:FireDACのParamByNameについて返信 削除
2015/12/3 (木) 22:08:35 Sara
▼ 福士さん
> Saraさん、こんばんは。
>
> データがどこに由来するのかによってデータベース周りの動作が変わるというのは
> 考えにくいと思います。
>
> > としたところ、通常フォルダーでは正常に動作しますが、アーカイブだと
>
> やはり最低限の再現プログラムを作ってみるのがいいのでは?


やはり、そうですよねぇ・・・でもZeosLibだと普通に動くんですよねぇ・・・

と、いうわけで、一旦逃避して、ZeosLib版にしてみました。

安定して動いています。(^^;

このままZeosLibで行くのも良いかも・・・(逃)

モチベーションが回復したら、FireDACの検証をしてみます・・・(たぶん)

INCM/CMT
Cyclamen v3.82