Por Favor necesito Ayuda!!!!!!!!!

ehilen
09 de Diciembre del 2005
Hola a todos, mi nombre es Patricia y necesito que me ayuden, estoy desarrollando una seccion de un sistema que tiene por objetivo llevar el control de ingresos y egresos de medicamentos de una farmacia de un hospital, me toco desarrollar la seccion de Ingresos de medicamentos el cual se puede realizar por las siguientes transacciones: Licitacion, Concurso de Precio, Compra Directa y por ultimo Donaciones que puedan hacer otras instiuciones a la farmacia, pero me salta un error en la operacion de "Modificar datos de una Licitacion", para esta operacion de modificar conecto 4 tablas que son : Licitacion, InsumoLicitacion, Insumos y Subgrupo, para ello utilizo un datagrid que me muestra algunos campos de estas 4 tablas, esto lo hago en el evento Form_Load de la siguiente manera:

Private Sub Form_Load()
Dim adoModificarDatos as Recordset
Dim StrSQL as string

Set adoModificar Datos = New Recordset
StrSQL="Select Insumo.CgoInsumo, Insumo.Nombre, Insumo.CgoSubgrupo, " & _ "Subgrupo.NombreSubgrupo, Insumo.Presentacion, " & _
"Insumo.PrecioUnitario, Insumo.CantidadMinima, " & _
"InsumoLicitacion.CantidadAdjudicada, InsumoLicitacion.CantidadEntregada, " & _ "InsumoLicitacion.CantidadPendiente, InsumoLicitacion.FchaVencimiento " & _ "from Licitacion INNER JOIN ((Subgrupo INNER JOIN Insumo ON " & _
"Subgrupo.cgosubgrupo =Insumo.CgoSubgrupo) INNER JOIN " & _
"InsumoLicitacion ON Insumo.CgoInsumo = InsumoLicitacion.CgoInsumo) " & _
"ON Licitacion.NroComprobanteL=InsumoLicitacion.NroComprobanteL " & _
"Where(((Licitacion.NroComprobanteL) Like '" & FRMLICITACION.MascaraLicitacion(0).text ' ))"

With adoModificarDatos
.open strSQL, db, adopenkeyset, adLockOptimistic
Set Datagrid1.DataSource = adoModificarDatos
With Datagrid1
.AllowUpdate=true
.AllowAddNew=False
.AllowDelete=false
.AllowRowSizing=False
...............................y asi hago uso de otras propiedades del datagrid......
es un data grid que posee 11 columnas que son campos de las distintas tablas antesmencionadas, de las cuales solo permito que se modifiquen 4 campos el que son: el CgoSubgrupo (es un numero que indica que permite clasificar a los medicamentos en distintos tipos de grupos por ejemplo: anestesicos, parenterales, medicamentos, y otros), l precio del medicamento, su cantidad minima (que es la cantidad minima ideal que deberia de existir en farmacia no deberia existir una cantida inferior a esta), y la fecha de vencimientos del medicamento, solo estos 4 columnas.-
Bueno he seguido mi codigo paso a paso (con F8), y vi que hace lo siguiente:
cuando analiza el datagrid entra en los siguientes eventos del mismo:
1 . Entra al evento Datagrid1_BeforeColUpdate
2. Entra al evento Datagrid1_AfterColUpdate
3. Entra al evento Datagrid1_AfterColEdit
4. Entra al evento Datagrid1_BeforeUpdate
y es aqui donde me salta una ventana que me muesta el siguiente error:

"Los cambios solicitados en la tabla no ser realizaron correctamente porque crearian valores duplicados en el indice, clave principal o relaciones, cambie los datos en el campo o los campos que contiene datos duplicados, quite el indice para permitir entradas duplicadas e intentelo de nuevo"

Segun la ayuda de visual, me dice que el el evento beforeUpDate, se produce antes de que los datos de un control datagrid pasen al bufer de copia de control.
en realidad yo ve el cambio en la fila del datagrid que he modificado, pero cuando hago click en cualquier otra fila es cuando salta el erro escrito arriba.

La pregunta del millon es: como solucion este error
porque en realidad cuando voy a hacer los cambios en los eventos del datagrid, yo trabajo sobre un tabla especifica ya no sobre las 4 tablas, es ahi cuando utilizo los metodos Update pero, no se si esto se puede solucionar utilizando la Sentencia UPDATE en vez de Select que utilizo cuando conecto el datagrid1 a las tablas por favor ayudenme.....................gracias Patricia


mvallejos
09 de Diciembre del 2005
Patricia

No uses las grillas para modificar o agregar datos, simpre dan este tipo de conflictos.
Mi sano consejo es que muestres todos esos datos en un Datagrid de Solo lectura, cuando seleccionas un registro, replicas todos esos datos en labels y cajas de texto, esto te puede facilitar que el usuario modifique solo lo que debe modificar.
Utiliza el evento RowColChange del DataGrid para colocar todos los datos en los textos cada vez que se seleccione una fila.
Desde un botón Grabar, puedes usar el ansi sql para actualizar el registro
Sql = "UPDATE <TABLA> Set Campo = Valor Where <Condicion>"
Conexion.Execute Sql

Luego de eso actualizas la grilla reejecutando la consulta SQl

Saludos