-1

これが何が起こるか知っている人はいますか?

すべてのデータベース オブジェクトを整数として宣言し、データセット オブジェクトも整数として宣言しました

adoクエリを実行すると、値が取得されます。ここから、整数として宣言されているデータセットに割り当てようとしています。しかし、それは私に与え続けます

互換性のない型: widestring と tintegerfield

正確なコードは次のとおりです。

dxMemData1.FieldByName(dxMemData1RetailCalendarPeriodID) := 
  adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r;
4

1 に答える 1

7

dxMemData1.FieldByName(dxMemData1RetailCalendarPeriodID) := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌r

コンパイルしないでください。

dxMemData1RetailCalendarPeriodIDdxMemData1 データセットで作成した永続フィールド オブジェクトのようです。このFieldByNameメソッドは名前でフィールドを検索するために使用されますが、既にフィールドあるため、その必要はありませんdxMemData1RetailCalendarPeriodID

したがって、必要なのは単純です

dxMemData1RetailCalendarPeriodID.AsInteger := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r

コンパイラ エラーの理由は、フィールドの名前FieldByNameを示す文字列が渡されることを期待しているのに、文字列ではなく TObject の子孫であるフィールド自体を渡そうとしたためです。以下は機能しますが、既に示したコードのため不要です。

dxMemData1.FieldByName(dxMemData1RetailCalendarPeriodID.FieldName) := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r;

更新 「無効なバリアント操作」エラーが発生していると言います。このコードを使用しても、まだ取得できますか:

if not adoTreeWindow.FieldByName('RetailCalendarPeriodID').IsNull then    
  dxMemData1RetailCalendarPeriodID.AsInteger := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r

?

于 2016-12-15T12:52:08.830 に答える