El número de valores de la consulta y el número de campos de destino son diferentes. VB 6.0

Estoy dando de alta unos productos...

Tengo este código para dar de alta los productos pero me tira el error del título...

Lo raro es que están todos los campos... No veo que falte ninguno... ¿A ver que ven ustedes? GRACIAS!

StrProductoExistente = "SELECT Cod_Producto FROM PRODUCTOS where Cod_Producto =" & TxtProductos(0).Text
Set RstProductoExistente = New ADODB.Recordset
RstProductoExistente.Open StrProductoExistente, Base, adOpenStatic, adLockOptimistic
With RstProductoExistente
If .BOF = False Or .EOF = False Then
MsgBox "El Código: " & !Cod_Producto & " ya existe. Ingrese un nuevo código ", vbInformation, "ALTA PRODUCTOS."
TxtProductos(0).Text = ""
TxtProductos(0).SetFocus
'txtModAfiliado(0).SetFocus
Exit Sub
Else
If ChkIVA(0).Value Then
Cod_Producto = Trim(TxtProductos(0).Text)
Desc_Producto = TxtProductos(1).Text
Cant_Producto = Val(TxtProductos(2).Text)
Precio_Producto = CDbl(TxtProductos(3).Text)
IVA_Incluido = CDbl(Precio_Producto) + CDbl(Precio_Producto) * 0.105
Set RstProductos = New ADODB.Recordset

StrNuevoProducto = "INSERT INTO PRODUCTOS(Cod_Producto,Desc_Prod,Cantidad,Precio_Unitario,IVA_Incluido) VALUES ('" & Cod_Producto & "','" & Desc_Producto & "'," & Cant_Producto & "," & CDbl(Precio_Producto) & "," & CDbl(IVA_Incluido) & ")"
MsgBox StrNuevoProducto
RstProductos.Open StrNuevoProducto, Base, adOpenStatic, adLockOptimistic
MsgBox RstProductos
MsgBox "El Producto " & frmCompras.TxtProductos(1).Text & " Se ha incorporado al STOCK. ", vbInformation, "ALTA DE PRODUCTOS."
TxtProductos(0).Text = ""
TxtProductos(1).Text = ""
TxtProductos(2).Text = ""
TxtProductos(3).Text = ""
TxtProductos(0).SetFocus
Set RstMaxProducto = New ADODB.Recordset
StrMaxProducto = "Select Max(Cod_Producto) As Maximo From PRODUCTOS"
RstMaxProducto.Open StrMaxProducto, Base, adOpenStatic, adLockBatchOptimistic
End If
If ChkIVA(1).Value Then
Cod_Producto = Trim(TxtProductos(0).Text)
Desc_Producto = TxtProductos(1).Text
Cant_Producto = Val(TxtProductos(2).Text)
Precio_Producto = CDbl(TxtProductos(3).Text)
IVA_Incluido = CDbl(Precio_Producto) + CDbl(Precio_Producto) * 0.21
Set RstProductos = New ADODB.Recordset
StrNuevoProducto = "INSERT INTO PRODUCTOS(Cod_Producto,Desc_Prod,Cantidad,Precio_Unitario,IVA_Incluido) VALUES ('" & Cod_Producto & "','" & Desc_Producto & "'," & Cant_Producto & "," & CDbl(Precio_Producto) & "," & CDbl(IVA_Incluido) & ")"
MsgBox StrNuevoProducto
RstProductos.Open StrNuevoProducto, Base, adOpenStatic, adLockOptimistic
MsgBox RstProductos ' Con este mensaje veo que están todos los campos... Tanto en la consulta como en el número de campos...

MsgBox "El Producto " & frmCompras.TxtProductos(1).Text & " Se ha incorporado al STOCK. ", vbInformation, "ALTA DE PRODUCTOS."
TxtProductos(0).Text = ""
TxtProductos(1).Text = ""
TxtProductos(2).Text = ""
TxtProductos(3).Text = ""
TxtProductos(0).SetFocus
Set RstMaxProducto = New ADODB.Recordset
StrMaxProducto = "Select Max(Cod_Producto) As Maximo From PRODUCTOS"
RstMaxProducto.Open StrMaxProducto, Base, adOpenStatic, adLockBatchOptimistic
End If
End If
If RstMaxProducto.State = adStateOpen Then RstMaxProducto.Close
Set RstMaxProducto = Nothing
End With

2 respuestas

Respuesta
2

Probablemente sea porque interpreta el separador decimal de tu configuración (la coma) como un separador de los valores a agregar a los campos. En la otra respuesta ya te indiqué cómo evitar ese problema, usando Replace() para cambiar la coma por un punto, o Str()

¡Gracias! El problema era que estaban mal declaradas unas variables... Pego el código funcionando!

Dim Cod_Producto As Long
Dim Desc_Producto As String
Dim Cant_Producto As Integer
Dim IVA_Incluido As Double
Dim Precio_Producto As Double
Dim StrNuevoProducto As String
Dim StrMaxProducto As String
Dim StrProductoExistente As String
Dim RstProductoExistente As New ADODB.Recordset
Dim Tipo_IVA As String
Cod_Producto = (TxtProductos(0).Text)
                            Desc_Producto = TxtProductos(1).Text
                            Cant_Producto = Val(TxtProductos(2).Text)
                            Precio_Producto = Val(TxtProductos(3).Text)
                            If ChkIVA(0).Value Then 'IVA 10,5
                                IVA_Incluido = Precio_Producto + Precio_Producto * 0.105
                                Tipo_IVA = 10.5
                                Set RstProductos = New ADODB.Recordset
                                StrNuevoProducto = "INSERT INTO PRODUCTOS(Cod_Producto,Desc_Prod,Cantidad,Precio_Parcial,IVA_Incluido,Tipo_IVA) VALUES ('" & Cod_Producto & "','" & Desc_Producto & "'," & Cant_Producto & ",'$ " & Str(Precio_Producto) & "','$ " & Str(IVA_Incluido) & "','" & Tipo_IVA & "')"
                                RstProductos.Open StrNuevoProducto, Base, adOpenStatic, adLockOptimistic
                                MsgBox "El Producto " & frmCompras.TxtProductos(1).Text & " Se ha incorporado al STOCK. ", vbInformation, "ALTA DE PRODUCTOS."
Respuesta
1

Tanto buscar la forma, encontré la solución... Estaba en la forma que declaraba y usaba las variables.

Dim Cod_Producto As Long
Dim Desc_Producto As String
Dim Cant_Producto As Integer
Dim IVA_Incluido As Double
Dim Precio_Producto As Double
Dim StrNuevoProducto As String
Dim StrMaxProducto As String
Dim StrProductoExistente As String
Dim RstProductoExistente As New ADODB.Recordset
Dim Tipo_IVA As String

If ChkIVA(0).Value Then 'IVA 10,5
IVA_Incluido = Precio_Producto + Precio_Producto * 0.105
Tipo_IVA = 10.5
Set RstProductos = New ADODB.Recordset
'StrNuevoProducto = "INSERT INTO PRODUCTOS(Cod_Producto,Desc_Prod,Cantidad,Precio_Parcial,IVA_Incluido) VALUES ('" & Cod_Producto & "','" & Desc_Producto & "'," & Cant_Producto & ",'" & Str(Precio_Producto) & " $','" & Str(IVA_Incluido) & " $')"
StrNuevoProducto = "INSERT INTO PRODUCTOS(Cod_Producto,Desc_Prod,Cantidad,Precio_Parcial,IVA_Incluido,Tipo_IVA) VALUES ('" & Cod_Producto & "','" & Desc_Producto & "'," & Cant_Producto & ",'$ " & Str(Precio_Producto) & "','$ " & Str(IVA_Incluido) & "','" & Tipo_IVA & "')"
RstProductos. Open StrNuevoProducto, Base, adOpenStatic, adLockOptimistic

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas