A ver si alguien puede echarme un cable...
Bueno, ante todo dar las gracias de antemano por la ayuda... estoy manipulando una base de datos en acces97 que no esta creada por mi... (aunque me manejo bastante bien con ella).... me ha salido un problema que no se resolver, asi pues, si alguien pudiera echarle un vistacillo me haria un gran favor...
El problema viene al crear una fila en una tabla, me da un error de "number of query values and destination fields aren't the same"...
Lo bueno del caso, es que si los importes son enteros, ningun problema, ahora bien no me acepta los decimales.....
Os pongo aqui el modulo a ver si podeis echarme un cable....
Private Sub Comando13_Click()
On Error GoTo Err_Comando13_Click
Dim ST1 As String
Dim ST2 As String
Dim db As Database
Dim rs As Recordset
Dim RS2 As Recordset
Set db = CurrentDb
Dim nValorDeclarado As Double
Dim nHonorarios As Double
Dim nOtrosGastos As Double
nHonorarios = 0
nOtrosGastos = 0
nValorDeclarado = 0
Set RS2 = db.OpenRecordset("BASEIMPONIBLELIQUIDACIONES", dbOpenTable)
RS2.Index = "PRIMARYKEY"
ST1 = "select * from liquidaciones where " & [Forms]![FraVenta]![IdExpediente] & "= liquidaciones.idexpediente ;"
Set rs = db.OpenRecordset(ST1)
With rs
If rs.EOF Then
If MsgBox("Error: No Existen Liquidaciones NO puedo aplicar las tarifas", vbOKOnly, "Gestión") = vbOK Then
End If
Else
With RS2
RS2.Seek "=", rs!IdLiquidacion
If RS2.NoMatch Then
nValorDeclarado = 0
Else
nValorDeclarado = RS2!Principal
End If
End With
RS2.Close
Do While Not rs.EOF
If rs.EOF Then
Exit Do
End If
If rs!BaseImponible > nValorDeclarado Then
Else
nValorDeclarado = rs!BaseImponible
End If
rs.MoveNext
Loop
End If
End With
rs.Close
ST2 = "select * from tarifas where (" & Val([Forms]![Expedientes]![IdBanco]) & " = val(tarifas.Idbanco) and " & _
Val([Forms]![Expedientes]![IdTipo]) & " = tarifas.idtipo and " & _
nValorDeclarado & " >= tarifas.idDesde and " & _
nValorDeclarado & " <= tarifas.hasta );"
Set RS2 = db.OpenRecordset(ST2)
With RS2
If RS2.EOF Then
If MsgBox("NO existe la tarifa ", vbOKOnly, "Gestión") = vbOK Then
End If
Else
nHonorarios = RS2!ImporteHonorarios
nOtrosGastos = RS2!OtrosGastos
End If
End With
RS2.Close
If nHonorarios <> 0 Then
Dim ST As String
ST = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 6 & ",""Honorarios""," & nHonorarios & " AS Expr3;"
DoCmd.RunSQL ST, True
End If
If nOtrosGastos <> 0 Then
Dim St4 As String
St4 = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 7 & ",""Otros Gastos""," & nOtrosGastos & " AS Expr3;"
DoCmd.RunSQL St4, True
End If
[Forms]![FraVenta]![subformulario fraventaslineas].Requery
Exit_Comando13_Click:
Exit Sub
Err_Comando13_Click:
MsgBox Err.Description
Resume Exit_Comando13_Click
End Sub
El problema viene al crear una fila en una tabla, me da un error de "number of query values and destination fields aren't the same"...
Lo bueno del caso, es que si los importes son enteros, ningun problema, ahora bien no me acepta los decimales.....
Os pongo aqui el modulo a ver si podeis echarme un cable....
Private Sub Comando13_Click()
On Error GoTo Err_Comando13_Click
Dim ST1 As String
Dim ST2 As String
Dim db As Database
Dim rs As Recordset
Dim RS2 As Recordset
Set db = CurrentDb
Dim nValorDeclarado As Double
Dim nHonorarios As Double
Dim nOtrosGastos As Double
nHonorarios = 0
nOtrosGastos = 0
nValorDeclarado = 0
Set RS2 = db.OpenRecordset("BASEIMPONIBLELIQUIDACIONES", dbOpenTable)
RS2.Index = "PRIMARYKEY"
ST1 = "select * from liquidaciones where " & [Forms]![FraVenta]![IdExpediente] & "= liquidaciones.idexpediente ;"
Set rs = db.OpenRecordset(ST1)
With rs
If rs.EOF Then
If MsgBox("Error: No Existen Liquidaciones NO puedo aplicar las tarifas", vbOKOnly, "Gestión") = vbOK Then
End If
Else
With RS2
RS2.Seek "=", rs!IdLiquidacion
If RS2.NoMatch Then
nValorDeclarado = 0
Else
nValorDeclarado = RS2!Principal
End If
End With
RS2.Close
Do While Not rs.EOF
If rs.EOF Then
Exit Do
End If
If rs!BaseImponible > nValorDeclarado Then
Else
nValorDeclarado = rs!BaseImponible
End If
rs.MoveNext
Loop
End If
End With
rs.Close
ST2 = "select * from tarifas where (" & Val([Forms]![Expedientes]![IdBanco]) & " = val(tarifas.Idbanco) and " & _
Val([Forms]![Expedientes]![IdTipo]) & " = tarifas.idtipo and " & _
nValorDeclarado & " >= tarifas.idDesde and " & _
nValorDeclarado & " <= tarifas.hasta );"
Set RS2 = db.OpenRecordset(ST2)
With RS2
If RS2.EOF Then
If MsgBox("NO existe la tarifa ", vbOKOnly, "Gestión") = vbOK Then
End If
Else
nHonorarios = RS2!ImporteHonorarios
nOtrosGastos = RS2!OtrosGastos
End If
End With
RS2.Close
If nHonorarios <> 0 Then
Dim ST As String
ST = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 6 & ",""Honorarios""," & nHonorarios & " AS Expr3;"
DoCmd.RunSQL ST, True
End If
If nOtrosGastos <> 0 Then
Dim St4 As String
St4 = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 7 & ",""Otros Gastos""," & nOtrosGastos & " AS Expr3;"
DoCmd.RunSQL St4, True
End If
[Forms]![FraVenta]![subformulario fraventaslineas].Requery
Exit_Comando13_Click:
Exit Sub
Err_Comando13_Click:
MsgBox Err.Description
Resume Exit_Comando13_Click
End Sub
Muy buenas, el problema como bien dices es por los decimales que separan la parte entera de la parte decimal con una ','. Puedes solucionarlo creandote una función que te sustituya la coma por un punto y devuelva un String que será el que metes en la consulta, aquí te mando el código de la función:
Function CambiaComaPorPunto(ValorNumerico As Variant) As String
Dim Separador As String
Dim nPosicion As Integer
Dim straux As String
On Error Resume Next
Separador = Left$(Format$(1 / 2, "#.0"), 1)
If IsNull(ValorNumerico) Then
straux = ""
Else
nPosicion = InStr(1, ValorNumerico, Separador)
If nPosicion = 0 Then
straux = ValorNumerico
Else
straux = Mid$(ValorNumerico, 1, nPosicion - 1) & "." & Mid$(ValorNumerico, nPosicion + 1)
End If
End If
CambiaComaPorPunto = straux
On Error GoTo 0
End Function
Después de crearte la función deberás llamarla cada vez que insertes un valor doble, por ejemplo, la consulta:
ST = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 6 & ",""Honorarios""," & nHonorarios & " AS Expr3;"
aquí como nHonarios es de tipo double y puede llevar decimales deberas sustituirla por:
ST = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 6 & ",""Honorarios""," & CambiaComaPorPunto(nHonorarios) & " AS Expr3;"
Un saludo y espero que te sirva.
Function CambiaComaPorPunto(ValorNumerico As Variant) As String
Dim Separador As String
Dim nPosicion As Integer
Dim straux As String
On Error Resume Next
Separador = Left$(Format$(1 / 2, "#.0"), 1)
If IsNull(ValorNumerico) Then
straux = ""
Else
nPosicion = InStr(1, ValorNumerico, Separador)
If nPosicion = 0 Then
straux = ValorNumerico
Else
straux = Mid$(ValorNumerico, 1, nPosicion - 1) & "." & Mid$(ValorNumerico, nPosicion + 1)
End If
End If
CambiaComaPorPunto = straux
On Error GoTo 0
End Function
Después de crearte la función deberás llamarla cada vez que insertes un valor doble, por ejemplo, la consulta:
ST = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 6 & ",""Honorarios""," & nHonorarios & " AS Expr3;"
aquí como nHonarios es de tipo double y puede llevar decimales deberas sustituirla por:
ST = "INSERT INTO FraVentasLineas ( IdFraVenta, IdTipoMov, Concepto, Importe )" & _
" SELECT " & Val([Forms]![FraVenta]![IdFraVenta]) & "," & 6 & ",""Honorarios""," & CambiaComaPorPunto(nHonorarios) & " AS Expr3;"
Un saludo y espero que te sirva.
