Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   algo basico pero no me sale (https://www.clubdelphi.com/foros/showthread.php?t=18732)

Fita 21-02-2005 20:42:11

algo basico pero no me sale
 
Hola a todos.
Necesitaria el empujon inicial para un form muy básico. Estoy migrando mis aplicaciones BDE a Interbase. Cabe aclarar que soy muy novato en Interbase.
Basicamente tengo un form con una tabla, un pagecontrol que muestra los campos de la tabla el la pagina2, un dbGrid que muestra la tabla y una barra de botones en donde el usuario selecciona la tarea a realizar:
Agregar un registro: Tabla1.Insert; Pagecontrol.ActivePage := Page2
Modificar un registro: Tabla1.edit; idem anterior
Guardar cambios: Tabla1.Post;
Cancelar Cambios: Tabla1.Cancel
Borrar registro: Tabla1.delete;

Como puedo hacer esto mismo en SQL?; he puesto un IBdataset con las sentencias sql que genera automaticamente pero no se como aplicarlas.

Cualquier ayuda será muy bienvenida

Saludos a Todos

BlueSteel 21-02-2005 21:04:33

Primero que nada debes tener lo siguiente en tu Formulario :
:(
- Componente TIBDatabase (Declaración de la base de datos de Interbase)
- Componente TIBTransaction (declaración de la transacción de los datos)
- Componente TIBQuery (Declaración de las sentencias a ejecutar )

llamaremos a :
- TIBDatabase (IBD_Compras)
- TIBTransaction (IBT_Compras)
- TIBQuery (IBQ_Compras )

Con este codigo podras eliminar un registro de tu tabla

Código:

// La idea del Try Except,, es que no de error si quieres borrar registros y la base este vacia
Try
If MessageDlg('Seguro de Eliminar el Area '+
  #13+#13+IBQ_Select['Are_Detalle'], mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  Begin
          IBQ_Compras .SQL.Clear;
          IBQ_Compras .SQL.Add('Delete From "Area" Where "Are_Codigo"=:Var1');
          IBQ_Compras .Params[0].AsString := vCod.Text;
          IBQ_Compras .ExecSQL;
          IBT_Compras .Commit;
    End
Except
    ShowMessage('No existen registros que se puedan eliminar');
End;

Con este codigo podras Agregar un registro a tu tabla

Código:

If MessageDlg('Seguro de Agregar este Centro de Costos ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  Begin
          IBQ_Compras .SQL.Clear;
          IBQ_Compras .SQL.Add('Insert Into "Area" ("Are_Codigo","Are_Detalle","Are_Encargado")');
          IBQ_Compras .SQL.Add('Values (:P1,:P2, :P3)');
          IBQ_Compras .Params[0].AsString := vCod.Text;
          IBQ_Compras .Params[1].AsString := vDes.Text;
          IBQ_Compras .Params[2].AsString := CB_Jefe.Text;
          IBQ_Compras .ExecSQL;
          IBT_Compras .Commit;
          If MessageDlg('El Area ya Fue Ingresado'+
            #13+#13+'Desea ingresar Otra ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
            vCod.SetFocus
          Else
            Panel3.Visible := False;
End;

espero que te sirva esto.... :p

BlueSteel 21-02-2005 21:17:50

Tambien te sugiero lo siguiente ( al menos yo lo utilizo asi.. y me funciona super bien...)

Declarar la base de datos en tu Form principal (Puede ser el menú....)

en los form que deseas trabajar, declaras lo siguiente:

por ejemplo un Form para agregar clientes....

- declaras 2 transacciones
- declaras 2 Querys

la idea es que las transacciones esten unidas a la base que declarastes en el menu principal...

entonces haces lo siguiente :

IBT_Select (primera transaccion)
IBQ_Select (primer Query)

IBT_Edit (Segunda transaccion)
IBQ_Edit (Segundo Query)....

Con esto haces más rapido el acceso a los datos....
por ejemplo...

cuando habres el form.. activas el IBQ_Select de la siguiente forma :

Código:

IBQ_Select.Close;
IBQ_Select.SQL.Clear;
IBQ_Select.SQL.Add('Select * from "Clientes" Order By "Cli_Codigo"');
IBQ_Select.Open;

y al eliminar haces lo siguiente:
Código:

IBQ_Edit.SQL.Clear;
IBQ_Edit.SQL.Add('Delete From "Area" Where "Are_Codigo"=:Var1');
IBQ_Edit.Params[0].AsString := IBQ_Select['Are_Codigo'];
IBQ_Edit.ExecSQL;
IBT_Edit.Commit; // Actualizas los cambios en la Base
IBT_Select.Commit; // Actualizas los cambios en la Base

se supone que los datos los estabas desplegando a través de un DBGrid.... el que esta unido a IBQ_Select.... y para eliminar, solo pinchas en la fila o registro que quieres... presionas eliminas y ejecutas el codigo ligado al IBQ_Edit...

Fita 21-02-2005 21:41:07

Ok
 
Gracias!!!
Me has aclarado muchas dudas...

Saludos
Fita

Fita 22-02-2005 15:11:51

Funciona, pero tengo otra pregunta
 
Con tus ejemplos hice una pequeña aplicación y anda de maravilla; altas, bajas, modificaciones, pero tengo una duda: Con un objeto Ttable (BDE) puedes arrastrar un field al form y ya tienes acceso a los datos. Basta con hacer un table1.edit y listo.
Con SQL como edito los datos? suponte un grid que muestra el conjunto de datos, al hacer doble click en una linea del grid debo editar el registro para que el usuario lo modifique.
Puedo editar directamente el field del query o debo (como supongo; ya que lo hice practicando tus consejos) mover los datos de dicha fila a objetos Tedit y luego aplicar el update dando a cada param[x] el valor de cada edit.text ?

BlueSteel 23-02-2005 13:30:16

Para modificar datos en un DBGrid que este enlazado a un Query.. se deben tener en consideracion los siguientes puntos:

- Para que puedas actualizar los datos debes cambiar la propiedad RequesLive del Query...

Query1.RequestLive := True;

con esto podras modificar tus datos desde el DBGrid, ahh... y debes dejar desactivar la propiedad ReadOnly del mismo...

DBGrid1.ReadOnly := False;

La Opcion de mover los datos a campos TEdit tambien es una alternativa, aunque te sugiero que utilices los DBEdit :p


La franja horaria es GMT +2. Ahora son las 09:18:17.

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