Error de conversión de tipos de datos error 3421 en tiempo de ejecución

Alguien que me pueda dar solución a mi pregunta adjunto parte del código para mejor entendimiento.

Set bd = OpenDatabase(App.Path + "\verifik.mdb")
Set tabla1 = bd.OpenRecordset("autos", dbOpenDynaset)
tabla1.FindFirst "FOLIO = " & Text1.Text
FOLIO = "&VAL(CLAVE.TEXT)"
If Not tabla1.NoMatch Then
MsgBox "EL FOLIO YA EXISTE...", 48
SendKeys "{home}+{end}"
Text1.SetFocus
Exit Sub
Else
With tabla1
.AddNew
.Fields("FOLIO") = Text1.Text
.Fields("PLACAS") = Text2.Text
.Fields("MARCA") = Text3.Text
.Fields("SUBMARCA") = Text4.Text
.Fields("PRECIO") = Combo1.Text -----> aquí el error
.Fields("FECHA") = DTPicker1
.Update
End With

Mencionar que el combo despliega estos datos $ 180, $ 473 y $ 650, este error solo aparece con algunas bd y en otras no "echa en access 2000"

1 Respuesta

Respuesta
1

Pasa que en el combobox, se almancenan lo datos en forma de cadena (String), mientras que tu campo de tu tabla es de tipo numérico,

Prueba esto

.Fields("PRECIO") = val(Combo1.Text )

Saludos!

buen día

experto, el error ya no lo manda y al parecer da de alta el registro, pero al hacer una consulta resulta que el valor que seleccione en el combobox no me lo almacena es decir me almacena 0.00 cuan do selecciono cualquiera de los precios a que se debe gracias de antemano y gracias por la respuesta anteriror

Comparte tu código, con los últimos cambios que hayas realizado.

gracias por tu pronta respuesta en realidad no hice mucho solo sustituí la linea de código tuya pos la que yo tenia este es el código

Set bd = OpenDatabase(App.Path + "\verifik.mdb")
Set tabla1 = bd.OpenRecordset("autos", dbOpenDynaset)
'tabla1.FindFirst "FOLIO = '" & Text1.Text & "'"
tabla1.FindFirst "FOLIO = " & Text1.Text
FOLIO = "&VAL(CLAVE.TEXT)"
If Not tabla1.NoMatch Then
MsgBox "EL FOLIO YA EXISTE...", 48
SendKeys "{home}+{end}"
Text1.SetFocus
Exit Sub
Else
With tabla1
.AddNew
.Fields("FOLIO") = Text1.Text
.Fields("PLACAS") = Text2.Text
.Fields("MARCA") = Text3.Text
.Fields("SUBMARCA") = Text4.Text
.Fields("PRECIO") = Val(Combo1.Text)----->
'.Fields("PRECIO") = Combo1.Text
.Fields("FECHA") = DTPicker1
.Update
End With

Que valores tiene cargados el cambo, son solamente números, (¿sin signo monetario alguno)?

He de imaignar que el resto de campos is actualiza normal, ¿vdd?

los que despliega el combo son

$ 177.24

$ 472.64

$ 649.88

en la base de datos access los tengo como tipo moneda y si en los demás no tengo problemas

Para descarte intenta esto,

msgbox Combo1.Text

msgbox Val(Combo1.Text)

Ponlo en algún botón, y se supone que el valor del combo debería ser el mismo antes y después de convertirlo..

Comentas,.

disculpa otra vez pero no funciona, primero me manda un mensaje con el valor que selecciono y luego otro mensaje con volor 0 que es el que me sigue almacenando cabe mencionar que con estos valores realizo una operación para sumar toda la columna de un datagrid llamada precio la cual ya esta resuelta.

gracias de antemano por tu ayuda

La idea de los mensajes era vrificar el valor que esta cargado en el combo, si en el msgbox no se muestra, puede que el valor del combo este nulo, y el val al convertir dicho valor lo convierte a 0, entonces el problema esta ahi...

Intenta esto:

msgbox Cstr(Combo1.Text)

Me comentas

manda el mensaje con la cantidad seleccionada......ya no manda el mensaje con con cero pero me sigue al macenando el cero

Mmm..

¿Estimado pregunta te muestra el numero con todo el signo de moneda?

si así es, en el msgbox aparece con el signo de pesos pero sigue sin almacenar el precio seleccionado, me almacena 0

experto el procedimiento funciona si quito los signos de pesos, entonces si me almacena el precio seleccionado el cual era para darle un poca mas de estética pero si tienes una solución te lo agradecería mucho de antemano gracias por tu ayuda la cual fue indispensable para solucionar este punto.....gracias

Si modificas el tipo de dato de tu columna.. de moneda a solamente numérico..¿?

Eso seria una opción de solución. Otra seria solo extraer la parte numérica..

Por ejemplo

Si el valor fuese

$ 180

Entonces se tendría que tomar solola parte numérica, ya que el signo de moneda, aparentemente, es ño que genera la dificultad, seria algo así

Fields("PRECIO") = val(right(combo1.text, len(combo1.text) - 2 ) )

Aclarame una cosa, ¿usas combo o datacombo?, ¿Has buscado si tiene alguna propiedad para dar formato o especiicar el tipo de dato a cargar en dicho control?

solo como por si acaso..

Prueba esto

Fields("PRECIO") = CDbl(combo1.Text)

Comentas!

lo cambie a numérico y me redondea los precios y con la segunda opción me guarda cero

la cuestión que al quitar los signos de pesos y guardar no se actualiza el datagrid tengo que cerrar la aplicación e iniciarla de nuevo para que muestre el ultimo registro introducido.

y si estoy utilizando un combobox

Mmm.. estas usando código para actualizar.. dicho grid, ya que en mi labor, para refrescar el datagrid, existen comandos.. resfresh o volver a conectar el datagrid, con previa actualización de recordset

si estoy utilizando Adodc1.Refresh pero me manda que no coinciden los tipos de datos en la expresión de criterios y error en el método refresh del objeto adodc

y no me aparecian

A ver

Entiendo que cambiaste el tipo de dato a numérico en tu base de datos, es posible que requieras volver a definir el adodc, intentalo, no volver a crear uno nuevo, sino revisar el origen de datos, en este caso la tabla en cuestión.. puntualmente eso..

Sobre lo que mencionas que redonder, es posible que te falte definir el nro de decimales, en sql es escala y esta en las propiedades del campo, en access, no sabrá decirte, pero debe ser algo similar.

experto disculpa se puede realizar una búsqueda por fechas en diferentes tablas??

Si se da una pregunta nueva (totalmente distinta a la que origina la consulta actual), lo recomendable es crear una nueva pregunta.

Ademas si tu consulta original ya fue resuelta y superada, lo que esperamos nosotros como "Expertos" es que se cierre la pregunta y tambien se valore la ayuda brindada.

A tu nueva consulta, si es posible, depende mucho de cuanto se parescan rtus tablas o la similitud que se le pueda otorgar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas