Dans VBA, j'ai une collection de jeux d'enregistrements ADO sur lesquels je veux faire des calculs et stocker les valeurs dans le jeu d'enregistrements en mémoire pendant que l'utilisateur utilise le formulaire.Comment modifier le type de données d'un champ de jeu d'enregistrements ADO?
Mes problèmes: après avoir fait un calcul sur, disons, et entier, je reçois un double/float. Lorsque j'essaie de stocker cela dans le jeu d'enregistrements, il est converti en un entier. Je veux que la précision du double/float après le calcul soit préservée.
Mon idée: changer le type de données du champ Je suis le calcul et le stockage. Je ne vois pas comment le faire. Comment je fais ça? Puis-je faire cela?
Ex:
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
Je reçois:
8<- original
0.903089986991944<- what I want stored
1<- what I get
20<- original
1.30102999566398<- what I want stored
1<- what I get
Remarque, cela ne change pas la base de données parce que frsGetPgRecordset (fournit pas parce qu'il est pas critique à la question) je:
rs.CursorType = adOpenKeyset
rs.CursorLocation = adUseClient
rs.LockType = adLockBatchOptimistic
Vous pouvez obtenir plus d'informations ici sur cette partie, car les gens vont demander: https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/cursortype-property-ado Update recordset without updating database
Donc, vous voulez le logarithme de la valeur stockée? Si c'était la base, quelle était la valeur? Aussi, doit-il être stocké dans le RS, pouvez-vous écrire les résultats dans un tableau double? – Absinthe
Y at-il une raison pour laquelle vous ne pouvez pas ajouter à votre jeu d'enregistrements un nouveau champ avec le type «double» et stocker les résultats de calcul là? – RADO
Je ne pense pas que vous puissiez changer les types de données, donc la meilleure solution serait ce que @RADO a suggéré. –