Ir al contenido principal

Guardar Modificar y Eliminar en Delphi conectado a firebird

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:


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;

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 do
       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...

Comentarios

  1. HOla, lo primero gracias por el manual...
    Y 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...

    ResponderEliminar
  2. 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.

    ResponderEliminar
  3. Lo primero , muchisimas gracias, por rectificar tu entrada de blog, y tener la paciencia de por correos ir guiandome en este aprendizaje...
    Creo 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...

    ResponderEliminar
  4. 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....

    Que estes muy bien.

    ResponderEliminar
  5. muy buen aporte amigo solo tengo una duda con esta linea

    modulo.bdbancos.Active:=true;

    a que se componente se refiere, podrías explicarme ? gracias salu2

    ResponderEliminar
  6. Hola, 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.

    espero te ayude mi respuesta saludos.

    ResponderEliminar
  7. como se puede egregar un campo nuevo a una tabla firebird desde delphi.
    alguna idea o sugerencia?

    ResponderEliminar
    Respuestas
    1. Puedes crear un procedimiento almacenado que haga esta tarea y le pasas los parámetros desde Delphi.

      Saludos,

      Eliminar
  8. Buenas Tarde JEISON
    Veo 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.

    ResponderEliminar
    Respuestas
    1. 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.

      Otro 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

      Eliminar

Publicar un comentario

Entradas populares de este blog

Fireworks CS3 portable

Para que hagas los logos, botones e imagenes para tus aplicaciones facil y rapido... ¿Qué es Fireworks? Adobe Fireworks es una aplicación en forma de estudio (basada en la forma de estudio de Adobe Flash ), pero con más parecido a un taller destinado para el manejo híbrido de gráficos vectoriales con Gráficos en mapa de bits y que ofrece un ambiente eficiente tanto para la creación rápida de prototipos de sitios Web e interfaces de usuario, como para la creación y Optimización de Imágenes para web. Originalmente fue desarrollado por Macromedia , compañía que fue comprada en 2005 por Adobe Systems . Fireworks está disponible de forma individual o integrado en Adobe CS3/CS4/CS5 y por tanto ha sido diseñado para integrarse con otros productos de Adobe, como Dreamweaver y Flash . Integración con Adobe Flash La integración con Adobe Flash se ha ido reduciendo paulatinamente desde que Flash, en su versión 7, integró la herramienta PolyStar que hace un polígono

Pasar de una ventana a otra en java

Hola a todos en esta oportunidad estamos postiando algo que cuando empezamos con java es muy necesario y es como pasar de una ventana a otra, ya sea JDialog o JFrame; creados en tiempo de ejecucion o en aplicaciones de escritorio: Para llamar a un JDialog:        JDialog1 dialogo = new JDialog1 ( this , true );        dialogo . show (); y para cerrar un JDialogo de una plicacion de escritorio se puede utilizar:        dispose (); Para llamar a un JFrame:        JFrame1 frame = new JFrame1 ();        frame . show (); Para cerrar un JFrame de una plicacion de escritorio:                 dispose ();   o tambien: System. exit (0); y si se contruye a partir de la clase JFrame se coloca el siguiente codigo en la parte publica del documento:       setDefaultCloseOperation ( EXIT_ON_CLOSE ); Espero los siguientes ejemplos les sean de mucha ayuda... Deja tu comentario o agradecimiento.

Limitar texto con CSS

HTML: <span class= "text" > Hello world this is a long sentence </span> CSS: .text {   display : block ;   width : 100px ;   overflow : hidden ;   white-space : nowrap ;   text - overflow : ellipsis; }  RESULTADO: Hello world t...