Ir al contenido


Foto

eliminar registro usando metodo ApplyUpdates


  • Por favor identifícate para responder
9 respuestas en este tema

#1 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 28 agosto 2012 - 12:26

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;
  • 0

#2 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 29 agosto 2012 - 07:49

Pregunto, tienes clave principal en esa tabla?? los componentes la reconocen como tal??
  • 0

#3 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 29 agosto 2012 - 07:57

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"
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 29 agosto 2012 - 08:00

eso es que debes generar un correlativo para esa clave, te recomiendo utilizar el evento onnewrecord-
  • 0

#5 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 30 agosto 2012 - 08:57

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



delphi
  1. DataSet.FieldByName('id').AsInteger := AutoId;
  2.   Dec(AutoId);
  3. end;
  4.  
  5.  
  6.  
  7.  
  8.  
  9. procedure TForm4.guardarClick(Sender: TObject);
  10. var AutoId:integer;
  11. begin
  12. clientdataset1.ApplyUpdates(0);
  13. clientdataset1.Refresh;
  14.   AutoId := -1;
  15.  
  16. end;
  17.  
  18.  
  19.  
  20. procedure TForm4.queryAfterOpen(DataSet: TDataSet);
  21. begin
  22.  
  23. DataSet.FieldByName('id').ProviderFlags := DataSet.FieldByName('id').ProviderFlags - [pfInUpdate];
  24.  
  25. end;



creo que el error esta en esta ultima linea a ver si me pueden echar la mano
  • 0

#6 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 agosto 2012 - 10:44

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
  • 0

#7 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 31 agosto 2012 - 11:12

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
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 31 agosto 2012 - 03:02

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.
  • 0

#9 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 31 agosto 2012 - 03:13

gracias por tu consejo leere y como dices cualquier duda hay estare molestando de nuevo

saludos
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 31 agosto 2012 - 06:46

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,
  • 0




IP.Board spam blocked by CleanTalk.