2017-06-06 8 views
2

VBAでは、ユーザーがフォームを使用している間に計算を行い、メモリ内のレコードセットに値を格納するADOレコードセットのコレクションがあります。ADOレコードセットフィールドのデータ型を変更するにはどうすればよいですか?

私の問題:私は計算と言いますと整数、私はダブル/フロートを取得します。レコードセットに格納しようとすると、キャスト/整数に変更されます。計算後のdouble/floatの精度を保持したい。

私の考え方:フィールドのデータ型を変更する計算と保存を行っています。 私はそれを行う方法が表示されません。どうすればいいですか?それをしてもいいですか?

例:

Option Explicit 
Sub test() 

Dim rs As ADODB.Recordset 
Dim sql As String 
sql = "select * from test;" 
Set rs = frsGetPgRecordset(sql) 

Do While rs.EOF = False 
    Debug.Print rs!x & "<- original" 
    Debug.Print Application.WorksheetFunction.Log(rs!x) & "<- what I want stored" 
    rs.Fields("x") = Application.WorksheetFunction.Log(rs!x) 
    Debug.Print rs!x & "<- what I get" 
    rs.MoveNext 
Loop 

End Sub 

私が手:

8<- original 
0.903089986991944<- what I want stored 
1<- what I get 
20<- original 
1.30102999566398<- what I want stored 
1<- what I get 

注意を、これは私が持っているので、frsGetPgRecordsetで(それは質問には重要ではないですので、提供していない)データベースを変更していません。

rs.CursorType = adOpenKeyset 
rs.CursorLocation = adUseClient 
rs.LockType = adLockBatchOptimistic 

人々は質問するので、その部分で詳細情報を得ることができます: https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/cursortype-property-ado Update recordset without updating database

+0

ですから、格納された値の対数をしたいですか?もし8がベースであれば、その値は何ですか?また、それはRSに格納する必要があります、あなたはダブル配列に結果を書くことができますか? – Absinthe

+0

あなたのレコードセットに 'double'型の新しいフィールドを追加してそこに計算結果を格納できない理由は何ですか? – RADO

+1

データ型を変更することはできないと思うので、最良の回避策は@RADOが提案したものです。 –

答えて

3

私はちょうど新しいフィールドに計算結果を格納代わりに、既存のフィールドを変更しようとします:

rs.Fields.Append "New_Field", adDouble 
関連する問題