A ver si alguien puede echarme un cable...

nuvul
27 de Febrero del 2004
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

Sergok
27 de Febrero del 2004
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.