
eliminar registro usando metodo ApplyUpdates
Started by
edgar_prospero
, Aug 28 2012 12:26 PM
9 replies to this topic
#1
Posted 28 August 2012 - 12:26 PM
que hay amigos aqui con un problema resulat que tengol un dbgrid en el cual muestro informacion de mi base de datos en mysql, uso varios componentes como son: tmyconection, tmyquery, datasetprovider, clientdataset1, datasource, y para guardar la informacion lo hago por el metodo apply updates y no tengo ningun problema si despues agrego un registro actualiza bien sin problema, el asunto esta cuando quiero eliminar un solo registros por decir tengo 10 registros y selecciono uno del dbgrid y le doy eliminar si me lo elimina pero cuando actualizo me dice que afecto mas de un registro y me los borra todos para borrar lo hago de la siguuente forma
procedure TForm4.Eliminar1Click(Sender: TObject);
begin
dbgrid.DataSource.Dataset.Delete;
end;
procedure TForm4.Eliminar1Click(Sender: TObject);
begin
dbgrid.DataSource.Dataset.Delete;
end;
#2
Posted 29 August 2012 - 07:49 AM
Pregunto, tienes clave principal en esa tabla?? los componentes la reconocen como tal??
#3
Posted 29 August 2012 - 07:57 AM
tienes toda la razon en ese punto no tenia clave privada aunque ahora tengo otro problema, no me deja agregar varios registros a la vez al dbgrid como lo estoy guardando en una tabla temporal , me dice "key violation"
#4
Posted 29 August 2012 - 08:00 AM
eso es que debes generar un correlativo para esa clave, te recomiendo utilizar el evento onnewrecord-
#5
Posted 30 August 2012 - 08:57 AM
me podrias echar la mano con eso mira yo intente lo siguiente, pero me marca un error que dice query: field 'id ' not found
procedure TForm4.ClientDataSet1NewRecord(DataSet: TDataSet);
var AutoId:integer;
begin
creo que el error esta en esta ultima linea a ver si me pueden echar la mano
procedure TForm4.ClientDataSet1NewRecord(DataSet: TDataSet);
var AutoId:integer;
begin
delphi
DataSet.FieldByName('id').AsInteger := AutoId; Dec(AutoId); end; procedure TForm4.guardarClick(Sender: TObject); var AutoId:integer; begin clientdataset1.ApplyUpdates(0); clientdataset1.Refresh; AutoId := -1; end; procedure TForm4.queryAfterOpen(DataSet: TDataSet); begin DataSet.FieldByName('id').ProviderFlags := DataSet.FieldByName('id').ProviderFlags - [pfInUpdate]; end;
creo que el error esta en esta ultima linea a ver si me pueden echar la mano
#6
Posted 30 August 2012 - 10:44 AM
Amigo, habría que mirar el contexto general de tu aplicación. Por ejemplo si usas campos persistentes (que sería lo más aconsejable), entonces en el editor de campos del tmyquery que dices que usas, selecciona el campo que corresponda a la clave principal y en su propiedad ProviderFlags asegúrate que la opción pfInKey esté en true, de igual forma en el TClientDataset ve al campo en cuestión y asegúrate que dicha propiedad también esté en true. También debes asegurarte que los campos de tu query que no pertenezcan a la tabla que quieras actualizar deben tener todas las opciones de la propiedad ProviderFlags en false tanto en el query como en el TClientDataset.
Prueba con lo anterior, y no deberías tener problemas, pero como digo habría que mirar tu diseño en un contexto más amplio.
Saludos
Prueba con lo anterior, y no deberías tener problemas, pero como digo habría que mirar tu diseño en un contexto más amplio.
Saludos
#7
Posted 31 August 2012 - 11:12 AM
disculpa mi ignorancia pero no entiendo cual es el editor de campos como entro a ahi si puedes orientarme porfa, porque creo que no son campos persistentes
#8
Posted 31 August 2012 - 03:02 PM
disculpa mi ignorancia pero no entiendo cual es el editor de campos como entro a ahi si puedes orientarme porfa, porque creo que no son campos persistentes
Haz dobleclick sobre el componente tmyquery, se abrirá una pequeña ventana, si está vacía es porque no tienes campos persistentes, para agregarlos solo basta hacer click con el botón derecho del mouse y escoger AddAllFields, hay que hacer lo mismo con el TClientDataset.
Para comprender mejor las cosas te recomiendo ir a la página de descargas del foro y descarga "La cara oculta de Delphi 6"; si no dispones de mucho tiempo, entonces lee solo a partir de la página 331 hasta la 555, por ahora con esto tendrás lo necesario para que entiendas muchas cosas, si te queda otro tiempo luego lees de la página 673 a la 780, y cuando tengas más tiempo lees el resto del libro.
Te digo esto porque el autor explica con lujo de detalles, de una manera muy didáctica y en el orden necesario. Si no entiendes algo no dudes en preguntar.
Un cordial saludo.
#9
Posted 31 August 2012 - 03:13 PM
gracias por tu consejo leere y como dices cualquier duda hay estare molestando de nuevo
saludos
saludos
#10
Posted 31 August 2012 - 06:46 PM
Yo recomiendo primero la lectura a la Cara Oculta de D4 y luego ir por la de D6 
En ese órden las cosas se asimilarán mejor.
Saludos,

En ese órden las cosas se asimilarán mejor.
Saludos,