Visual Basic - INGRESAR Y ACTUALIZAR EN BD(ADO)

Life is soft - evento anual de software empresarial
 
Vista:

INGRESAR Y ACTUALIZAR EN BD(ADO)

Publicado por CATITA ZARATE (1 intervención) el 01/03/2006 00:30:09
Hola el problema es el siguiente: estoy ingresando datos desde un MSHFlexGrid1 a las tablas venta, detalle_factura1 y bodega(en este caso al ingresar el producto si ya existe en stock actualizo la cantidad de lo contrario queda ingresado como nuevo ). el codigo me marca el siguiente error “los cambios solicitados en la tabla no se realizaron correctamente porque crearian valores duplicados en el indice, clave principal o relacion ” por si acaso soy casi nueva en programacion en ADO. al compilar la sombra amarilla me indica el error en la parte del cnn.execute “insert into bodega….. (no me permite copiar de una tabla a otra)

NOTA: el codigo del cmd_ing(command button) me trabaja bien en DAO .obiamente remplazando los siguiente:
cnn.execute por base.execute
Public cnn As Connection por Public base As Database
Public rstabla As Recordset por lo mismo
Set cnn = New Connection por Set base = OpenDatabase("lacteos.mdb")
Set rstabla = New Recordset por Set rstabla = base.OpenRecordset("bodega")
REFERENCIAS:
Microsoft activex data objects 2.5 library Por Microsoft DAO 3.51 object library

volviendo al problema principal espero su ayuda por favor
graciaaas……chaooo…..
CATITA ZARATE

TABLAS DE LA BD (lacteos.mdb)

VENTA:
Nro_factura(clave)(numerico)
Fecha_venta(fecha/hora)
Fecha_vencimiento(fecha/hora)
Codigo_cliente(numerico)
Monto_venta(numerico)
Forma_pago(texto)

DETALLE_FACTURA1:
Nro_factura(clave compuesta)(numerico)
Codigo_producto(clave compuesta)(texto)
Cantidad_producto(numerico)
Nombre(texto)
Precio(numerico)
unidad_caja(texto)
monto_total(numerico)

BODEGA:
Codigo(clave)(texto)
Descripción(texto)
Seccion(texto)
Valor(numerico)
Stock(numerico)
Unidad_caja(texto)

‘CODIGO DEL PROGRAMA CON PROBLEMAS :
Private Sub cmd_ing_Click()
Dim A As String, B As String, C As String, Z As Integer
Dim D As String, E As String, F As String
If MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1) = "" Then
MSHFlexGrid1.Rows = MSHFlexGrid1.Rows - 1
End If

'ingresar nro factura y datos del cliente
cnn.Execute " insert into venta(nro_factura, codigo_cliente, fecha_venta, fecha_vencimiento,forma_pago) values ( ' " _
& Trim(txt_fac) & " ',' " & Trim(txt_cod) & " ',' " & Trim(txt_fech) & " ',' " & Trim(txt_fecha) & " ',' " & Trim(txt_pag) & " ' )"
For Z = 1 To MSHFlexGrid1.Rows - 1
MSHFlexGrid1.Row = Z
A = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1)
B = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2)
C = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 3)
D = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 4)
E = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 5)
F = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 6)

'registrar factura
cnn.Execute "insert into detalle_factura1(nro_factura,codigo_producto, nombre, precio, unidad_caja, cantidad_producto, monto_total) values(' " & Trim(txt_fac) & " ',' " & A & " ',' " _
& B & " ',' " & C & " ',' " _
& D & " ',' " & E & " ',' " _
& F & " ') "

‘ingresar o actualizar el stock en bodega
cnn.Execute " update bodega set stock = stock + " & E & " where codigo = ' " & A & " ' "
cnn.Execute "insert into bodega(codigo, descripcion, valor, stock, unidad_caja)" _
& " select codigo_producto, nombre, precio,cantidad_producto, unidad_caja from detalle_factura1 " _
& " where detalle_factura1.nro_factura = " & Trim(txt_fac) & " "
Next Z
limpiar
MSHFlexGrid1.Rows = 1
cmd_ing.Enabled = False
End Sub

Private Sub Form_Load()
Set cnn = New Connection
Set rstabla = New Recordset
With cnn
.Provider = "microsoft.jet.oledb.4.0"
.ConnectionString = "c:\lacteos.mdb"
.Open
End with
End Sub

GENERAL DECLARACIONES
Public cnn As Connection
Public rstabla As Recordset

Microsoft activex data objects 2.5 library
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:INGRESAR Y ACTUALIZAR EN BD(ADO)

Publicado por ed (13 intervenciones) el 01/03/2006 00:53:24
lo que pasa es que este codigo primero actualiza y luego inserta sin preguntar si ya existe el stock justo en la parte que ocurre el error. Tienes que hacer una condicion que busque si ya existe el codigo A en tu tabla bodega y de acuerdo a eso que actualize o que inserte el registro.

‘ingresar o actualizar el stock en bodega
set rsEncuentra = cnn.execute("select * from bodega where codigo = ' " & A & " ' "
if rsEncuentra.recordcount > 0 then
cnn.Execute " update bodega set stock = stock + " & E & " where codigo = ' " & A & " ' "
else
cnn.Execute "insert into bodega(codigo, descripcion, valor, stock, unidad_caja)" _
& " select codigo_producto, nombre, precio,cantidad_producto, unidad_caja from detalle_factura1 " _
& " where detalle_factura1.nro_factura = " & Trim(txt_fac) & " "
end if
rsencuentra.close
set rsencuentra = nothing

recuerda poner la declaracion
Public rsEncuentra as recorset
al inicio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar