Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Erreur 3346 : Le nombre des valeurs de requêtes et des champs de destination sont différents

2 réponses
Avatar
clb
Bonjour à tous,

Voici mon problème : une bdd access 97 fonctionne correctement sur mon poste
et me renvoi l'erreur 3346 chez mon client (également access 97, tous les 2
en win XP Pro).

J'ai vérifié la correspondance du type de champs, tout me semble ok mais à
force de regarder...

Si quelqu'un a une piste, je suis sérieusement preneur.

Merci d'avance.

Dim QteL As Double
Dim QteN1 As Double
Dim QteN2 As Double
Dim QteTot As Double
Dim sSQL As String
Dim qdf As DAO.QueryDef
Dim Rst As Recordset
Dim i As Integer

' vidage de la table Tmp
sSQL = "DELETE FROM MyTmp"
CurrentDb.Execute sSQL

' Ouverture du Recordset en défilement en avant, et en lecture seule
Set qdf = CurrentDb.QueryDefs("MyReqTmp")
qdf.Parameters("MY_PARAM") = Me![Modifiable0]
Set Rst = qdf.OpenRecordset

Rst.MoveFirst
i = 0
Do Until Rst.EOF
QteL = Rst("Qte")

If Rst("Type") <> "T" And Rst("Type") <> "" Then
If Rst("Type") <> "O" Then
' pas un ouvrage
If Rst("NivOuv") = 0 Then
QteTot = QteL
ElseIf Rst("NivOuv") = 1 Then
QteTot = QteL * QteN1
ElseIf Rst("NivOuv") = 2 Then
QteTot = (QteL * QteN2) * QteN1
End If

sSQL = "INSERT INTO MyTmp(Nume,CodeElem, Qte, Debourse,
Type_Ligne, Famille) VALUES (" & i & ",'" & Rst("CodeElem") & "', " & QteTot
& "," & Rst("Deb") & ",'" & "AP" & "','" & Rst("Famille") & "');"

CurrentDb.Execute sSQL
Else
' un ouvrage
If Rst("NivOuv") = 1 Then
QteN1 = Rst("Qte")
Else
QteN2 = Rst("Qte")
End If
End If
End If
Rst.MoveNext
i = i + 1
Loop

2 réponses

Avatar
Logipro
Bonjour,

Tu à surement une valeur null dans cette section :

sSQL = "INSERT INTO MyTmp(Nume,CodeElem, Qte, Debourse,
Type_Ligne, Famille) VALUES (" & i & ",'" & Rst("CodeElem") & "', " & QteTot
& "," & Rst("Deb") & ",'" & "AP" & "','" & Rst("Famille") & "');"

corrige avec des NZ

Salutations

Robert Simard
Logipro




"clb" a écrit dans le message de news:
41dc1025$0$31517$
Bonjour à tous,

Voici mon problème : une bdd access 97 fonctionne correctement sur mon
poste
et me renvoi l'erreur 3346 chez mon client (également access 97, tous les
2
en win XP Pro).

J'ai vérifié la correspondance du type de champs, tout me semble ok mais à
force de regarder...

Si quelqu'un a une piste, je suis sérieusement preneur.

Merci d'avance.

Dim QteL As Double
Dim QteN1 As Double
Dim QteN2 As Double
Dim QteTot As Double
Dim sSQL As String
Dim qdf As DAO.QueryDef
Dim Rst As Recordset
Dim i As Integer

' vidage de la table Tmp
sSQL = "DELETE FROM MyTmp"
CurrentDb.Execute sSQL

' Ouverture du Recordset en défilement en avant, et en lecture seule
Set qdf = CurrentDb.QueryDefs("MyReqTmp")
qdf.Parameters("MY_PARAM") = Me![Modifiable0]
Set Rst = qdf.OpenRecordset

Rst.MoveFirst
i = 0
Do Until Rst.EOF
QteL = Rst("Qte")

If Rst("Type") <> "T" And Rst("Type") <> "" Then
If Rst("Type") <> "O" Then
' pas un ouvrage
If Rst("NivOuv") = 0 Then
QteTot = QteL
ElseIf Rst("NivOuv") = 1 Then
QteTot = QteL * QteN1
ElseIf Rst("NivOuv") = 2 Then
QteTot = (QteL * QteN2) * QteN1
End If

sSQL = "INSERT INTO MyTmp(Nume,CodeElem, Qte, Debourse,
Type_Ligne, Famille) VALUES (" & i & ",'" & Rst("CodeElem") & "', " &
QteTot
& "," & Rst("Deb") & ",'" & "AP" & "','" & Rst("Famille") & "');"

CurrentDb.Execute sSQL
Else
' un ouvrage
If Rst("NivOuv") = 1 Then
QteN1 = Rst("Qte")
Else
QteN2 = Rst("Qte")
End If
End If
End If
Rst.MoveNext
i = i + 1
Loop





Avatar
clb
Effectivement, Merci beaucoup.

"Logipro" a écrit dans le message de
news:
Bonjour,

Tu à surement une valeur null dans cette section :

sSQL = "INSERT INTO MyTmp(Nume,CodeElem, Qte, Debourse,
Type_Ligne, Famille) VALUES (" & i & ",'" & Rst("CodeElem") & "', " &
QteTot

& "," & Rst("Deb") & ",'" & "AP" & "','" & Rst("Famille") & "');"

corrige avec des NZ

Salutations

Robert Simard
Logipro




"clb" a écrit dans le message de news:
41dc1025$0$31517$
Bonjour à tous,

Voici mon problème : une bdd access 97 fonctionne correctement sur mon
poste
et me renvoi l'erreur 3346 chez mon client (également access 97, tous
les


2
en win XP Pro).

J'ai vérifié la correspondance du type de champs, tout me semble ok mais
à


force de regarder...

Si quelqu'un a une piste, je suis sérieusement preneur.

Merci d'avance.

Dim QteL As Double
Dim QteN1 As Double
Dim QteN2 As Double
Dim QteTot As Double
Dim sSQL As String
Dim qdf As DAO.QueryDef
Dim Rst As Recordset
Dim i As Integer

' vidage de la table Tmp
sSQL = "DELETE FROM MyTmp"
CurrentDb.Execute sSQL

' Ouverture du Recordset en défilement en avant, et en lecture seule
Set qdf = CurrentDb.QueryDefs("MyReqTmp")
qdf.Parameters("MY_PARAM") = Me![Modifiable0]
Set Rst = qdf.OpenRecordset

Rst.MoveFirst
i = 0
Do Until Rst.EOF
QteL = Rst("Qte")

If Rst("Type") <> "T" And Rst("Type") <> "" Then
If Rst("Type") <> "O" Then
' pas un ouvrage
If Rst("NivOuv") = 0 Then
QteTot = QteL
ElseIf Rst("NivOuv") = 1 Then
QteTot = QteL * QteN1
ElseIf Rst("NivOuv") = 2 Then
QteTot = (QteL * QteN2) * QteN1
End If

sSQL = "INSERT INTO MyTmp(Nume,CodeElem, Qte, Debourse,
Type_Ligne, Famille) VALUES (" & i & ",'" & Rst("CodeElem") & "', " &
QteTot
& "," & Rst("Deb") & ",'" & "AP" & "','" & Rst("Famille") & "');"

CurrentDb.Execute sSQL
Else
' un ouvrage
If Rst("NivOuv") = 1 Then
QteN1 = Rst("Qte")
Else
QteN2 = Rst("Qte")
End If
End If
End If
Rst.MoveNext
i = i + 1
Loop