Bien un par de cositas con la salvedad de que los datos que dispongo son incompletos. Has subido el código de actualización sobre la tabla "Lista" pero has adjuntado la descripción de la tabla "Venta". Salvando esas distancias voy a suponer que en el código que maneje la tabla ventas utilizas la misma técnica que en la tabla Lista. En base a eso vemos que:
-No hay ningún campo que se refiera a la clave primaria de la tabla (numeroVenta). tampoco adjuntas el código con el que rellenas el formulario. Supongo que lo harás en base al NumeroVenta, que es la clave primaria. Algo así como:
hresult=hcon.edit("Venta","numeroVenta=&1",
<Variable con el número de venta>)
Si lo haces a mano entonces te falta el campo que corresponda a NumeroVenta para que el usuario pueda teclearlo.
-No tienes ningún mecanismo para comprobar si el número que quieres grabar con el edit...update existe o no en la base de datos, por lo que es muy posible que te de fallo, más si no ves en la pantalla qué número estás intentando grabar.
-En el insertar ocurre lo mismo: No hay ningún mecanismo para asegurarse de que la tabla no disponga ya del número que intentas grabar.
Manera de no tener problema con claves duplicadas. Utiliza las claves automáticas de SQLite o simplemente crea un campo que se llame id o rowid (SQLite lo considerará como un sinónimo de su clave automática) y lo declaras como integer PRIMARY KEY AUTOINCREMENT. Este campo se rellenará automáticamente al añadir el registro sin que tú tengas que ponerlo y te servirá como identificativo único para todas las líneas sin miedo a duplicados.
Luego un par de consejos sobre el código:
-No dejes el nombre de los campos por defecto (textbox1, textbox2, etc.) llámalos según lo que vayan a contener. Así la línea de código:
Código:
If TextBox21.Text = "" Then
Message.Info("Debe introducir un Código")
Return ' Si no puse Código vuelvo
Endif
No dice nada de por qué es obligatorio ni de a qué código se refiere. Si el control textBox21 se llamase: tBCodigoProducto, la misma línea sería así:
Código:
If tbCodigoProducto.Text = "" Then
Message.Info("Debe introducir un Código de Producto")
Return ' Si no puse Código vuelvo
Endif
Que es mucho más clara.
Además en las ristras de líneas como esta
Código:
s:
hresult["NumeroVenta"] = TextBox20.text
hresult["Codigo"] = TextBox21.text
hresult["Detalle"] = TextBox22.text
hresult["Costo"] = TextBox23.text
hresult["Modificado"] = TextBox24.text
hresult["Utilidad"] = TextBox25.text
hresult["Stock"] = TextBox26.text
hresult["MinimoStock"] = TextBox27.text
hresult["CantidadPedido"] = TextBox28.text
hresult["Prov1"] = TextBox31.text
hresult["Codigo1"] = TextBox32.text
hresult["prov2"] = TextBox33.text
hresult["Codigo2"] = TextBox34.text
hresult["prov3"] = TextBox35.text
hresult["Codigo3"] = TextBox36.text
hresult["prov4"] = TextBox37.text
hresult["Codigo4"] = TextBox38.text
hresult["prov5"] = TextBox39.text
hresult["Codigo5"] = TextBox40.text
hresult["Ubicacion"] = TextBox29.text
hresult["Comentario"] = TextBox30.text
Imagina que confundes que textbox38 contiene en realidad lo que corresponde a textbox36 o viceversa.
¿Cómo detectar el error? Si ambos fuesen códigos numéricos, por ejemplo, la única manera sería repasar una a una las tablas de códigos hasta darte cuenta de que están cambiados... y eso puede ser una locura. Si pones a cada textbox su nombre significativo es muy fácil detectar el error y, mejor aún, casi imposible cometerlo ( hresul["Codigo1"]=tbCodigo2.text) es muy difícil de teclear sin que te cante el error.
Por último
pero el más importante: Si quieres fiabilidad, sencillez y utilidad en tu programa, normaliza y organiza los datos en distintas tablas. Tal como has diseñado la tabla Venta, has colocado en ella al menos elementos de tres entidades distintas que no deberían estar juntas en la misma tabla:
Las ventas(sinónimo de pedidos)
El inventario
los productos viéndote además, limitado a cinco productos por venta
Esto hace que esta tabla sea endiabladamente compleja de mantener sin errores. Por ejemplo si el código de un producto está en unos pedidos en codigo1, y en otros registros en código2 , etc y te ves obligado a cambiar el código... ¿qué haces? Si cuando llevas 1.000 ventas el proveedor le cambia el nombre al producto...¿qué haces?. Si necesitas recuentos y estadísticas de productos vendidos ¿qué haces?, etc. etc.
Solución: Divide en tablas relacionadas (que para eso SQLite es una base de datos relacional) y verás cómo todo te va mucho mejor.
En Internet hay toneladas de información sobre ello... y si no encuentras ni te aclaras, pregunta, que para eso estamos.
Saludos.