Hola a todos, para continuar con el tema de la conexion entre delphi con firebird y despues de nuestra entrada anterior Como conectar Delphi con Firebird se continua con una de las partes fundamentales que es la insersion, modificacion y eliminacion de datos, voy hacer una pequeña muestra de estos tres procedimientos ya que esto es un tema que puede llegar a ser muy extenso.
Bueno primero que todo crearemos la siguiente tabla llamada BANCOS que va tener los siguientes atributos, campo CODIGO de tipo integer y tambien va ser la llave primaria (PK) y activar la casilla NotNull, el campo FECHA va ser de tipo varchar con tamaño de 20 caracteres (size), el campo BANCO es de tipo varchar con un tamaño de 100 caracteres (esto del tamaño es opcional y depende de lo que se vaya a ingresar), despues de esto guardamos la tabla con el nombre de BANCOS no debe quedar algo como esto:
UPDATE BANCOS
SET FECHA= :FECHA,
BANCO= :BANCO
WHERE (CODIGO= :CODIGO);
WHEN SQLCODE -803 DO
EXCEPTION NUEVO_BANCO;
end
DELETE FROM BANCOS
WHERE (CODIGO = :CODIGO);
end
begin
StoredProcName:='NUEVO_BANCO';
ParamByName('FECHA').AsString:=hard_fecha.caption;
ParamByName('BANCO').AsString:=ebanco.Text;
Prepare;
ExecProc;
end;
modulo.transaccion.Commit;
modulo.bdbancos.Active:=true;
showmessage('REGISTRO CREADO!');
end;
Modificar:
//NUEVO BANCO//
begin
with modulo.procedimientos do
begin
StoredProcName:='MODIFICAR_BANCO';
ParamByName('CODIGO').AsInteger:=codbanco;
ParamByName('FECHA').AsString:=hard_fecha.caption;
ParamByName('BANCO').AsString:=ebanco.Text;
Prepare;
ExecProc;
end;
modulo.transaccion.Commit;
modulo.bdbancos.Active:=true;
showmessage('REGISTRO MODIFICADO!');
end;
Eliminar:
//ELIMINAR BANCO//
begin
with modulo.procedimientos do
begin
StoredProcName:='BORRAR_BANCO';
ParamByName('CODIGO').AsInteger:=codbanco;
Prepare;
ExecProc;
modulo.transaccion.Commit;
end;
modulo.bdbancos.Active:=true;
showmessage('BANCO ELIMINADO');
end;
Listo ya con esto tenemos los procediemientos basicos Altas, Bajas y Modificaciones en Delphi con Firebird.
Deja tu comentario o agradecimiento...
Bueno primero que todo crearemos la siguiente tabla llamada BANCOS que va tener los siguientes atributos, campo CODIGO de tipo integer y tambien va ser la llave primaria (PK) y activar la casilla NotNull, el campo FECHA va ser de tipo varchar con tamaño de 20 caracteres (size), el campo BANCO es de tipo varchar con un tamaño de 100 caracteres (esto del tamaño es opcional y depende de lo que se vaya a ingresar), despues de esto guardamos la tabla con el nombre de BANCOS no debe quedar algo como esto:
Listo despues de esto hacemos doble click sobre la casilla PK del campo codigo y alli escogemos la pestaña Autoincrement, despues escogemos nuevamente la pestaña Trigger y marcamos la casilla Create Trigger y le hacemos click al boton OK asi:
Bueno en resumen lo que hace esto es crear un procedimiento para incrementar el ID (en este caso el campo CODIGO) de cada registro insertado en la tabla y si revisamos en los triggers debe verse algo como esto:
Luego de esto creamos los procedimientos y vamos a empezar con el procedimiento:
Guardar:
Para crear este procedimiento solo debemos hacer click derecho sobre el arbol de la parte izquierda en donde dice Procedures y escogemos la opcion New Procedure... despues en la ventana que aparece lo primero que hacemos es darle un nombre a nuestro procedimiento ya que despues haremos referencia a él.
El nombre seria NUEVO_BANCO, luego vamos a crear las variables que haran la conexión y guardaran los datos, hacemos click derecho y escogemos la opcion Insert Parameter / variable, listo le damos un nombre, tipo y el tamaño de la variable (caracteres), asi creamos las dos variables FECHA de tipo varchar con un tamaño de 20 y BANCO de tipo varchar con un tamaño de 100 luego en la parte de abajo de la ventana insertamos el siguiente codigo:
begin
/* NUEVO BANCO */
INSERT INTO BANCOS(FECHA, BANCO)
VALUES (:FECHA, :BANCO);
WHEN SQLCODE -803 DO
EXCEPTION NUEVO_BANCO;
end
Asi:
lo que hace este codigo es insertar los datos por medio de la variables que declaramos ateriormente.
Modificar:
Nuevamente haclemos click derecho sobre procedures, nuevo procedure conel nombre de MODIFICAR_BANCO, con las siguientes variables CODIGO de tipo integer, FECHA de tipo varchar con tamaño 20, BANCO de tipo varchar con tamaño de 100, luego pegamos este codigo en la parte de abajo de la ventana sql:
begin
/* MODIFICAR BANCO */UPDATE BANCOS
SET FECHA= :FECHA,
BANCO= :BANCO
WHERE (CODIGO= :CODIGO);
WHEN SQLCODE -803 DO
EXCEPTION NUEVO_BANCO;
end
bueno la ventana debe verse de esta manera:
Bueno ahora vamos con el siguiente procedimiento:
Eliminar:
Este procedimiento al igual que los dos anteriores hay que crear variable con la diferencia que aqui solo necesitamos el ID (CODIGO en nuestro caso), creamos la variable CODIGO de tipo integer y tiene el nombre BORRAR_BANCO, e insertamos el siguiente codigo el la ventana sql:
begin
/* BORRAR BANCO */DELETE FROM BANCOS
WHERE (CODIGO = :CODIGO);
end
se debe ver de esta forma:
Ahora nos vamos a la excepcion que hemos nombrado en los dos procedimientos almacenados de guardar y modificar, la cual tiene la funcion de verificar si se esta intentando guardar un registro con el mismo id (CODIGO en nuestro caso), se le crea con el nombre NUEVO_BANCO, en el campo EXCEPTION TEXT digitamos el texto que queremos que aparezca al momento de lanzar el mensaje para el usuario final, en el campo Description colocamos VIOLATION PK para indicarle a excepcion si ya ese ID existe ya en la base de datos. la ventana debe verse parecida a esta:
Buenos despues de los procedimientos nos vamos a delphi a la pestaña InterBase y escogemos el componente TIBStoredProc y lo llamamos procedimientos este componente va directamente asociado al componente IBTable que es el que tiene la ruta de la base de datos:
Teniendo este componente corectamente configurado y con conexion a la base de datos, procedemos a llamar cada procedimiento desde delphi de la siguiente forma:
NOTA: En estos ejemplos de codigo van a notar que hago el codigo empezando con with modulo.procedimientos... eso lo que significa es que yo tengo todos estos componentes alojados e un modulo esta referencia cambia si tienes los componentes en cada formulario de Delphi.
Delphi:
Nota: Los Componentes Utilizados NO Corresponden a componentes de la paleta Data Controls, son los conponentes convencionales de Delphi Edit, Label, Panel, con exepcion de las Grillas que si es un componente de tipo DB.
Ventana ejemplo bancos:
En esta ventana ejemplo al hacer click sobre el boton modificar aparecera la otra ventana que corresponde solo a una ventana de busqueda que al hacerle doble click sobre alguna de sus filas retornara el conteneido del nombre del banco a una caja de texto TEdit y el codigo a una variable que esta declarada de forma publica en el formulario bancos la cual se llama codbanco y es de tipo Integer, al tener esto ya tenemos el ID (CODIGO en este ejemplo) que es lo que necesitamos para Modificar y Eliminar, en los demas ejemplo de codigos del delphi haremos referencia a codbanco, que es la variable publica que mencione anteriormente... y los demas hard_fecha.caption es un componente de tipo panel por eso llamamos su propiedad .caption y en cuanto a ebanco.Text es de tipo TEdit ojo no es DBEdit.
Para explicar aun mas la utilizacion del panel en este ejemplo se preguntaran como se va a digitar la fecha en este campo bueno no se digita se asigna directamente al cargarse el fomulario Bancos de la siguiente manera en el evento onshow del formulario; este debe verse de la siguiente manera:
procedure TfBanco.FormShow(Sender: TObject);
begin
hard_fecha.Caption:=datetostr(date);
end;
begin
hard_fecha.Caption:=datetostr(date);
end;
como pueden darse cuenta aparece como fBanco, por que ese el el nombre interno del fomulario...
Ahora pasamos a la codificacion delphi la cual pueden llamar desde botones o eventos segun la necesidad que tenga cada uno de usutedes.
Guardar:
//NUEVO BANCO//
begin
with modulo.procedimientos dobegin
StoredProcName:='NUEVO_BANCO';
ParamByName('FECHA').AsString:=hard_fecha.caption;
ParamByName('BANCO').AsString:=ebanco.Text;
Prepare;
ExecProc;
end;
modulo.transaccion.Commit;
modulo.bdbancos.Active:=true;
showmessage('REGISTRO CREADO!');
end;
//NUEVO BANCO//
begin
with modulo.procedimientos do
begin
StoredProcName:='MODIFICAR_BANCO';
ParamByName('CODIGO').AsInteger:=codbanco;
ParamByName('FECHA').AsString:=hard_fecha.caption;
ParamByName('BANCO').AsString:=ebanco.Text;
Prepare;
ExecProc;
end;
modulo.transaccion.Commit;
modulo.bdbancos.Active:=true;
showmessage('REGISTRO MODIFICADO!');
end;
Eliminar:
//ELIMINAR BANCO//
begin
with modulo.procedimientos do
begin
StoredProcName:='BORRAR_BANCO';
ParamByName('CODIGO').AsInteger:=codbanco;
Prepare;
ExecProc;
modulo.transaccion.Commit;
end;
modulo.bdbancos.Active:=true;
showmessage('BANCO ELIMINADO');
end;
Listo ya con esto tenemos los procediemientos basicos Altas, Bajas y Modificaciones en Delphi con Firebird.
HOla, lo primero gracias por el manual...
ResponderEliminarY para los que somos muy novatos, no me queda claro desde donde llamar los codigos que pones al final, imagino que desde un formulario , pero como desde un dbgrid, o desde dbedit, o desde que componentes capturas los datos para el usuario==?
que es por ejemplo hard_fecha, etc????, quizás con un pantallazo aclararía mejor para los que tenemos poca idea...
Hola, lo que esta ocurriendo y tienes mucha razon es que me falto especificar el detalle que yo no utilizo los campos de la paleta Data Control, son componetes convencionales por eso es que vez que hard_fecha, la propiedad que llamo es la caption, y el otro es un edit normal, la ventaja de utilizar esto es que puedes utilizar componentes convencionales y no con los componentes db si tienes un error de conexion a la bd te va a salir un error tremendo, eso entre otras ventajas (En mi opinion personal), te voy a enviar una imagen del formulario que yo tengo en ese proyecto que tome como ejemplo y lo tome porque solo tiene dos campos.
ResponderEliminarLo primero , muchisimas gracias, por rectificar tu entrada de blog, y tener la paciencia de por correos ir guiandome en este aprendizaje...
ResponderEliminarCreo que con esta explicación a los que somos nuevos en esto nos quedarán las cosas más claras(al menos a mi)....
Me faltaría de entender, como conseguir el borrado, ya que con el panel no se podría capturar de vuelta de la segunda ventana, la fecha para borrarlo...
Y en la modificación, voy a intentar simularlo, para ver si consigo crear la sentencia sql , para mostrar todos los bancos, y al picar en uno de ellos que conseguir capturar los valores, ya que soy muy nuevo y no se como hacerlos...
En conclusión , gracias por tu paciencia y por ayudar a los demás..., un saludo...
ok que bueno que te sirvio; en estos dias estaré publicando otra entrada sobre colsultas sql y como tomar esos valores desde una grilla, pasar parametros de una forma otra entre otros....
ResponderEliminarQue estes muy bien.
muy buen aporte amigo solo tengo una duda con esta linea
ResponderEliminarmodulo.bdbancos.Active:=true;
a que se componente se refiere, podrías explicarme ? gracias salu2
Este comentario ha sido eliminado por el autor.
EliminarLograste saber a que se refería?
EliminarHola, esta linea hace referencia a componente de tipo IBTable, y en cuanto al modulo es solo una unidad de interconexion para componentes de tipo base de datos principalmente, la cual tiene propiedades especiales para realizar esta tarea y cuando le digo active es para que cuando se realiza algun tipo de transaccion la base de datos se desactiva momentaneamente la vista de datos como en mi caso que el DBGrid si un componente de tipo BD me va a aparecer como si no tuviese comnexion con la base de datos (Data Access) y cuando hago el Insert a la base de datos se me actualiza la vista en el DBGrid con el ultimo registro ingresado.
ResponderEliminarespero te ayude mi respuesta saludos.
como se puede egregar un campo nuevo a una tabla firebird desde delphi.
ResponderEliminaralguna idea o sugerencia?
Puedes crear un procedimiento almacenado que haga esta tarea y le pasas los parámetros desde Delphi.
EliminarSaludos,
Buenas Tarde JEISON
ResponderEliminarVeo que tenemos conocimiento de Delphi.. podrias ayudarme o recomendarme algun otro sitio??
Donde expliquen paso a paso ya sea como iniciar un proyecto en delphi6 especialmente ya que me dijeron el 7 tiene mucho error con Ibe Expert + Firebird 2.5 y claro el manejador Postgress
Ya que bastante estube buscando data buena pero lo mejor que encontre fue la famosa web clubdelphi.. que por cierto tiene lastimosamente ejemplos muy mal hechos excepto algunos.
Ya que tengo que realizar un proyecto en este Ide.
Te agradeceria tu ayuda
Atte.
Daniel.
Bueno, primero que todo sería conveniente saber que lenguaje de programación manejas (Sera... Java, Visual Basic, PHP, ASP, JSP ?), un ejemplo paso a paso como tal de un proyecto completo no lo vamos a encontrar ya que Delphi no es una herramienta de codigo libre razón por la cual a disminuido su utilización en los programadores que desarrollamos software con herramientas que representan un bajo costo para el cliente.
EliminarOtro aspecto que debes conocer de delphi es que lo puedes trabajar a puro codigo (o sea manual utilizando los units, para generar funciones preestablecidas) o de la manera convencional que la visual.
para empezar debes leerte algunos tutoriales del IDE Delphi para que conozcas sus componentes y para que sirven.
Esperon que sea de tu ayuda de todas formas si en algo se te puede ayudar en escribojava.blogspot.com, con gusto lo haré.
http://coba.dc.fi.udc.es/~penabad/delphi6.pdf
http://www.lawebdelprogramador.com/codigo/Delphi/index1.html