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
ですから、格納された値の対数をしたいですか?もし8がベースであれば、その値は何ですか?また、それはRSに格納する必要があります、あなたはダブル配列に結果を書くことができますか? – Absinthe
あなたのレコードセットに 'double'型の新しいフィールドを追加してそこに計算結果を格納できない理由は何ですか? – RADO
データ型を変更することはできないと思うので、最良の回避策は@RADOが提案したものです。 –