2016-01-15 1 views
0

Est-il possible de définir la valeur d'un champ statique à partir d'une requête dans ADODB Recordset dans VB6?Définir une valeur de champ statique dans ADODB.RecordSet dans VB6

Par exemple, que j'ai un recordset dont la source est:

SELECT col1, col2, '' AS staticCol 
FROM myTable 
WHERE 1 = 2 

puis ajouter un nouveau record en appelant myRS.AddNew.

Dans le nouvel enregistrement, les trois champs sont NULL. Je peux mettre col1 et col2 sans problème:

myRS.Fields("col1").Value = "one" 
myRS.Fields("col2").Value = "two" 

Mais lorsque je tente de mettre staticCol, je reçois une erreur.

myRS.Fields("staticCol").Value = "three" 
-->Run-time error '-2147217887 (80040e21)': 
-->Multiple-step operation generated errors. Check each status value. 
myRS.Fields("staticCol").Value = "" 
-->Run-time error '-2147217887 (80040e21)': 
-->Multiple-step operation generated errors. Check each status value. 

Y a-t-il un moyen de faire fonctionner cela? Je préférerais garder la connexion active ouverte si possible.

Merci d'avance!

+0

Si vous souhaitez examiner les erreurs, vous les trouverez dans la collection Errors de l'objet Connection. – BobRodes

Répondre

1

Les deux premiers champs sont mappés aux champs de la base de données. Vous avez une table appelée myTable, et les champs sont mappés à col1 et col2. La troisième valeur, cependant, est spécifiée comme une chaîne vide. Pensez-y comme un Const dans votre SQL. Vous ne pouvez pas assigner une nouvelle valeur à un const: c'est toujours la même valeur qu'avant.

Même si vous pouviez le faire: avec quel champ serait-il mappé? La base de données ne peut pas savoir où vous voulez aller. Il pense que vous essayez d'insérer dans un champ et signale qu'il ne peut pas effectuer cette opération pour vous. Mon VB6 est rouillé, et je n'en possède plus de copie, mais je me demande pourquoi vous essayez d'ajouter un enregistrement de cette façon. Il est préférable d'écrire une procédure stockée INSERT et de l'appeler comme vous le feriez pour toute autre procédure.

+0

Marqué comme réponse parce que je prends loin de votre réponse que non, cela ne peut pas être fait. La raison pour laquelle je veux le faire de cette façon est plutôt complexe, donc je ne vais pas entrer ici. – user1422348