Requete SQL

cs_Osaka Messages postés 2 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 4 octobre 2007 - 2 oct. 2007 à 16:30
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 6 oct. 2007 à 01:10
bonjour
je m'evertue depuis 3h à faire une requete en VB via ADO qui vise à faire un select sur un champ et atttribuer la valeur retournée à un autre champ
pour ça je fais une boucle while et une requete tout ce qui a de plus classique
pourtant j'ai un message d'erreur qui bloque l'execution qui se trouve au niveau de l'Execute
soit je fais mal mon execute, soit j'ai un problème de type de variable (enfin je crois)
je copie/colle le code si dessous et si quelqu'un se sentait l'âme assez charitable pour y toruver l'erreur je lui en serais très reconnaisssant :)

Sub teste()

'Déclaration des variables
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset

'Instanciation des variables
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset

'Connexion à la base de données
cnx.ConnectionString = "DSN=test;UID=plop;PWD=plop;"
cnx.Open

'Exécution de la requête
rst.Open "SELECT AR_REF, AR_PRIXACH FROM F_ARTICLE", cnx
rst.MoveFirst

While Not (rst.EOF)
  'MsgBox rst("AR_REF") & " " & rst("AR_PRIXACH") & "."
  Dim strSQL As String
  Dim value As Variant
  Dim ref As String
  value = rst("AR_PRIXACH")
  ref = rst("AR_REF")
 
  strSQL = "UPDATE F_ARTPRIX SET "
  strSQL = strSQL & "AR_COUTSTD='" & value & "' "
  strSQL = strSQL & "WHERE AR_REF='" & ref & "'"
  'strSQL = strSQL & " AND AR_COUTSTD <> '' "
  cnx.Execute strSQL

  rst.MoveNext
Wend
End Sub

4 réponses

lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
2 oct. 2007 à 16:37
Bonjour,

Tu ne devrais pas faire la déclaration de tes variables dans ta boucle While.
Et quel est ton message d'erreur?
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 oct. 2007 à 16:47
salut,
ET
l' exécution des requetes "Action" passent par des  "Command"

      Dim MaCommande As Command
      Set MaCommande = New Command
      
      MaCommande.ActiveConnection = Cnx        
  
     While Not (rst.EOF)
  'MsgBox rst("AR_REF") & " " & rst("AR_PRIXACH") & "."
  Dim strSQL As String
  Dim value As Variant
  Dim ref As String
  value = rst("AR_PRIXACH")
  ref = rst("AR_REF")
 
  strSQL = "UPDATE F_ARTPRIX SET "
  strSQL = strSQL & "AR_COUTSTD='" & value & "' "
  strSQL = strSQL & "WHERE AR_REF='" & ref & "'"
  'strSQL = strSQL & " AND 

       MaCommande.CommandText = strSQL 
       Cnx.BeginTrans
         MaCommande.Execute
       Cnx.CommitTrans

Loop

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
cs_Osaka Messages postés 2 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 4 octobre 2007
4 oct. 2007 à 17:54
j'ai tenté la solution du begintrans mais voilà, j'ai une erreur differente (c'est Dallas !)

"Erreur d'exécution '3251':

Le fournisseur actuel ne prend pas en charge les transactions."

en fait je bosse sur un driver ODBC appelé Simba, qui est en fait le driver de Sage
donc il n'aime pas se genre de méthode (l'est saoulant hein ? :) )

que faire ?
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
6 oct. 2007 à 01:10
Salut,
le BeginTrans est optionnel.C' est juste que j' ai pris l' habitude
de passer mes requetes dans des  transactions.
Essayes donc sans...
  MaCommande.CommandText = strSQL 
     <strike>Cnx.BeginTrans</strike>
  MaCommande.Execute
     <strike>Cnx.CommitTrans</strike>

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
Rejoignez-nous