Programación General > Visual Basic 6.0 e inferiores
Re: Problemas al borrar registro
jacardin:
Hola, tengo un problema a ver si alguien me echa un cable. Utilizo ADO
Abro un recordset asi: rs.Open q, conexion, , adLockOptimistic, adCmdText
donde q="select * from tabla"
Tengo un boton que borra un registro (rs.delete) y funciona bien.
El problema es que cuando hago q="selec tabla.*, otratrabla.nombre from tabla,otratabla where tabla.dni=otratabla.dni"
se muestra bien en el datagrid pero al pulsar el boton de borrar:
"Informacion de columna clave insuficiente para realizar la operacion Update o Refresh"
Existe una forma facil y directa para hacer esto o tendria que tener 2 recordset
uno con la tabla que si me deja borrar y otro que muestra toda la informacion.
Brroz:
Hola jacardin.
Creo que tu problema está en las relaciones que tienes entre las tablas.
Supongo que utilizas una base de datos jet. Si tuvieras las relaciones definidas en la base de datos, la eliminación funcionaría de esa forma, o incluso podrías al elimar el registro de una tabla, borrar los correspondientes de las tablas relacionadas.
Si no tienes definidas las relaciones en la bd, debes de indicar la relación entre las tablas en la sentencia SQL mediante una cláusula JOIN (o LEFT JOIN o RIGHT JOIN o INNER JOIN según sea la relación).
Suerte.
jacardin:
Las dos tablas son:
Factura= {codfactura,dni,....} clave={codfactura}
cliente={dni, nombre,...} clave={dni}
relacion= (cliente.dni) 0..n (factura.dni)
la select es: "select factura.*,cliente.nombre from factura,cliente where factura.dni=cliente.dni"
Lo unico que quiero es que ademas de mostrar todos los datos de la factura añada el nombre del cliente que esta en otra tabla y que cuando borre borre la factura.
Creo que el problema que tengo es que no sabe cual es la clave del recordset al ser una consulta donde intervienen dos tablas y yo no se como se le dice al recordset cual es su clave.
Brroz:
Prueba con un select de este estilo:
SELECT factura.*,cliente.nombre FROM factura LEFT JOIN cliente ON factura.dni=cliente.dni WHERE factura.codfactura='F99999'
donde F99999 sería el código de la factura.
También podrías utilizar el método EXECUTE del command que tengas y hacer directamente: DELETE FROM factura WHERE codfactura='F99999'
de esta última forma aseguras obtener el resultado que esperas (recuerda luego refrescar el recordset que tengas con las facturas para que se reflejen los cambios).
A ver si con esto puedes arreglar... Abur.
Omarrpat:
Amigo tu problem tal vez esta aqui
conexion, <aqui>, adLockOptimistic, adCmdText
donde q="select * from tabla"
por que el bloqueo lo manejas de manera optimista, mas nunca especificas como es abierta la fuente de datos, tra de cambiar ese codigo por un adOpenDynamic y espero te de resultados.
algo asi como :
rsTotal.Open strSqlReporte, cnReporte, adOpenDynamic, adLockOptimistic
ayuda
Mode, propiedad (ADO)
Indica los permisos disponibles para modificar datos en un objeto Connection.
Configuración y valores devueltos
Establece o devuelve uno de los siguientes valores de ConnectModeEnum.
Constante Descripción
adModeUnknown Predeterminada. Indica que los permisos no se han establecido aún o que no se pueden determinar.
adModeRead Indica que son permisos de sólo lectura.
adModeWrite Indica que son permisos de sólo escritura.
adModeReadWrite Indica que son permisos de lectura/escritura.
adModeShareDenyRead Impide que otros abran una conexión con permisos de lectura.
adModeShareDenyWrite Impide que otros abran una conexión con permisos de escritura.
adModeShareExclusive Impide que otros abran una conexión.
adModeShareDenyNone Impide que otros abran una conexión
Navegación
[#] Página Siguiente
Ir a la versión completa