2014年02月23日

BDE ⇒ FireDAC変換 その2 (MapRules)


前回、保留していたデータマッピング機能について試してみた。
前回同様、データベースはOracle。

TADConnectionのFormatOptionsプロパティを下記で設定
-------------------------------------------------------------------
    FormatOptions.AssignedValues = [fvMapRules]
    FormatOptions.OwnMapRules = True
    FormatOptions.MapRules = <
      item
        SourceDataType = dtBCD
        TargetDataType = dtDouble
      end
      item
        SourceDataType = dtFmtBCD
        TargetDataType = dtDouble
      end>
-------------------------------------------------------------------

前回必要だった、Oracle Numberフィールドの、TFloatField定義からの、 TBCDFieldやTFmtBCDFieldへの置き換えが不要になった。
タグ:FireDAC BDE MapRules
posted by しんくそふと at 16:23| Comment(0) | TrackBack(0) | Delphiマイグレーション

2014年04月10日

Delphiマイグレーション記録 用紙サイズ指定


Printer.Canvas を使った印刷で、事前に用紙サイズを指定する場合、用紙サイズの定数に注意が必要。
Delphi2007以前(以降は未調査)の場合、カスタム用紙 DMPAPER_USER = 256 となっている。

最近の機種では、必ずしも 256 がカスタム用紙でない。

プリンタを変更したなどで、用紙サイズの指定がうまくいかなくなったときは、この辺りをまず疑う必要がある。


posted by しんくそふと at 10:14| Comment(0) | TrackBack(0) | Delphiマイグレーション

2015年03月10日

BDE ⇒ FireDAC変換 その3

String型Fieldでの未入力データの扱いについて。

TADConnectionのFormatOptionsプロパティのStrEmpty2Nullの設定に注意が必要。
特に、Nullと空文字を使い分けているプログラムでは、重要。
Defaultは、Trueなので、未入力データを空文字列として扱いたい場合は、この設定変更が必要。


個人的には、Default値は逆にしておいて欲しい。



posted by しんくそふと at 13:22| Comment(0) | TrackBack(0) | Delphiマイグレーション

2016年10月05日

BDE ⇒ FireDAC変換 その4 (TFDMemTable活用)

BDE ⇒ FireDAC変換の前半部分で取り上げた、TADMemTable(XE5以降はTFDMemTable)使用部分の補足です。

古くからのプログラムでは、Paradoxを多々使用しているものがあります。
この場合、Paradoxには永続的にデータを保存する使い方と、一時的に使用する使い方の2種類があると思います。
後者のケースとしては、編集用にサーバーのデータをクライアントへ取り込み編集後サーバーへ戻すケースや、印刷時に直接サーバーデータをQueryなどで取り出したデータを使用しにくいく一旦Paradoxに取り込んで編集後、印刷出力という方法を使っている。

この場合、コンポーネントはTTableを使用している。このケースのFireDACへの変換には、TADMemTableが最適である。
具体的には、dfm書き換えで、TTableをTADMemTableに置き換えるだけです。(TTableについては、Field定義は事前に取り込んでおく必要はあります)
弊社の今までの実績では、LookupFieldやCalcFieldもそのままの定義、コードで使えます。また、イベントも変更無く使用可能です。

注意点としては、TADMemTableは、オンメモリで処理しますので、データの処理状況確認等が必要な場合は、必要なタイミングでSaveToFile()メソッドなどで、ファイルに出力することになります。

FDQueryで読み込んだデータは、
   FDMemTable.Data := FDQuery.Data;
でコピーできます。処理前は、FDMemTableは、Closeしておくことが必要です。

posted by しんくそふと at 09:18| Comment(0) | TrackBack(0) | Delphiマイグレーション