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)
-   -   Mini tutorial Zeos + Firebird (https://www.clubdelphi.com/foros/showthread.php?t=78068)

agustinbus 16-03-2012 22:08:24

Mini tutorial Zeos + Firebird
 
Hola como estan? abro este hilo porque creo que ya hice varias preguntas en el foro y todavia no aporte nada.
Aunque sea muy pequeño este mini tutorial, creo que es mejor aportar algo que nada y me parece que a algunas personas va a servirle.
Me dejo de hablar y nos ponemos manos a la obra.

Voy a tomar como referencia el tutorial hecho por Caral en donde se explica como iniciarse con firebird.

Haremos un programita EXTREMADAMENTE sencillo utilizando los componentes ZEOS en donde mostraremos:

-Como conectarnos a una BD firebird
-Como insertar registros
-Como actualizar registros (o modificar)
-Como eliminar registros


Primero que nada creamos una tabla en firebird y le pondremos como nombre CONTACTOS y los siguientes campos:

ID- Integer - Autoincrement
NOMBRE - Varchar
APELLIDO - Varchar
TELEFONO - Varchar

como vemos en la imagen:




Para que nos funcione el campo ID y sea autoincrement tenemos que crear un Generador. Como es eso? ;)

En el campo ID le damos doble clic al casillero AutoInc y se nos abrira una ventanita. En esa ventana seleccioanmos la pestaña Generador y luego marcamos el checkbox Crear generador. Despues de eso, dentro de la misma ventanita, vamos a la pestaña Disparador y seleccionamos el checkbox Crear disparador. Terminamos dandole OK a la ventanita







Listo!!! ya tenemos nuestra tabla :) y ahora que hacemos? :confused:

Pasamos a delphi!!!

Creamos un nuevo proyecto y colocamos en el form: 3 botones, 1 ZConnection, 1 ZQuery, 1 DBGrid, 1 DataSource



con las propiedades:

Boton de insercion:
-name: button1
-caption: Agregar contacto

Boton de edicion (o actualizacion o modificacion):
-name: button2
-caption: Modificar contacto

Boton de eliminacion:
-name: button3
-caption: Eliminar contacto


ZConnection:
-Database: (Seleccionamos la base de datos firebird en donde la hayamos guardado)
-HostName: si es un sistema en local, ponemos localhost
-Name: ZConection1
-Password: el pass de firebird que por lo general es: masterkey
-Protocol: firebird x.x (x.x es la version en la cual hayamos creado nuestra BD)
-User: por lo general es SYSDBA
-Connected: por ultimo connected a true.

ZQuery:
-Connection: seleccionamos el ZConnection1
-SQL: se nos abre una ventanita y escribimos: SELECT * FROM CONTACTOS
-Name: ZQuery1
-Active: True

DataSource:
-Name: DataSource1
-Dataset: seleccionamos el ZQuery1


DBGrid:
-Name: DBGrid1
-DataSource: DataSource1


Una vez que tenemos todos los componentes en nuestro form hacemos doble clic sobre el ZQuery, se nos abre una ventanita en donde vamos a hacer clic derecho add all fields.



Cuando se agreguen los campos (fields) seleccionamos ID (Autoincrement) y para que se genere automaticamente el numero, le cambiamos las propiedades:
-Required: False
-ProviderFlags
--pfInUpdate: False


Por falta de tiempo voy a tener que detenerme aca :rolleyes:, pero protito agregare lo que falta.

Vayan guardando su proyecto!
PD: si algun moderador ve que me confundi en algo o falta algo, o esta mal explicado, diganme que con gusto lo corrijo!
Saludos!!!

Casimiro Notevi 16-03-2012 22:37:34

Estupendo :)

Una duda, no conozco bien zeos, lo he usado poco, pero me ha resultado extraño esto:


ZConnection:
-Protocol: firebird x.x (x.x es la version en la cual hayamos creado nuestra BD)

Supongo que habrá sido un "desliz", se supone que ahí debe ir TCP/IP u otro protocolo.

white_zombie 16-03-2012 23:08:48

Hola,
Cita:

ZConnection:
-Protocol: firebird x.x (x.x es la version en la cual hayamos creado nuestra BD)
Esto es correcto, en Protocol debes especificar la base de datos con la que te vas a conectar (Postgres-7, Postgres-8, firebird-2.1, firebird-2.5, etc). En función de lo elegido establece internamente como debe conectarse a la base de datos, si es por ejemplo sqlite lo hace a través de la Dll correspondiente sin utilizar TCP/IP y si es otra como firebird lo hará con TCP/Ip, con lo cual tienes que rellenar los campos Hostname y Port.

Tampoco soy un gran conocedor de Zeos pero lo he usado alguna vez y creo que el funcionamiento es así.

Un Saludo.

Caral 16-03-2012 23:36:07

Hola
Muchas gracias por el aporte.
Siempre estamos los que necesitamos aprender algo nuevo.
Gracias.
Saludos

Casimiro Notevi 16-03-2012 23:43:59

Pues aclarada la duda :)

Pongo este tema "adherido" para que quede siempre en las primeras posiciones, ya que es un tema que se pregunta mucho.

agustinbus 16-03-2012 23:53:08

:) hola hola! como dice white_zombie ahi en protocol se especifica la base de datos, ya que por lo poco y nada que se de Zeos, estos permiten conectarse a multiples motores de BD.

Mañana seguramente subire otra parte del tuto.

Código:

Pongo este tema "adherido" para que quede siempre en las primeras posiciones, ya que es un tema que se pregunta mucho.
Muuuuchas gracias! me encanta ser parte de esta hermosa comunidad!

Casimiro Notevi 17-03-2012 00:44:07

Cita:

Empezado por agustinbus (Mensaje 427854)
Muuuuchas gracias! me encanta ser parte de esta hermosa comunidad!

Muchas gracias a tí, estos aportes son los que nos enriquecen a todos :)

agustinbus 17-03-2012 01:36:50

Me libere de las tareas, ahora puedo seguir con el tuto! :)


Creamos un nuevo form (form2) y le colocamos 3 edits con sus respectivos labels, y un boton como muestra la imagen:



Bien, el procedimiento para realizar una insercion es el siguiente, en el form1 donde tenemos la grilla y los tres botones ("Agregar contacto", "Modificar contacto", "Eliminar contacto") al presionar el boton agregar contacto, se nos despliega el form2 que acabamos de crear, introducimos los datos y presionamos el boton guardar.
Para modificar seleccionamos el registro a modificar en la grilla y el procedimiento despues es igual al de insertar.

Empezamos con algo de codigo. En el evento OnClick del boton "Agregar contacto" colocamos el siguiente codigo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  //Limpiamos los edit
  Form2.Edit1.Clear;
  Form2.Edit2.Clear;
  Form2.Edit3.Clear;

  Form2.Caption := 'Agregar nuevo contacto';
  Form2.Position := poScreenCenter;
  Form2.ShowModal;

end;

y el en evento OnClick del boton "Modificar contacto" ponemos el siguiente codigo:

Código Delphi [-]

procedure TForm1.Button2Click(Sender: TObject);
begin
  //Asignamos los valores correspondientes a los edits
  Form2.Edit1.Text := ZQuery1NOMBRE.Value;
  Form2.Edit2.Text := ZQuery1APELLIDO.Value;
  Form2.Edit3.Text := ZQuery1TELEFONO.Value;

  Form2.Caption := 'Modificar contacto';
  Form2.Position := poScreenCenter;
  Form2.ShowModal;
end;

Muy bien, ahora podemos probar dandole a run (F9) y al presionar los botones Agregar contacto y Modificar contacto, vemos como se despliega el form.


Bueno ya realizado esto procedemos a poner el codigo que en si realiza la insercion y modificacion de un registro.

Vamos al form2 y en el evento OnClick del boton "Guardar" ponemos el siguiente codigo (esta explicado en el mismo codigo con comentarios cualquier duda me preguntan):

Código Delphi [-]
var
  id:Integer;
begin

  //Si estamos en el modo Agregar...
  if Form2.Caption = 'Agregar nuevo contacto' then
    begin
      with Form1.ZQuery1 do
        begin
          close;
          Sql.Clear;
          //Codigo para insertar un registro
          Sql.Add('insert into CONTACTOS (NOMBRE, APELLIDO, TELEFONO) values(:nom, :ape, :tel) ');
          //Asignamos a cada campo los valores correspondientes
          ParamByName('nom').AsString := Edit1.Text;
          ParamByName('ape').AsString := Edit2.Text;
          ParamByName('tel').AsString := Edit3.Text;
          ExecSQL;

          close;
          Sql.Clear;
          //Consulta para que se vean los datos en el DBGrid
          Sql.Add('select * from CONTACTOS');
          Open;

          Form2.Close;
        end;
    end
  else
    //Si estamos en el modo Modificar...
    begin
      with Form1.ZQuery1 do
        begin
          //Guardamos el codigo del registro que estamos modificando
          id := FieldByName('ID').Value;
          close;
          Sql.Clear;
          //Codigo para editar un registro
          Sql.Add('update CONTACTOS set NOMBRE= :nom, APELLIDO= :ape, TELEFONO= :tel where ID= :idd');
          //Asignamos a cada campo los valores correspondientes
          ParamByName('idd').AsInteger := id;
          ParamByName('nom').AsString := Edit1.Text;
          ParamByName('ape').AsString := Edit2.Text;
          ParamByName('tel').AsString := Edit3.Text;
          ExecSQL;

          close;
          Sql.Clear;
          //Consulta para que se vean los datos en el DBGrid
          Sql.Add('select * from CONTACTOS');
          Open;

          Form2.Close;
        end;
    end;
end;

ecfisa 18-03-2012 09:37:38

Hola agustinbus.

Muchísimas gracias por el aporte. ;)

Saludos. :)

rretamar 19-03-2012 19:06:52

Muy buen aporte. Lo interesante es que este tutorial se puede aplicar prácticamente sin cambios (salvo por IBExpert, que en Linux se reemplaza por Flamerobin) en Lazarus.

gmontes 13-04-2012 21:12:10

gracias por el tutorial, llevo varios años utilizando ibexpert y nunca me di cuenta de que en la creacion de la tabla podia crear el generador y el trigger :confused: :o que vergüenza

Casimiro Notevi 14-04-2012 07:07:39

Cita:

Empezado por gmontes (Mensaje 429981)
gracias por el tutorial, llevo varios años utilizando ibexpert y nunca me di cuenta de que en la creacion de la tabla podia crear el generador y el trigger :confused: :o que vergüenza


No se puede saber todo :)

agustinbus 14-04-2012 11:06:29

Me alegra q te haya gusta gmontes :) !!!!!

Leopard2 25-08-2012 02:10:23

Primero que nada agradecer por el tutorial, soy nuevo en SQl a pesar de que llevo años programando en Delphi7 con Paradox y Dbase, por lo mismo quisiera consultar el porque usa para ingresar los datos los Edit en lugar de los DbEdit ?
Saludos

Casimiro Notevi 25-08-2012 12:08:30

Normalmente es sólo cuestión de gustos.
Es más cómodo usar dbedits, por supuesto.

bulc 01-10-2012 19:46:30

Cita:

Empezado por Casimiro Notevi (Mensaje 440682)
Normalmente es sólo cuestión de gustos.
Es más cómodo usar dbedits, por supuesto.

Me gustaría que en el ejemplo de Firebird pusiérais un campo de gráficos. Si no es mucho pedir. Me parecen muy importantes pero suelen quedarse fuera.

pedrolazarus 07-10-2012 03:12:36

Cita:

Empezado por agustinbus (Mensaje 427846)
Hola como estan? abro este hilo porque creo que ya hice varias preguntas en el foro y
Por falta de tiempo voy a tener que detenerme aca :rolleyes:, pero protito agregare lo que falta.

Vayan guardando su proyecto!
PD: si algun moderador ve que me confundi en algo o falta algo, o esta mal explicado, diganme que con gusto lo corrijo!
Saludos!!!


Carajo, porq no pase por aqui ase dos dias:eek:

Buen tuto

agustinbus 18-10-2012 16:24:48

no uso DBEdits porque uso otros componentes con mascaras y validaciones de entradas de datos, y bueno ya me acostumbre a no usar dbedits. Por supuesto que es mas facil :).

Cita:

Me gustaría que en el ejemplo de Firebird pusiérais un campo de gráficos. Si no es mucho pedir. Me parecen muy importantes pero suelen quedarse fuera.
Ya con mas tiempo agrego eso :) , pero yo prefiero utilizar la ruta de la imagen para que no sea tan pesada la base de datos. Entonces leo el campo ruta de la tabla y mediante la ruta cargo la imagen en un TImage.

Cita:

Carajo, porq no pase por aqui ase dos dias

Buen tuto

muchas gracias pedrolazarus!! :)

santiago14 28-01-2013 19:22:47

Cita:

Empezado por gmontes (Mensaje 429981)
gracias por el tutorial, llevo varios años utilizando ibexpert y nunca me di cuenta de que en la creacion de la tabla podia crear el generador y el trigger :confused: :o que vergüenza

Yo tampoco lo sabía, me adhiero a la vergüenza y agradezco el aporte.

Santiago.

santiago14 28-01-2013 19:25:52

Cita:

Empezado por agustinbus (Mensaje 447390)
Me gustaría que en el ejemplo de Firebird pusiérais un campo de gráficos. Si no es mucho pedir. Me parecen muy importantes pero suelen quedarse fuera.

La manera mas razonable de tratar los gráficos en la BD es a través de un BLOB, luego en Delphi los podemos ver con los componentes pertinentes.
Para guardarlos y leerlos en y desde la BD hay que pasarlos a un flujo de bits (streaming) con unas clases bien hechas para tal fin.

Santiago.


La franja horaria es GMT +2. Ahora son las 14:22:13.

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