Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema para eliminar y editar registros con query de por medio (https://www.clubdelphi.com/foros/showthread.php?t=81676)

kornamenta 06-12-2012 19:42:59

Problema para eliminar y editar registros con query de por medio
 
Hola a todos necesito una pequeña ayuda para completar un simple programa que estoy realizando a pedido. Primero les explicaré brevemente en que consiste el programa, será utilizado para llevar registro de las modificaciones que se le realizaran a automóviles periódicamente. El usuario ingresará primeramente datos básicos de un automóvil en este caso solo Patente, Marca y Modelo [Tabla maestro "Ingresos"]. y luego al momento de realizar modificaciones al automóvil seran registradas en otra tabla donde deberá ingresar Patente (correspondiente a la tabla Ingresos), Fecha y Modificación [Tabla detalle "Modificaciones"]. Que por supuesto con su relación maestro detalle la patente seleccionada mostrara las modificaciones solo relacionadas a la misma.

TABLA MAESTRO Ingresos.db
--------------------------------
ID | PATENTE | MARCA | MODELO
1 asd345 Fiat 600
2 qwe123 Renault 12

(Aclaro que en esta tabla tengo la columna clave ID oculta con Key)


TABLA DETALLE Modificaciones.db
----------------------------------
ID | PATENTE | FECHA | MODIFICACIÓN
1 qwe123 01/04/2012 Cambio de aceite
2 qwe123 06/06/2012 Chapa y pintura
3 qwe123 08/06/2012 Cambio de neumáticos
4 asd345 21/04/2012 Testeo de frenos

(Aquí tambien se encuentran ocultos el campo clave ID y el campo Patente que es por el cual ambas tablas se conectan)

La conexión me funciona perfectamente, tengo un Table1 (tabla maestro) conectado a un datasource que a su vez esta conectado a un dbgrid. Por otro lado tengo un Table2 (tabla detalle)conectado a un datasource, este datasource esta conectado a un query que lo utilizo para ordenar las modificaciones por fecha mediante sql. Este query esta conectado a un segundo dbgrid mediante otro datasource.


Lo que me falta terminar y que a pesar de verme todos los temas existentes y ninguno que me solucione mi caso es para borrar registros(el problema solo esta en la tabla detalle que no me borra el seleccionado en el grid/query sino el primero del table2). Y por otro lado me gustaria poder realizar modificaciones a los registros por si luego se ingresar hay alguna palabra mal escrita u algo similar.

Estas dos acciones se me complican ya que tengo de por medio un query.

Uso Paradox 7

Les agradecería si pudieran ayudarme a esto que me falta para terminar el proyecto. Perdonen por hacerlo extenso quería dejar todo bien claro desde el principio xD

Caral 07-12-2012 01:44:06

Hola
No entiendo el problema.
Da la impresion de que estas tratando de hacer alguna modificacion a la tabla detalle por medio de un dbgrid que esta ligado a otro lado.
Si quieres coloca el programa completo en algun sitio y lo bajo para solucionarte el problema.
Saludos

kornamenta 07-12-2012 05:29:51

Hola Caral, gracias por responder. Mira me gustaría poder realizarlo para saber en que me equivoco pero de todas formas te paso el programa para que le des un vistazo

Te dejo el link por privado ya que no se me permite colocar enlaces

Caral 07-12-2012 15:19:22

Hola
Lo revisare mañana sábado.
Saludos

ecfisa 07-12-2012 15:55:02

Cita:

Empezado por kornamenta (Mensaje 451381)
...
Te dejo el link por privado ya que no se me permite colocar enlaces

Hola.

Podes publicar el enlace al sitio con algún espacio en medio. Por ejemplo: w ww.google.com

Saludos.:)

kornamenta 07-12-2012 21:11:15

Ah cierto! bueno entonces lo dejo por aqui a ver si alguien mas también puede darme una mano.

ww w.mediafire.com/?s8w1kfriwace9z0



Gracias

Caral 08-12-2012 04:13:31

Hola
Le hice algunas modificaciones que me parecieron logicas.
Primero, para que corra pon en cada table F:\Programa ya que yo lo modifique a C:\Programa.
El programa ahora tiene una pantalla por cada opcion que se necesite.
Cuando se quiere crear un nuevo automovil esta el boton de siempre, este creara los datos en la tabla ingresos.
Tienes dos dbgrid si le das click a cualquiera de ellos veras las opciones que tienes.
El de ingresos te dara dos opciones (modificar automovil y crear NUEVO trabajo o como le dices tu modificacion).
El de trabajos o modificaciones lo que hace es modificar los datos de esa modificacion, para que no se te complique use un dbnavigator en ese.
Si tienes dudas ya diras.
saludos

kornamenta 08-12-2012 07:04:28

Genial Caral!! aunque me surgen algunos inconvenientes:

-Al eliminar patente no se borra, reaparece al refrescar tabla, aunque si se eliminan sus "Trabajos".
-Si al abrir ventana de edición de automóvil y se deja todo igual al clickear dos veces seguidas en aceptar salta un error.
-Si bien esta todo mas organizado no me ayuda en lo primordial del tema. Necesito que se pueda editar y eliminar registros de la tabla "Trabajos" la conectada al query, no solo la tabla maestro.


Muchisimas gracias por el tiempo que te has tomado para ayudarme y me gusta mucho como ha quedado si bien me gustaría hacerlo yo mismo y simplemente saber como se soluciona lo que digo. Aún así espero que puedas seguir ayudándome

Caral 08-12-2012 15:56:53

Hola
Ya modifique lo que necesitas.
Ahora tienes otra opcion en el dbgrid de automoviles, este borrara todo.
Tambien cambie el de modificaciones, puedes modificar o borrar.
Saludos
NOTA: El automovil que se borrara sera el que este en el Edit4, osea, en la búsqueda (revisa el codigo)

Caral 08-12-2012 20:32:55

Hola
Cuando vas a eliminar un automovil seria bueno preguntar si esta seguro o no:
En la opcion de eliminar datos del automovil en el dbgrid:

Código Delphi [-]
If MessageDlg('¿Está seguro que desea Eliminar La informacion ',mtConfirmation,[mbYes,mbNo],0) = mrYes then
  begin
  Query2.SQL.Text:= 'Delete from Ingresos where Patente = :dat';
  Query2.Params[0].Value:= Edit4.Text;
  Query2.ExecSQL;

  Query2.SQL.Text:= 'Delete from Modificaciones where Patente = :dat';
  Query2.Params[0].Value:= Edit4.Text;
  Query2.ExecSQL;

  showmessage('registros borrados');
  edit4.Clear;
  Button2.Click;
  end
  else
  // Lo que sea.
Saludos

kornamenta 10-12-2012 17:46:55

Hola Caral gracias por todo me gusta como quedo aunque quería saber si había alguna forma para poder eliminar registros en cascada sin la necesidad de hacerlo mediante búsqueda. Me gustaría que no fuera necesario realizar una búsqueda para poder eliminar ese registro

Caral 10-12-2012 17:48:22

Hola
Cual registro ?
Saludos

ecfisa 10-12-2012 18:06:32

Cita:

Empezado por kornamenta (Mensaje 451562)
Hola Caral gracias por todo me gusta como quedo aunque quería saber si había alguna forma para poder eliminar registros en cascada sin la necesidad de hacerlo mediante búsqueda. Me gustaría que no fuera necesario realizar una búsqueda para poder eliminar ese registro

Hola.

Aunque en el Database Desktop figure la opción Update rule, según tengo entendido, Paradox no soporta la actualización en cascada.

Saludos.

kornamenta 10-12-2012 18:07:16

Perdón ya lo solucione, hice que al hacer click en la celda automáticamente el Edit4 tome el valor de la patente.
Nuevamente gracias y veré si necesito realizarle alguna modificación loca xD, cualquier cosa te aviso.

kornamenta 10-12-2012 18:15:08

Cita:

Empezado por ecfisa (Mensaje 451566)
Hola.

Aunque en el Database Desktop figure la opción Update rule, según tengo entendido, Paradox no soporta la actualización en cascada.

Saludos.

Sisi Eficsa eso lo se pero yo me refería a la forma de hacerlo, yo utilizo un while para que elimine antes todos los registros relacionados y luego si pueda borrar el de la tabla maestro. El inconveniente que surgía era que de la forma en que me lo arregló Caral solo podía eliminar haciendo antes la búsqueda, pero ahora con directamente dar click a la celda de la patente y poner eliminar me lo hace directamente. Ya que el código se basaba en la patente registrada en el edit de búsqueda entonces hice que al hacer click sobre una patente este edit tomara su valor automáticamente. No se si me explique, no los culpo si no xD :P

Caral 10-12-2012 18:18:29

Hola
Si no se puede borrar en cascada entonces se borra chorrito a chorrito:D:D
Saludos
PD: podia poner la seleccion por medio del dbgrid, pero entonces que harias tu ?, es mejor que vayas aprendiendo poco a poco y no darte todo resuelto ^\||/

kornamenta 10-12-2012 18:30:03

Lo se Caral, eso quería decir unos post antes, que no quiero que me lo hagan, solo despejar mis dudas, pero igual te agradezco todo

Edit:
Acabo de descubrir un pequeño problema, pero ya prácticamente esta terminado. Al modificar un "Trabajo/Modificación" desde el Form4 se pone en modo edición, pero luego nose como hacer para que luego de modificar o no, se quite el modo edición. Intente poniendo un .Post en el botón eliminar pero al presionarlo luego de eliminar anteriormente un registro me salta un error, lo que me hace pensar que no es nada fiable colocar un .post allí.

Caral 10-12-2012 18:57:58

Hola
Tienes un boton de modificar y otro de eliminar.
Lo que puedes hacer facilmente es cambiar el caption de cualquiera de los botones una vez presionado, ejemplo>
Si presionas el boton modificar que el boton de eliminar quede el caption en Guardar, osea guardara los cambios siempre que se presione el boton, de lo contrario no.
Asi mismo con el boton de eliminar, quedara el bton de modificar el caption en guardar.
Luego con un simple (if caption = 'Guardar' then) tendras.
Saludos

kornamenta 11-12-2012 04:11:35

Gracias Caral ya me anda todo como quería, estuve arreglando unas cuantas cosas y yo muy feliz de la vida. Pero...ahora que decido probarlo bien, ingresando varios registros me doy cuenta que me permite ingresar solo 3 automóviles, cuando quiero ingresar un cuarto me salta un error u.u.

Edit: El error surge cuando ingreso una patente que contiene una parte por ejemplo numeral similar a una ya existente. Ejemplo: Si antes he ingresado una qwe098 cuando ingreso otra con parte de esa me tira el error: asd1209. Como se puede solucionar esto? Se que soy pesado pero si logro saber como se soluciona esto creo yo que estaría todo absolutamente terminado.

Caral 11-12-2012 15:15:37

Hola
No se la razon del error.
No me he fijado pero al hacer la busqueda no creo que se tenga ningun LIKE, pero si es asi quitalo y ponle un IGUAL (=).
Saludos


La franja horaria es GMT +2. Ahora son las 19:20:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi