Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Convertir a moneda

Estas en el tema de Convertir a moneda en el foro de Visual Basic clásico en Foros del Web. Hola a todos: A ver si me podeis echar una mano. Estoy trabajando con Visual Basic 6.0, y me conecto mediante ADO a una base ...
  #1 (permalink)  
Antiguo 05/06/2007, 05:03
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Convertir a moneda

Hola a todos:
A ver si me podeis echar una mano.
Estoy trabajando con Visual Basic 6.0, y me conecto mediante ADO a una base de datos SQL.
En una tabla tengo un campo que es moneda, a la hora de modificar dicho campo, me da el siguiente error:
"No esta permitida la conversion implicita del tipo de datos varchar al tipo money, tabla pedidos, columna 'TotalNeto'. Utilice la función CONVERT para ejecutar esta consulta."

En codigo tengo puesto lo siguiente:
vTBase = CDec(TxtTotalBase.Text)
rst.Open "UPDATE Pedido SET CodigoCliente=" & lblIDCliente.Caption & ", " & _
"TotalNeto='" & vTBase & "', ", cnn, adOpenDynamic, adLockOptimistic

No se como hacerlo, si alguien me pudiese ayudar.
Muchas gracias
  #2 (permalink)  
Antiguo 06/06/2007, 09:24
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Re: Convertir a moneda

Cita:
Iniciado por Ana_pm Ver Mensaje
En codigo tengo puesto lo siguiente:
vTBase = CDec(TxtTotalBase.Text)
rst.Open "UPDATE Pedido SET CodigoCliente=" & lblIDCliente.Caption & ", " & _
"TotalNeto='" & vTBase & "', ", cnn, adOpenDynamic, adLockOptimistic

No se como hacerlo, si alguien me pudiese ayudar.
Muchas gracias
bueno te había enviado la respuesta vi MP pero aqui la respuesta.

lo haces de esta manera
Código:
cnn.execute "UPDATE Pedido SET CodigoCliente=" & lblIDCliente.Caption & ", " & _
"TotalNeto=" & vTBase & ""
porque el problema resulta si tedas cuenta tenes vTBase entre '' simples lo que quieres decir que es texto lo único que hice fue quitarle las comillas para interprete es un dato numérico.

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #3 (permalink)  
Antiguo 07/06/2007, 01:56
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

Gracias por responderme, pero eso no me vale me sigue dando error, si le quito las comillas simples me dice: Sintaxis incorrecta cerca de '45'. Y si le pongo las comillas simples me dice que tengo que utilizar la funcion Convert. EL campo de la tabla es de tipo money. No se como solucionar este problemilla. Si tienes idea de algo, hazmela saber.

Muchas gracias
  #4 (permalink)  
Antiguo 07/06/2007, 07:34
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

Con los tipos de datos "especialitos" (me refiero a Moneda, fecha, etc..) hay que cuidar a la perfección el formato de los datos, de lo contrario dará error o tendrá un comportamiento inesperado.

Hablo de una forma genérica, ya que nunca he trabajado con este tipo de datos,eh. Pero es algo que hay que tener muy en cuenta en estos casos..

Pienso que es posible que en el momento en que haces la conversión se pierda ese formato que hay que respetar.

En cualquier caso, yo siempre aconsejo no utilizar estos tipos de datos... cualquier tipo de dato numerico te servirá igualmente bien para hacer lo que tengas que hacer y no te dará estos problemas...

Un saludo
  #5 (permalink)  
Antiguo 08/06/2007, 02:11
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

Ahi te doy la razón, lo más facil sería cambiar el tipo del campo en la tabla pero mi problema que esa tabla se encuantra en una base de datos echa en SQL y ya esta creada, porque estoy modificando el codigo y tengo que buscar una solución, sea como sea.

Si alguien sabe como lo puedo hacer se lo agradeceria.

Muchas gracias a todos
  #6 (permalink)  
Antiguo 08/06/2007, 04:57
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

Si no puedes modificar el campo de la tabla, puedes echar un ojo a las propiedades del campo.

Según el servidor de bases de datos ahí sale el formato que han de tener los datos de ese campo, así podrías utilizar msgbox (provisionales) para mirar, cuando haces la conversión (y en los demás pasos), que ese formato se siga respetando.

Qué usas ? MySQL ? SQL Server ?
  #7 (permalink)  
Antiguo 08/06/2007, 06:04
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

Podrías probar reemplazando:
vtbase por Cdbl(vtbase)
o
vtbase por CONVERT(money, vtbase)
o
vtbase por CAST(vtbase AS money)
  #8 (permalink)  
Antiguo 12/06/2007, 05:17
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

Bueno, acabo de recordar algo que te puede servir !!

Aunque en Visual Basic no hay un tipo de dato "Money" si que se puede dar ese formato a datos utilizando la función Format.

Como todos los tipos especialitos en las bases de datos, realmente son cadenas de caracteres que siguen un formato concreto.

En éste caso, he echado un ojo con el Google para comprobarlo, y he visto que bueno, como me imaginaba el formato del tipo moneda simplemente son 2 o 3 decimales y los miles/millones separados con "."

Resumiendo:

Creo que te funcionará si sustituyes la linea

Código:
vTBase = CDec(TxtTotalBase.Text)
Por ésta:

Código:
vTBase = Format(TxtTotalBase.Text, currency)
Y el INSERT utilizando las comillas simples, como lo tenias ya inicialmente.

Saludos
  #9 (permalink)  
Antiguo 12/06/2007, 05:30
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

Me refiero a usar la función CONVERT o CAST de SQL dentro del string de la sentencia UPDATE y no como función de VB. Atención con las comillas y los tipos de variables de la consulta (vtbase debería ser variant).
  #10 (permalink)  
Antiguo 12/06/2007, 05:57
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

No, lo mejor es que sea tipo string, funcionará igual y, vaya, los Variant hay que evitarlos todo lo posible que consumen demasiado.

Y bueno, por lo que yo he entendido, lo suyo es no modificar la tabla de la base de datos.

Saludos.
  #11 (permalink)  
Antiguo 12/06/2007, 16:36
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

Código:
Dim vTBase As String

MsgBox TxtTotalBase.Text

vTBase = Format(TxtTotalBase.Text, "Currency")

MsgBox vTBase
Ahora con ésto usa la variable vTBase en el INSERT INTO entre comillas simples.


Saludos.
  #12 (permalink)  
Antiguo 15/06/2007, 08:57
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Re: Convertir a moneda

Ya resolviste tu problema..??
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #13 (permalink)  
Antiguo 18/06/2007, 01:35
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

GEOAVILA, aun no lo he resuelto, aunque sigo investigando ya que tengo que terminar el proyecto.

Muchas gracias
  #14 (permalink)  
Antiguo 18/06/2007, 07:19
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

Probá esto:

dim vtbase
vtbase=cdbl(TxtTotalBase.Text)
cnn.execute "UPDATE Pedido SET CodigoCliente=" & lblIDCliente.Caption & ", " & _
"TotalNeto= CONVERT(money, " & vTBase & ")"

Fijate que el separador decimal de vtbase debe ser un punto y no coma
  #15 (permalink)  
Antiguo 19/06/2007, 01:40
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

fero, ya lo he probado y me sigue dando el mismo error, porque me lleva a la base de datos 2500,45 y tendría que llevar 2.500,45, por ese motivo me da el siguiente error:
"No esta permitida la conversion implicita del tipo de datos varchar al tipo money, tabla pedidos, columna 'TotalNeto'. Utilice la función CONVERT para ejecutar esta consulta."

Si sabes algo más hazmelo saber.

Un saludo
Ana
  #16 (permalink)  
Antiguo 19/06/2007, 03:32
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

Para que lleve 2.500,45 es para lo que se usa la opción Currency de la función Format que te dije, no sé porque no funciona entonces.

Mira si a la fuerza tienen que ser dos decimales solo, la función Currency creo que devolvia 3 o 4 decimales, alomejor es cuestión de usarla y luego redondear a solo dos decimales... quizá entonces si que lo admita la base de datos...

Saludos
  #17 (permalink)  
Antiguo 19/06/2007, 20:06
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

Esto permite introducir un registro en la tabla NorthwindCS de Access (SQL Server), donde el campo UnitPrice está definido como money.
Supongo que para UPDATE será lo mismo.

Private Sub Command1_Click()

Dim con As ADODB.Connection
Dim rst As ADODB.Recordset

Dim stprecio As String

Set con = New ADODB.Connection
Set rst = New ADODB.Recordset

Dim sConString As String
Dim sSQLString As String

sConString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" _
& "Persist Security Info=False;Initial Catalog=NorthwindCS;" _
& "Data Source=FP-5GK6908Y5SOV"

con.Open sConString
Debug.Print "Connection opened."

stprecio = "CONVERT(money, '" & Text1.Text & "')"
sSQLString = "INSERT INTO Products (ProductName, SupplierID, CategoryID," _
& "QuantityPerUnit, UnitPrice) VALUES ('producto', 12, 2, '15', " & stprecio & ")"
Debug.Print sSQLString

Set rst = con.Execute(sSQLString)

con.Close
End Sub

Fijate que el separador decimal de mi sistema es la coma (,), y el separador de miles el punto. Pero para que esto funcione, el separador decimal en el textbox debe ser el punto.

Última edición por fero; 21/06/2007 a las 19:34 Razón: falta una línea de código
  #18 (permalink)  
Antiguo 21/06/2007, 03:05
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

wow solucionado, no ? jeje ya era hora !!!

Saludos
  #19 (permalink)  
Antiguo 22/06/2007, 03:58
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

No lo se ya que estoy con otro proyecto que corre más prisa, cuando lo retome os enterareis.

Muchas gracias
Ana
  #20 (permalink)  
Antiguo 22/06/2007, 04:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 450
Antigüedad: 17 años, 2 meses
Puntos: 3
Re: Convertir a moneda

jaja si la cosa es darle emoción..
  #21 (permalink)  
Antiguo 27/06/2007, 01:34
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

Ya he vuelto.
Fero, he probado lo que me dijiste, pero no ha dado resultado, me sale un error en el que dice:
Sintaxis incorrecta cerca de la palabra clave 'Convert'.

Sigo buscando alguna solución.

Si sabes algo mas hazmelo saber.

Saludos a todos
Ana
  #22 (permalink)  
Antiguo 27/06/2007, 05:13
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

El código que yo puse antes funciona bien en SQL Server 2000. No da ningún error, lo he probado. Podrías postear el código completo del procedimiento donde haces la consulta UPDATE y la conexión a la BD?
  #23 (permalink)  
Antiguo 27/06/2007, 05:24
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

Public Sub AbrirADO()
'Por si esta abierta la BBDD
Set cnn = Nothing
Set rst = Nothing

'Creamos los objetos
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset

'Abrimos la base
cnn.Open "Provider=SQLOLEDB; " & _
"Initial Catalog=" & BDSelec & "; " & _
"Data Source=10.0.0.6; " & _
"integrated security=SSPI; persist security info=True;"
End Sub

Public Sub CerrarADO()
rst.Close
cnn.Close
End Sub


AbrirADO 'Abrimos la base de datos (ver ModuloGeneral)

Dim Cadena As String
valor = "CONVERT(Money, '" & txtTotalBase.Text & "')"

rst.Open "UPDATE Pedido SET CodigoCliente=" & lblIDCLiente.Caption & ", " & _
"CodigoUsuario=" & frmMain.SBLanzador.Panels(1).Text & ", " & _
"ReferenciaCliente='" & txtPedido.Text & "',FechaAlta= '" & txtFecha.Text & "', " & _
"FechaCompromiso='" & txtFechaEntrega.Text & "',CodigoEstado=" & lblEstado.Caption & ", " & _
"Observaciones='" & txtObserPedido.Text & "',Semaforo='V', " & _
"CodigoAlmacen=" & lblIDAlmacen.Caption & ",CodigoDireccion=" & lblIDDireccion.Caption & ", " & _
"DctoProntoPago=" & txtDtoPP.Text & ",DctoOtros1=" & txtDtoca1.Text & ", " & _
"DctoOtros2=" & vNum & ",DctoOtros3=" & vNum & ",ImporteDctoDirecto=Null, " & _
"CodigoPeriodicidad=" & lblIDPeriodicidad.Caption & "," & valor & ", " & _
"TotalDctoProntoPago='" & txtTotalDtoPP.Text & "', " & _
"TotalDctoOtros='" & txtTotalDtoCabecera.Text & "',TotalImpuestos='" & txtTotalIva.Text & "', " & _
"Total='" & txtTotalAlbaran.Text & "',CosteTotal='" & txtTotalCostePedido.Text & "', " & _
"CodigoAgente1=" & lblIDAgente.Caption & ",CodigoAgente2OK=" & lblIDAgente2.Caption & ", " & _
"NumExpediente='" & txtExpediente.Text & "',ValorRecargo='" & txtRecargo.Text & "', " & _
"CodigoMedioPAgoCobro =" & lblIDMedioPago & ",Nota='" & txtNota.Text & "', " & _
"IDRiesgosEMP=" & lblIDEmpresaRiesgo & " WHERE CodigoPedido=" & frmPedidoCliente.Caption & ";", cnn, adOpenDynamic, adLockOptimistic

CerrarADO 'Cerramos la base de datos (ver ModuloGeneral)

Ahi lo tienes, espero que puedas ayudarme. Muchas gracias
  #24 (permalink)  
Antiguo 27/06/2007, 18:23
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

Falta el nombre del campo que es igual a valor, por ejemplo

....... & "UnitPrice=" & valor & ..........
  #25 (permalink)  
Antiguo 28/06/2007, 07:45
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

Gracias por avisarme no me habia dado cuenta , fero, pero me da otro error distinto, es el siguiente:
"No se puede convertir un valor char a money. La sintaxis del valor char no es correcta."

Entonces he declarado las variables
Dim valor, precio as Currency

y me sigue dando error: "No coinciden los tipos"

No se como hacerlo.

Saludos
Ana
  #26 (permalink)  
Antiguo 28/06/2007, 18:33
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

El dato de precio que tenés en txtTotalBase.text no puede tener formato moneda, es decir no puede ser, por ejemplo:
12.325,50
sino que debe ser
12325.50
en formato USA.
Tampoco puede tener el signo moneda ($ o lo que sea).

Probemos esto:
Escribí la sentencia SQL como variable string:

SQL_str = "UPDATE Pedido SET ... " (completa hasta el final)
Debug.Print SQL_str 'agregar esto para depurar
rst.Open SQL_str, cnn, adOpenDynamic, adLockOptimistic

y posteá el resultado de la ventana inmediato para ver los valores y tipos.
  #27 (permalink)  
Antiguo 29/06/2007, 01:30
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Convertir a moneda

Gracias a todos, ya lo consegui resolver con ayuda vuestra.
Lo que me faltaba era el Cdbl, lo pongo por si acaso a alguien le ocurre lo mismo:
valor = "CONVERT(Money, " & CDbl(TxtTotalBase.Text) & ")"

Y va sin comillas simples.

Muchas gracias, fero por el interes prestado y a todos

Saludos
Ana
  #28 (permalink)  
Antiguo 29/06/2007, 04:13
 
Fecha de Ingreso: mayo-2007
Mensajes: 74
Antigüedad: 17 años
Puntos: 1
Re: Convertir a moneda

Por fin!!!
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:20.