Busqueda de registros en Delphi

| 2013-03-3 | No hay comentarios »

IBTable vs IBQuery
El IBQuery es muy similar al IBTable en cuanto al manejo de datos. Pero la diferencia está en que el IBTable solo permite traer datos de una sola tabla y el IBQuery permite hacer una consulta SQL y traer datos de más de una tabla. Una vez que los datos son traidos a la aplicacion el IBQuery lo maneja como si fuera una sola tabla.

Ejemplo:

Diag_ent_rel

De las siguientes tablas el IBTable solo permitirá traer los campos de la tabla nominas o solo los campos de la tabla trabajadores.
En cambio con el IBQuery podemos traer los campos trabajador, horas normales y horas extras de la tabla nominas y los campos nombre y apellido de la tabla trabajadores y manejarlos como si fuera todo una sola tabla.

Utilizando el IBQuery para traer datos de más de una tabla.
1. Crear la conexion con la base de datos utilizando los componente IBDatabase e IBTransaction.
2. Agregar un IBQuery al formulario y relacionar con el IBDatabase.
3. Modificar las siguientes propiedades del IBQuery:
3.1. Database: colocar el nombre del componente IBDatabase.
3.2. SQL: debemos crear la consulta sql. Este es un ejemplo si usamos las tablas de la figura anterior:

          SELECT trabajadores.trabajador, trabajadores.apellido, trabajadores.nombre,
          nominas.horas_normales, nominas.horas_extras, nominas.mes, nominas.ano
          FROM nominas, trabajadores
          WHERE nominas.trabajador=trabajadores.trabajador

3.3. Y para terminar agregamos un datasource y relacionar el datasource con el IBQuery. Asi como hacemos con el IBtable.

Editando los valores del IBQuery en tiempo de ejecucion para realizar busquedas filtradas.
1. Crear la conexion con la base de datos utilizando los componente IBDatabase e IBTransaction.
2. Agregar un IBQuery al formulario y relacionar con el IBDatabase.
3. Modificar las siguientes propiedades del IBQuery. Ver punto anterior “Utilizando el IBQuery para taer datos de más de una tabla“.
4. Agregar un DBGrid, un edit y un boton al formulario.
5. Relacionar el DBGrid con el datasource del IBQuery.
6. Y en el boton, en el evento click, hacemos lo siguiente (por codigo).
6.1. Desactivamos el IBQuery para poder cambiar los datos: IBQuery1.active:=false;
6.2. Cambiamos el texto de la propiedad SQL del IBQuery:ibquery1.SQL.Text:=’SELECT trabajadores.trabajador, trabajadores.apellido, trabajadores.nombre, nominas.horas_normales, nominas.horas_extras, nominas.mes, nominas.ano FROM nominas, trabajadores WHERE nominas.trabajador=trabajadores.trabajador and nominas.nomina=’+edit1.Text;
6.3. Activamos el IBQuery.

Buscando un registro dentro de una tabla.
1. Colocamos un IBtable en el formulario.
2. Relacionamos el IBTable con el IBDatabase.
3. Asignamos una tabla al IBTable.
3. En el evento del componente que deseemos colocamos el siguiente codigo:
ibtable1.locate(‘campo’,vararrayof([valor_a_buscar]),[]).
Ejemplo: ibtable1.Locate(‘trabajador’, vararrayof([ibquery1.FieldValues[‘trabajador’]]),[]);
(en el ejemplo fue colocado en dobre click de la grilla).

Mostrar valores de un registro por cuadro de mensaje.
1. Creamos dos variables string uno llamado mensaje y otro titulo.
2. Cargamos el valor para la variable titulo.
Ejemplo: titulo:=’TRABAJADOR ‘+inttostr(ibquery1.FieldValues[‘trabajador’]);
IBQuery1.fieldValues[‘campo’] <– con este codigo conseguimos el valor que tiene el campo del registro seleccionado.
3. Cargamos el valor para la variable mensaje.
Ejemplo: mensaje:=’Nombre: ‘+ibtable1.FieldValues[‘apellido’]+char(13)+’Nombre: ‘+ibtable1.FieldValues[‘nombre’]+char(13)+’Domicilio: ‘+ibtable1.FieldValues[‘domicilio’]+char(13)+’Telefono: ‘+ibtable1.FieldValues[‘telefono’];

char(13) <– Es un enter.
4. Ejecutamos el cuadro de mensajes.
     Ejemplo: Application.MessageBox(PChar(mensaje),PChar(titulo));
PChar(texto_string) <– El cuadro de mensaje no admite string directamente por eso debemos usar la funcion PChar.


¿Como verificamos si una tabla o un query tiene registros? 
Con el siguiente codigo:
if ibquery1.IsEmpty then //pregunta si el query esta vacio
begin
Application.MessageBox( ‘No existe listado para la nomina ingresada’, ‘Lista vacia’);
end;

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • Manual básico de Delphi
  • Reportes en Delphi
  • DBLookupComboBox en Delphi
  • Botones para registros de tablas en Delphi



SEGUÍNOS EN FACEBOOK


GITHUB