Cuál es la estructura correcta para almacenar en una variable de VB un dato de tipo moneda?

Estoy tratando de actualizar un campo de tipo moneda en Access 2016 desde Excel; pero tengo la siguiente duda en esta línea y específicamente en la escritura de la variable CostEstandar, ya que tengo entendido que cuando se trata de un valor tipo moneda no debe llevar comillas:

ConsultarBD= " update PRODUCTOS set Cantidad_Actual = "  & " ' " &  CantAct & " ' ," &  "Costo_Estandar =  "  & " ' " &  CostEstandar & " ' "  & " where IdDetalle= " & iddetalle

Al ejecutar la rutina para actualizar este campo, me manda el siguiente error:

"error de sintaxis en la instrucción UPDATE"

La variable "CostEstandar" la he declarado com tipo  Double. ¿Cuál es la forma correcta para que la variable guarde este tipo de datos en la tabla de Access esta?.

1 respuesta

Respuesta
1

Tienes mal las comillas alrededor de los dos valores, porque tanto los campos Cantidad_Actual y Costo_Estandar son campos con datos de tipo numérico (un campo moneda es un tipo especial de campo numérico). Además con tanto separar todo con &, lo único que consigues es liar la escritura de la cadena

La SQL correcta sería:

ConsultarBD= " update PRODUCTOS set Cantidad_Actual = "  &  CantAct & ", Costo_Estandar = "  &  Str(CostEstandar)  & " where IdDetalle= " & iddetalle

Fíjate que con la variable CostEstandar uso la función Str para evitar errores si contiene valores decimales e interpreta la coma decimal como separador de campos.

Además, la variable CostEstandar, si bien la puedes declarar como double, yo lo haría como Currency (Dim CostEstandar As Currency), que es la declaración específica para los valores de tipo moneda

Gracias por la ayuda y por la aclaración, le comento que he aplicado su ejemplo a la tabla Productos y me ha funcionado muy bien utilizando solo dos variables. Ahora  estoy tratando de construir una consulta más amplia para actualizar la tabla DetallePedidos de Access la cual contien varios campos de tipo Currency(moneda), String(texto), Date(fecha) y Integer(entero). Tomando en cuenta sus comentarios anteriores,  me gustaría saber cuál es la sintaxis  para variables de tipo fecha, le comparto mi consulta y las declaración de las variables, con el fin de que me ayude a corregir errores de escritura y el uso excesivo de "&" como me lo sugiere para evitar liar la cadena, ya que es mi primera practica del lenguaje sql y no tengo la experiencia necesaria, muchas gracias.

    Dim descripcion, giro, numreq, nomcategoria, memorandum, dicttec, nconcurso, _

 notagral, proveedoradjud, lugarentrega, comentproveed, comententradas, numsalida,  comentsalida As String

    Dim cantidadtaller, cantidadunit, cantrecibida As Integer

    Dim preciounit, preciorecibido As Currency

    Dim fecharecep, fechafallo, fechaentrega, fechaentrada, fechasalida As Date

consultaBD= " update DetallePedidos set  Descripcion = " & "'" & descripcion & "'",   PrecioUnit = " & Str(preciounit) & ",  & "NomCategoria = " & "'" & nomcategoria & "'," & "NumReq = " & "'" & numreq & "'," & "Giro = " & "'" & giro & "'," & "CantidadTaller = " & cantidadtaller & ", &  "Memorandum = " & "'" & memorandum & "'," & "DictTéc = " & "'" & dicttec & "'," & "FechaRecep = " & fecharecep & ", & "NConcurso = " & "'" & nconcurso & "'," & "FechaFallo = " &  fallo & ", & "NotaGral = " & "'" & notagral & "',"  &  "ProveedAdjud = " & "'" & proveedoradjud & "'," & "FechaEntrega = " & fechaentrega & ",  & "LugarEntrega = " & "'" & lugarentrega & "'," & "ComentProveed= " & "'" & comentproveed & "'," & "CantUnit = " & cantidadunit & ", & "CantRecibida = " & cantrecibida & ", & "FechaEntrada = " & fechaentrada & ", &"ComentEntradas = " & "'" & comententradas & "'," & "Numsalida = " & "'" & numsalida & "'," & "FechaSalida = "  & fechasalida & ", & "ComentSalida = " & "'" & comentasalidas & "'", PrecioRecibido = " & Str(preciorecibido) & " where IdDetalle= " & iddetalle

Nota: La variable numsalida almacena datos alfanuméricos motivo por el cual la he declarado de tipo String.

Primer error: cuando pones:

Dim preciounit, preciorecibido As Currency

Estás declarando la variable preciounit como Variant y preciorecibido como Currency. Si quieres usar un solo Dim para declarar varias variables, tienes que indicar expresamente de qué tipo van a ser: Dim preciounit As Currency, preciorecibido As Currency

Lo mismo con todas las otras declaraciones.

Segundo error: en SQL y en VBA, los datos de tipo texto van entre comillas simples ('), lso de fecha entre almohadillas (#) y los números van directamente. Además, en el caso concreto del lenguaje SQL, a las fechas es aconsejable darles formato americano (mm/dd/aaaa), que es el que entiende bien.

Para evitar el uso de tantos &, lo único que debes hacer es escribir seguido todo aquello que no es una variable:

consultaBD= " update DetallePedidos set  Descripcion = '" & descripcion & "', PrecioUnit = " & _ 
Str(preciounit) & ", NomCategoria = '" & nomcategoria & "', NumReq = '" & numreq & "', Giro = '" & _
giro & "', "CantidadTaller = " & cantidadtaller & ", Memorandum = '" & memorandum & "', [DictTéc] = '" & _
dicttec & "', FechaRecep = #" & Format(fecharecep,"mm/dd/yyyy") & ", NConcurso = '" & nconcurso & "', FechaFallo = #" &  _
Format(fallo,"mm/dd/yyyy") & "#, NotaGral = '" & notagral & "', ProveedAdjud = '" & _
proveedoradjud & "', FechaEntrega = #" & Format(fechaentrega,"mm/dd/yyyy") & "#, LugarEntrega = '" & _
lugarentrega & "', ComentProveed= '" & comentproveed & "', CantUnit = " & cantidadunit & ", CantRecibida = " & _
cantrecibida & ", FechaEntrada = #" & Format(fechaentrada,"mm/dd/yyyy") & "#, ComentEntradas = '" & _
comententradas & "', Numsalida = '" & numsalida & "', FechaSalida = #"  & _
Format(fechasalida,"mm/dd/yyyy") & "#, ComentSalida = '" & comentasalidas & "', PrecioRecibido = " & _
Str(preciorecibido) & " where IdDetalle= " & iddetalle

Si no lo haces así, has de fijarte que cada vez que abres una comilla doble, mientras no la cierres, todo lo que vaya en medio lo va a interpretar como una cadena de texto.

Por ejemplo aquí ya te dará un error:

 update DetallePedidos set  Descripcion = " & "'" & descripcion & "'",   PrecioUnit = " &

Porque la coma y todo lo que sigue, está fuera de las comillas y no está encadenado por &. Y así tienes varios casos más

¡Gracias! 

Pondré manos a la obra y tendré muy presente sus valiosos comentarios y observaciones.

Que tenga una excelente tarde.

Saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas