Guardar un código de barras desde visual a access

Estoy realizando un proyecto en visual basic y necesito guardar productos con código de barras. El tema es que todavía no logro encontrar la manera de que no me salga un desbordamiento.
Lo que hago es escribir el código de barras en un txt y luego cargo el stock del producto en otro form y el código me lo coloca en un label (desde acá lo guarda en la base de datos) ahí es donde me salta desbordamiento y no le encuentro la solución.
Si alguien me podría ayudar se lo agradecería...
Respuesta
1
Lo más probable es que el tipo de dato que estás usando no logre contener la longitud del código de barras. Lo más seguro es que estés usando Número - Entero Largo. Prueba a utilizar Número - Double y me dices qué tal te funciona.
Hola muchas gracias por contestar a mi pregunta la verdad no lo tenia en cuenta voy a probarlo y después te cuento que tal me fue. Desde ya muchas gracias
Saludos
OK... Si funciona, no olvides finalizar la pregunta, si no funciona, le buscaremos un ajuste.
Hola de nuevo. Intente lo que me recomendaste y me sigue tirando error hay algo que no logro hacer bien si podrías explicarme en código como realizarlo te lo agradecería.
Este es mi código
Private Sub MostrarDatoSelect()
  Dim dato As String
  Dim sq As String
  'Dato para pasar al sql
  dato = Combo1.List(Combo1.ListIndex)
  sq = "Select proveedor,codigo,stock,costo FROM productos WHERE nombre='" & dato & "'"
  'Ejecutamos la consulta
  Set recEntradaPro = Base_de_datos.OpenRecordset(sq, dbOpenDynamic, 0, dbOptimistic)
    'Nombre del Proveedor
    Label1(3) = "Proveedor: " & UCase$(recEntradaPro!proveedor)
    'el stock Actual
    Label1(4) = "Stock Actual: " & CInt(recEntradaPro!stock)
    'Mostramos el código aca es donde tira el desbordamiento
    Label1(7) = CInt(recEntradaPro!Codigo)
    'Mostramos en el Text el costo de ese producto
    Text1(0) = recEntradaPro!costo
End Sub
despues con un command guardo el registro con el stock en la base de datos
Private Sub guardarCambios(cod As Integer, cos As Double, sto As Integer)
Dim sql As String
If Text1(0) = "" Or Text1(1) = "" Then
  MsgBox "Los campos Costo y cantidad no pueden estar vacíos", vbInformation + vbOKOnly, ""
Exit Sub
End If
If MsgBox("¿Está seguro de guardar los cambios", vbQuestion + vbOKCancel, "GestorVideo") = vbNo Then
  Exit Sub
Else
'Consulta que utiliza un Update para guardar los cambios
sql = "UPDATE Productos SET costo = '" & FormatCurrency(cos) & "', stock = stock + '" & sto & "' WHERE codigo = " & cod & ""
Set recEntradaPro = Base_de_datos.OpenRecordset(sql, dbOpenDynamic, 0, dbOptimistic)
FormPrincipal.Primer_Registro recProductos, "Productos"
End If
End Sub
Private Sub Command1_Click(Index As Integer)
Select Case Index
  Case 8
    If Combo1.ListIndex = -1 Then MsgBox "No hay ningùn Producto seleccionado", vbExclamation + vbOKOnly, "Error": Exit Sub
    guardarCambios CInt(Label1(7)), Text1(0), CInt(Text1(1)): Text1(1) = ""
  Case 9: Unload Me
  End Select
End Sub
este es mi codigo y me salta el desbordamiento cuando le quiero guardar los cambios al registro previamente ingresado en la base de datos y al guardar el codigo de barras me tira el error.
Te agradecería si lo pudieras chequear.
Desde ya muchas gracias. Saludos...
Me dices:
'Mostramos el código aca es donde tira el desbordamiento
 Label1(7) = CInt(recEntradaPro!Codigo)

Mi pregunta es ¿Cuántos dígitos tiene el código de barra que usas?
Un número de tipo entero reserva 16 bits (2 bytes) para representar los números, utilizando 15 para la cifra y 1 para el signo, por tanto el número máximo que puedes guardar en una variable de tipo entero es (2^15)-1, o sea 32765, si tu código de barra es mayor que eso, te lanza el desbordamiento. Por tanto, te recomiendo utilizar CLng() en lugar de CInt().
Te dejo un enlace para que veas el tamaño que soporta cada tipo.
Hola de nuevo la verdad no se por que no lo puedo solucionar.
¿Cómo declaro la variable doble en mi código y como lo reemplazo en el label donde me muestra el código?
Si pudieras ayudarme seria bárbaro.
Gracias. Hasta luego
Hasta donde veo, no es necesario que declares una variable long en tu código, pero de requerirlo seria
(Para el contexto del procedimiento)
Dim tuVariable as Long
Y para asignarlo al label, es prácticamente lo mismo que como lo estás haciendo, pero en lugar de utilizar CInt utilizas CLng, aunque ni siquiera eso es necesario, ya que puedes hacer una asignación de esta forma
Label1(7) = recEntradaPro!Codigo
Pero si por cualquier motivo requieres la conversión, lo tendrías que hacer asi:
Label1(7) = CLng(recEntradaPro!Codigo)
Ahora me tira error '94' uso no válido de null, la verdad ya no se que hacer.
Pero bueno si podes contestarme de 10 si no no hay problema.
Gracias
No tengo problemas en ayudarte, pero debes ser más explícito. Visual Basic, por lo general, te indica el lugar en que se ha cometido el error. Si me indicas el lugar, mi respuesta puede ser más precisa.
Vamos por la respuesta entonces:
Si estamos hablando del mismo módulo, el error debe estar en una de las siguientes líneas
'Nombre del Proveedor
Label1(3) = "Proveedor: " & UCase$(recEntradaPro!proveedor)
'el stock Actual
Label1(4) = "Stock Actual: " & CInt(recEntradaPro!stock)
'Mostramos en el Text el costo de ese producto
Text1(0) = recEntradaPro!costo
'''''''''''''''''''''''''''''''''''''''''''''''''
Descarto esta
'Mostramos el código aca es donde tira el desbordamiento
Label1(7) = CInt(recEntradaPro!Codigo)
porque asumo que el código de barras no puede ser nulo.
El error lo está arrojando aquel campo al que no le ha sido asignado un valor en la base de datos (o sea, es nulo. Nótesde que Nulo no es lo mismo que cadena vacía ""). En tal caso lo que podrías hacer es asegurarte de que a cada campo de la base de datos le haya sido asignado un valor (haya sido inicializado) o bien, hacer las asignaciones anteriores de la siguiente forma:
'Nombre del Proveedor
Label1(3) = "Proveedor: " & IIf(IsNull(recEntradaPro!proveedor), "", UCase$(recEntradaPro!proveedor))

'el stock Actual
Label1(4) = "Stock Actual: " & IIf(IsNull(recEntradaPro!stock), "", CInt(recEntradaPro!stock))

'Mostramos en el Text el costo de ese producto
Text1(0) = IIf(IsNull(recEntradaPro! Costo), "", recEntradaPro! Costo)

Toto esto, asumiendo que el error está en una de las tres líneas anteriores, de no ser así, me debes indicar el lugar en que te marca el error.
Te dejo como tarea averiguar sobre la función IIf.
Ok muchas gracias voy a intentar de esa manera y luego te cuento que tal me resulto.
Después lo pruebo y te respondo como me quedo.
Desde ya muchas gracias.
Hasta luego
Ok... si estas conforme con la respuesta, no te olvides finalizar la pregunta y si aun quedan dudas, ya las iremos resolviendo.
Hola de nuevo. Mira le hice lo que me pasaste y me sigue tirando error. Te explico yo cuando cargo no completo todos los campos me quedan vacíos por que no necesito que estén todos, algunos se saben pero otros no son necesarios para guardarlos.
'Nombre del Proveedor
Label1(3) = "Proveedor: " & IIf(IsNull(recEntradaPro!proveedor), "", UCase$(recEntradaPro!proveedor))
'el stock Actual
Label1(4) = "Stock Actual: " & IIf(IsNull(recEntradaPro!stock), "", CInt(recEntradaPro!stock))
'Mostramos el código
    Label1(7) = "Codigo: " & IIf(IsNull(recEntradaPro!codigo), "", CInt(recEntradaPro!codigo))
'Mostramos en el Text el costo de ese producto
Text1(0) = IIf(IsNull(recEntradaPro!costo), "", recEntradaPro!costo)
le coloque esto y me tira error de valor null en :
'Mostramos el código
    Label1(7) = "Codigo: " & IIf(IsNull(recEntradaPro!codigo), "", CInt(recEntradaPro!codigo))
El tema es cuando yo armo los campos en la base de datos le pongo requerido "NO".
Te pregunto no sera el problema de que me tenga que pasar el código que esta en el text, que es donde 1º lo cargo, y después me lo tiene que pasar al label de la 2ª ventana, ¿no sera ahí el problema que no me este tomando del text hacia el label?
Bueno eso por ahora muchas gracias. Nos vemos
Aleja...
Unas pequeñas correcciones
'Nombre del Proveedor
Label1(3) = "Proveedor: " & UCase$(IIf(IsNull(recEntradaPro!proveedor), "", recEntradaPro!proveedor))
'el stock Actual
Label1(4) = "Stock Actual: " & CInt(IIf(IsNull(recEntradaPro!stock), 0, recEntradaPro!stock))
'Mostramos el código
    Label1(7) = "Codigo: " & CDbl(IIf(IsNull(recEntradaPro!codigo), 0, recEntradaPro!codigo))
'Mostramos en el Text el costo de ese producto
Text1(0) = IIf(IsNull(recEntradaPro!costo), 0, recEntradaPro!costo)
Esto sí debería funcionar.
Creo que con un Long también te vas a quedar corto para el código, así que utilicé un double, aunque en el contexto en que lo estás utilizando, no sé si sea necesario utilizar conversores.
Hola.
Mira me tira 0 cuando pasa el código al label1(7).
Y al quieres guardarlo me dice que no coinciden los datos:
Private Sub Command1_Click(Index As Integer)
Select Case Index
  Case 8
    If Combo1.ListIndex = -1 Then MsgBox "No hay ningùn Producto seleccionado", vbExclamation + vbOKOnly, "Error": Exit Sub
'es en esta linea que me tira que coinciden los datos 
guardarCambios CInt(Label1(7)), Text1(0), CInt(Text1(1)): Text1(1) = ""
  Case 9: Unload Me
  End Select
End Sub
y eso es.
Saludos
Aleja
Si te tira 0, quiere decir que recEntradaPro! Código es nulo o cero (revisa por qué te da eso)
Para intentar averiguar por qué te tira el otro error necesito saber cómo es la declaración de la función o procedimiento guardarCambios
¿Ya no tienes el problema de desbordamiento ni uso incorrecto de Null?
Este es el procedimiento de guardarcambios:
Private Sub guardarCambios(cod As Integer, cos As Double, sto As Integer)
Dim sql As String
'Antes de guardar validamos
If Text1(0) = "" Or Text1(1) = "" Then
  MsgBox "Los campos Costo y cantidad no pueden estar vacíos", vbInformation + vbOKOnly, "GestorVideo"
Exit Sub
End If
'Preguntamos si está seguro de guardar los cambios
If MsgBox("¿Está seguro de guardar los cambios", vbQuestion + vbOKCancel, "GestorVideo") = vbNo Then
  Exit Sub
Else
'Consulta que utiliza un Update para guardar los cambios
sql = "UPDATE Productos SET costo = '" & FormatCurrency(cos) & "', stock = stock + '" & sto & "' WHERE codigo = " & cod & ""
Set recEntradaPro = Base_de_datos.OpenRecordset(sql, dbOpenDynamic, 0, dbOptimistic)
FormPrincipal.Primer_Registro recProductos, "Productos"
End If
End Sub
no me da mas el eror de valor nulo, lo que me di cuenta es que aunque le ponga un codigo de 1 digito me devuelve un cero pero deberia pasarlo por que lo pasaba bien cuando eran pocos numeros, la verdad no se, pero bue lo voy a ver..
Ese es el código de guardarcambios.
El error te lo podría estar arrojando el segundo parámetro, prueba a hacer la llamada de esta forma:
GuardarCambios CInt(Label1(7)), Cdbl(Text1(0)), CInt(Text1(1))
Si te sigue arrojando el error, asegúrate de que todos los datos que le estas entregando son numéricos.
Hola nuevamente:
Mira es un problemón jaja. El tema es así ahora cuando voy a querer modificar un registro que ya estaba incluido con código le agrego el código y me lo guarda perfectamente. El tema es que cuando quiero ingresar un producto nuevo me lo guarda todo bien pero sin código y sin stock aunque me lo guarde por que lo guarda de la ventana donde lo ingreso.
Ahora te pregunto ¿no me seria más fácil ingresarlo ya con código y todo sin tener que mostrarlo en otra ventana?
Hola de nuevo. Estuve modificandole un poco el código y es que le había dejado sin marcar la linea donde me guarda el campod el código por eso era que me tiraba cero. Pero el problema que me surge ahora de nuevo es el desbordamiento en el label1(7) y lo hice como vos me pusiste, el tema es que otro código más corto me lo guarda. Espero que me entiendas desde ya muchas gracias.
En realidad, esa es una preguntas que puedes responder mejor tú que yo, ya que tu tienes conocimiento de la estructura de la base de datos, los tipos de datos que estas usando y además la forma en que estás insertando.
Te recomiendo que finalices esta pregunta y reformules la que ahora tienes entregándome antecedentes claros y ojalá la sección de código que te genera el problema, pues se me hace complicado imaginar lo que me dices.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas