DelphiADO-デザイナーなしでデフォルトのデータセット列タイプを設定する方法

ウェイジュ

Delphi2007の使用。

デザイナを使用してDataSetを構成することはありません。SQLクエリから自動的に作成されます。したがって、実行時にフィールドが作成されるソリューションが必要です。

ADOを使用して、OracleのNUMBER(19,0)列から多数(例:2305843009213693951)を選択する必要があります。このクエリは、列がBIGINTとして定義され、TLargeintFieldに自動的にマップされるSQLServerで機能しますが、Oracleの場合はTBCDFieldにマップされます。この動作は、たとえばここのいくつかの場所で文書化されています-TADOQuery.EnableBCD

問題は(同じページで述べたように)、場合によっては数値が大きすぎてオーバーフロー例外がスローされることです(内部で10進数を使用します)。予想どおり/文書化されています-TADOQuery.EnableBCD(false)を使用すると、列は必要なTLargeintFieldにマップされます。ただし、このオプションはすべての列に設定されており、少し手間がかかるようです。

代替案について説明します。

注:有効数字が19を超える非常に大きな数のフィールドの場合、TVariantFieldタイプの永続フィールドオブジェクトを使用できます。TFloatFieldクラスとTBCDFieldクラスには、このサイズのフィールドに十分な容量がありません。TVariantFieldを使用すると、フィールドデータを文字列として取得および設定できるため、容量不足によるデータの損失を防ぐことができます。ただし、TVariantFieldオブジェクトを介してアクセスされる数値に対して算術演算を実行することはできません。

そこで、この記事で説明されているように、フィールドを列に手動で構成してみました-実行時にTFieldsを使用してClientDataSetの構造を作成しますしかし、例外が発生したため、これは機能していないようです。「フィールド 'total_rec'の型の不一致が予想されます:LargeInt actual:BCD '。

それで、デザイナーを使用せずに、ADOにNUMBER(19,0)のタイプTLargeintFieldのフィールドを持つデータセットを返すように強制する方法はありますか?

興味深いことに、ODACは列をTLargeintFieldにマップしますが、ODACとADOをサポートすることになっています。

ウェイジュ

ADOQueryによって返される列のデータ型を手動で制御する方法はないと思います。私はデータ型を決定するkobikによって言及された手順をオーバーライドすることをテストしました、そしてこれはうまくいきました。ただし、XE4で同じコードを調べたところ、大きなBCD番号で使用できるように変更されているように見えるため、このソリューションは使用しません。2007年からアップグレードするまで待つことができます(できれば来年)。

オーバーライドされたバージョンのInternalInitFieldDefsに追加したコードは次のとおりです。

    if (F.Type_ = adNumeric) and (F.NumericScale = 0) and (F.Precision < 10) then
    begin
      FieldType := TFieldType(ftInteger);
    end

追加した

    else if (F.Type_ = adNumeric) and (F.NumericScale = 0) and (F.Precision >= 19) then
    begin
      FieldType := ftLargeint;
    end;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

DelphiADOデータセットフィルター

分類Dev

DelphiADOコンポーネントからモジュール内のVBA関数を呼び出すMSAccessクエリを呼び出す

分類Dev

SparkScalaでデータセットを使用して配列のタイプを設定する方法

分類Dev

ユーザーローカルのPythonインタープリターをクラスターのデフォルトとして設定する方法

分類Dev

データフレームの列タイプを係数ではなく文字に設定します(デフォルト)R

分類Dev

Firefox、IEなどでタブをプリロードする方法/複数のWebサイトをデフォルトとして設定する方法

分類Dev

デフォルトのデータ型なしで変数を設定する

分類Dev

WYSIWYGエディターのデフォルトのフォントタイプを設定する

分類Dev

デフォルトのインタープリターを設定し、PyCharm2017でvirtualenvを使用しない

分類Dev

emacs:SQLモードでSQLファイルのデフォルトのデータベースタイプを設定する方法

分類Dev

LibreOfficeでデフォルトの通貨タイプを設定する方法

分類Dev

chart.jsでツールチップタイトルのデフォルトのコールバックを設定する方法

分類Dev

Axis2でデフォルトのコンテンツ出力タイプヘッダーを設定する

分類Dev

ArchLinuxでターミナルフォントをデフォルトとして設定する方法

分類Dev

MidnightCommanderでデフォルトのエディターとしてMicroエディターを設定する方法

分類Dev

[BEGINNER]スイッチのデフォルトでループを設定する

分類Dev

DataTriggerを介してWPFコントロールの「デフォルト」スタイルを設定する方法

分類Dev

Androidで利用可能なデフォルトのフォントファミリーをアクションバーのタイトルに設定する方法

分類Dev

タイプUnionでデフォルト値を設定する

分類Dev

Vue 2-小道具で配列のデフォルトのタイプを設定する方法

分類Dev

FBManagerで作成されたデータベースにデフォルトの文字セットを設定する

分類Dev

スタイルシートを設定した後にmatplotlibのデフォルトを回復する方法

分類Dev

rstudioで新しい「.R」ファイルのデフォルトテンプレートを設定する方法

分類Dev

SQLite:デフォルトの入力タイプを `textarea`ではなく` text`に設定する方法

分類Dev

Eclipseでデフォルトのコード形式またはコードスタイルを設定する方法

分類Dev

Wi-Fiをデフォルトのインターネット接続として設定し、イーサネットをプライベートネットワークとして設定する方法

分類Dev

Ubuntu14.04でPython3をデフォルトのインタープリターとして設定する方法

分類Dev

Androidデータバインディング:xmlでデフォルトの可視性を設定します

分類Dev

動的にreactnativeでデフォルトスタイルとユーザー定義スタイルを設定する方法は?

Related 関連記事

  1. 1

    DelphiADOデータセットフィルター

  2. 2

    DelphiADOコンポーネントからモジュール内のVBA関数を呼び出すMSAccessクエリを呼び出す

  3. 3

    SparkScalaでデータセットを使用して配列のタイプを設定する方法

  4. 4

    ユーザーローカルのPythonインタープリターをクラスターのデフォルトとして設定する方法

  5. 5

    データフレームの列タイプを係数ではなく文字に設定します(デフォルト)R

  6. 6

    Firefox、IEなどでタブをプリロードする方法/複数のWebサイトをデフォルトとして設定する方法

  7. 7

    デフォルトのデータ型なしで変数を設定する

  8. 8

    WYSIWYGエディターのデフォルトのフォントタイプを設定する

  9. 9

    デフォルトのインタープリターを設定し、PyCharm2017でvirtualenvを使用しない

  10. 10

    emacs:SQLモードでSQLファイルのデフォルトのデータベースタイプを設定する方法

  11. 11

    LibreOfficeでデフォルトの通貨タイプを設定する方法

  12. 12

    chart.jsでツールチップタイトルのデフォルトのコールバックを設定する方法

  13. 13

    Axis2でデフォルトのコンテンツ出力タイプヘッダーを設定する

  14. 14

    ArchLinuxでターミナルフォントをデフォルトとして設定する方法

  15. 15

    MidnightCommanderでデフォルトのエディターとしてMicroエディターを設定する方法

  16. 16

    [BEGINNER]スイッチのデフォルトでループを設定する

  17. 17

    DataTriggerを介してWPFコントロールの「デフォルト」スタイルを設定する方法

  18. 18

    Androidで利用可能なデフォルトのフォントファミリーをアクションバーのタイトルに設定する方法

  19. 19

    タイプUnionでデフォルト値を設定する

  20. 20

    Vue 2-小道具で配列のデフォルトのタイプを設定する方法

  21. 21

    FBManagerで作成されたデータベースにデフォルトの文字セットを設定する

  22. 22

    スタイルシートを設定した後にmatplotlibのデフォルトを回復する方法

  23. 23

    rstudioで新しい「.R」ファイルのデフォルトテンプレートを設定する方法

  24. 24

    SQLite:デフォルトの入力タイプを `textarea`ではなく` text`に設定する方法

  25. 25

    Eclipseでデフォルトのコード形式またはコードスタイルを設定する方法

  26. 26

    Wi-Fiをデフォルトのインターネット接続として設定し、イーサネットをプライベートネットワークとして設定する方法

  27. 27

    Ubuntu14.04でPython3をデフォルトのインタープリターとして設定する方法

  28. 28

    Androidデータバインディング:xmlでデフォルトの可視性を設定します

  29. 29

    動的にreactnativeでデフォルトスタイルとユーザー定義スタイルを設定する方法は?

ホットタグ

アーカイブ