5

に接続するためにDelphi 7withを使用しています。問題は、フィールドをに追加すると、として表示されることです。devart dbExpressSQLServerbigIntClientQueryTFMTBCDField

そして、TFMTBCDField64ビット値を取得する方法がありません。

Field.AsVariantまたはを使用して、StrToInt64(Field.AsString)この 64 ビット値を選択できます。

この値を選択/使用するより良い方法はありますか?

4

4 に答える 4

4

おそらく、TLargeIntField を手動でデータセットに追加し、その FieldName を適切な名前に設定して、そのようなコードを使用します。

SomeInt64Value := (qryMyQuery.FieldByName('blahblah') as TLargeIntField).AsLargeInt;

正確な型は覚えていませんが、Delphi6 ではこのように機能しました。

于 2009-09-01T13:19:54.043 に答える
0

のデータ形式TFMTBCDFieldは、 FMTBcdユニットTBcdからのレコードです。フィールドまたはプロパティを読み取ることで、生の値を取得できます。ValueAsBCD

値が必要なものによっては、TBcd十分な場合があります。つまり、に変換する必要がない場合がありますInt64。FMTBcdユニットは、値を加算、減算、乗算、除算する関数を提供しますTBcd

単位は への変換を提供しませんInt64VariantstringCurrencyDouble、およびへの変換がありIntegerます。変換を記述する場合Int64Integer変換はおそらく開始するのに適した場所なので、実装方法を見てみましょう。

function BcdToInteger(const Bcd: TBcd; Truncate: Boolean = False): Integer;
var
  ABcd: TBcd;
begin
  if Truncate and (BcdScale(Bcd) > 0) then
    NormalizeBcd(Bcd, ABcd, Bcd.Precision, 0)
  else
    ABcd := Bcd;
  Result := StrToInt(BcdToStr(ABcd));    
end;

したがって、VCL 自体は、を通過するよりも直接的に aTBcdを anに変換する方法を提供しません。したがって、フィールドの文字列バージョンを呼び出すという考えは問題ないようです。IntegerstringStrToInt64

于 2009-09-03T05:36:58.990 に答える
0

ユニット FMTBcd から VarFMTBcdCreate を使用して、BCD を Variant に変換し、さらに int64 に変換できます。

これを試して:

var value64 : int64;
...
value64 := VarFMTBcdCreate(Field.Value);
于 2009-09-01T07:26:32.233 に答える
-1

Delphi 7 はもうここにインストールされていませんが、ヘルプを見ると、次のように Float (Double) として取得できることがわかります。

function GetFieldAsInt64(Field: TField): Int64;
begin
  Result:= Int64(Round(Field.GetAsFloat));
end;

次に、関数を呼び出します。

var
  Value: Int64;
begin
  Value:= GetFieldAsInt64(MyFMTBCDField);

end;
于 2009-09-01T05:18:22.600 に答える