PDA

Ver la Versión Completa : Mini tutorial Zeos + Firebird


agustinbus
16-03-2012, 21:08:24
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:

http://www.globaltradearg.com/files/Img1.jpg


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

http://www.globaltradearg.com/files/Img2.jpg


http://www.globaltradearg.com/files/Img3.jpg


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

http://www.globaltradearg.com/files/Img4.jpg

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.

http://www.globaltradearg.com/files/Img5.jpg

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, 21: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, 22:08:48
Hola,
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, 22:36:07
Hola
Muchas gracias por el aporte.
Siempre estamos los que necesitamos aprender algo nuevo.
Gracias.
Saludos

Casimiro Notevi
16-03-2012, 22: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, 22: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.


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
16-03-2012, 23:44:07
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, 00: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:

http://www.globaltradearg.com/files/Img6.jpg

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:


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:



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):


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, 08:37:38
Hola agustinbus.

Muchísimas gracias por el aporte. ;)

Saludos. :)

rretamar
19-03-2012, 18: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, 20: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, 06:07:39
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, 10:06:29
Me alegra q te haya gusta gmontes :) !!!!!

Leopard2
25-08-2012, 01: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, 11:08:30
Normalmente es sólo cuestión de gustos.
Es más cómodo usar dbedits, por supuesto.

bulc
01-10-2012, 18:46:30
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, 02:12:36
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, 15: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 :).


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.


Carajo, porq no pase por aqui ase dos dias

Buen tuto



muchas gracias pedrolazarus!! :)

santiago14
28-01-2013, 18:22:47
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, 18:25:52
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.

aprendiz123
04-02-2013, 19:26:06
excelente tuto solo quiero preguntar que puedo hacer para que cuando ingrese un registro en la BD por IBExpert pueda a travez de un botón en el formulario de delphi actualizar los registros en el BDgrid, es decir que cuando ingrese ese registro en la BD y se este ejecutando la aplicacion en delphi no tenga la necesidad de cerrar y abrir la ventana para que me salga el nuevo registro si no que lo haga cuadole de click alboton actualizar.

agustinbus
04-02-2013, 21:34:43
Hola como estas? una manera de hacerlo es hacer la consulta nuevamente, por ejemplo:


ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('SELECT NOMBRE, APELLIDO, DNI FROM CLIENTES');
ZQuery1.Open;


Es un ejemplo de una tabla de clientes.
Saludos espero te sirva, cualquier cosa me avisas.

aprendiz123
05-02-2013, 05:47:50
Amigo de ante mano muchas gracias por responder mi mensaje sinceramente no pensé que lo hiciera y así tan pronto...

Hice el boton actualizar y en el evento onclick le agregue la parte de codigo que me pasaste pero no me funciono, luego le agregue : DBGrid.refresh a esse código y tampoco me funciono si tienes alguna otra idea me seria de mucha ayuda.


Gracias por ayudar al que lo necesita.

Casimiro Notevi
05-02-2013, 10:55:59
.
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)