Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Eliminar registro (https://www.clubdelphi.com/foros/showthread.php?t=54347)

Zakio14 15-03-2008 00:47:04

Eliminar registro
 
Pura vida foro!

Trabajo con Firebird
Tabla Aquiler
Campos Id_socio, id_pelicula, nombre_pelicula (No tienen llave primaria)
Tengo un Edti(Id)
Y un Boton(Eliminar) en este botón tengo el siguiente código

if not Modulo.IBTransaction1.InTransaction then
Modulo.IBTransaction1.StartTransaction;

with Modulo.IBAlquiler do begin

Close;
SelectSQL.Clear;
SelectSQL.Add('SELECT * FROM Alquiler ');
SelectSQL.Add('Where ID_pelicula = :car');
ParamByName('car').AsTrimString := id.Text;
open;
Delete;
Refresh;
Close;
Modulo.IBTransaction1.CommitRetaining;
end;

La cosa es que me elimina todo lo que tengo en la tabla y no solo el registro que quiero.

Alguien me puede decir que estoy haciendo mal o algún comentario que me ayude hacer que funcione...

Se los agradezco

Mil millones de gracias

Caral 15-03-2008 01:31:11

Hola
Código Delphi [-]
if not Modulo.IBTransaction1.InTransaction then
Modulo.IBTransaction1.StartTransaction;
with Modulo.IBAlquiler do begin
Close;
SelectSQL.Text:= 'Delete * FROM Alquiler Where ID_pelicula = :car';
ParamByName('car').AsTrimString := id.Text;
ExecSQL;
Modulo.IBTransaction1.CommitRetaining;
end;
Saludos

AzidRain 15-03-2008 01:35:28

Yo no uso FB, pero como lo haces es válido siempre que las consultas sean editables. El problema puede ser que no tengas mas registros en la tabla. LA ventaja de hacerlo como lo haces es que si tienes ligada la consulta a un grid o algo similar éstos se actualizan reflejando el registro borrado.

Como lo hace Caral también funciona pero tendrás que refrescar cualquier componente enlazado a la tabla.

Caral 15-03-2008 01:38:00

Hola
Estas demasiado exigente maestro.
Bueno, cambiemos ExecSQL por Open :D
Nos exigen demasiado a los novatos:D:D
Saludos

RONPABLO 15-03-2008 04:02:04

Hola Zakio14 como estas "alimentando" el IBdataSet (IBAlquiler) en tiempo de ejecucion debes poner también las otras sentencias SQL, es decir, te falta deleSQL, updateSQL y refreshSQL (que peude ser el mismo selectSQL), algo así como lo siguiente:


Código SQL [-]
size="3">    //El query para borrar:
    DeleteSQL.Add('delete FROM Alquiler ');
   size="3">Deletesize="3">SQL.Add('Where ID_pelicula = :car');
  
    //Actualizar:
size="3">   updateSQL.Add('Alquiler set campo1 =:campo1, campo2 = :campo2');
   size="3">updateSQL.Add('Where ID_pelicula = :car');

o mas Fácil aun, en tiempo de desarrollo solo pones el query que tu mismo hiciste en la propiedad selectSQL (de IBAlquiler) en el inspector de objetos, luego en el le das click derecho al componente visual y le seleccionas DataSet Editor y ahi das click en get Table Files, luego en key FIleds seleccionas ID_pelicula y en "Update Fields" seleccionas tod, al final das click en el boton generate SQL y ya....


Nota: Personalmente creo que es una mala practica ir poniendo querys en cualquier parte del código, prefiero llenar el modulo de componentes IBDataSet, IBQuery y IBScrips con sus correspondientes e inmutables querys donde solo mando parámetros, mas nunca (valga la redundancia) en otra unidad uso xxxSQL.add(´el cambio que sea´), ya que a la hora de mantener en el futuro dicho código será en extremo desgastante.



Zakio14 20-03-2008 07:07:07

Pura vida foristas!

Gracias por sus valiosas respuestas!!

Gracias CARAL por tu respuesta tan acertada

y gracias RONPABLO por ese comentario que tomare mucho en cuenta


mil millones de gracias!!!!!!!!!


La franja horaria es GMT +2. Ahora son las 23:31:04.

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