Os indicamos, paso a paso, con capturas de pantalla, explicaciones y código fuente, cómo crear e implementar una ventana de selección de registro. Útil para aquellas tablas / formularios que tengan enlaces a otras tablas (por ejemplo, en una ventana de alta de factura, cómo seleccionar el cliente).
COMO CREAR UNA VENTANA DE SELECCIÓN DE REGISTRO EN DELPHI
La teoría: a veces nos encontramos con aplicaciones que, cuando hay que seleccionar algún registro "foráneo" (en la ventana de facturas seleccionar el cliente, en la ventana de albaranes seleccionar el proveedor, en la ventana de detalle de factura seleccionar el artículo, etc.) nos muestran un simple desplegable, con el inconveniente de que sólo es posible buscar un elemento por el comienzo del nombre. Esto hace que la selección sea más rápida si se sabe cómo empieza el nombre, pero cuando hay muchos registros es imposible aprenderse los nombres, por lo que se hace inviable.
En nuestro caso, os explicararemos cómo hacer una ventana de selección de registros que sirva para todos los formularios / ventanas de la aplicación. Se trata de una ventana de selección donde el usuario podrá buscar por una o varias palabras (independientemente de la posición donde se encuentren), también podrá buscar por varios campos (nombre, código, población, etc). Todo ello configurable en tiempo de diseño, para poder utilizar la misma ventana.
Esta ventana tendrá el siguiente aspecto:
Se trata de una ventana con un grid que mostrará los campos que le indiquemos en el SELECT (consulta SQL que ejecutemos). Esta ventana tendrá un campo de edición para que el ususuario pueda escribir las palabras de búsqueda. También tendrá cuatro botones de opción para seleccionar por qué campo quiere buscar (son personalizables por código). A su vez, esta ventana incluye una barra de botones con las siguientes opciones:
-
Botón de selección de elemento actual: selecciona el registro actual y cierra la ventana.
-
Botón de inserción de nuevo elemento: muestra una ventana para añadir un nuevo registro.
-
Botón de refrescar: vuelve a ejecutar la consulta SQL, para actualizar los datos.
-
Botón de cerrar: cierra la ventana sin seleccionar ningún elemento.
La ventaja de esta ventana de selección es que permite realizar las búsquedas de forma automática. Es decir, conforme el usuario va escribiendo las palabras a buscar se van mostrando los registros que cumplan la condición de búsqueda.
Un ejemplo de utilización de esta ventana podría ser en el caso de una aplicación de gestión de cobros, la ventana de alta de nuevo cobro sería:
Como se puede observar, en el campo "Cliente" aparece un cuadro de edición (por si el usuario sabe el código, para que lo introduzca directamente) y un botón. Este botón muestra la ventana de selección de clientes:
Es suficiente con escribir un apellido, por ejemplo, y automáticamente aparecerán todos los clientes con ese apellido.
Al seleccionar el cliente, la ventana de cobro quedará de la siguiente forma:
Lo que hace la ventana de selección cuando se selecciona un elemento es guardar el código de dicho registro en una variable global. Luego en el código del botón seleccionar se obtiene dicho valor y se inserta en el campo correspondiente del registro actual.
A continuación explicaremos paso a paso cómo se crea y configura (en tiempo de diseño) la ventana de selección:
- Utilizaremos un TForm con las siguientes características:
- BorderIcons: [biSystemMenu,biMaximize].
- AutoSize = False.
- BorderStyle = bsSizeable.
- Position = poScreenCenter.
- WindowState = wsNormal
- El TForm contendrá los siguientes componentes: TControlBar, TGroupBox, TRadioButton, TLabel, TMaskEdit, TDBGrid, TTimer, TActionList, TPopupMenu:
- El código de las funciones y procedimientos que utilizaremos será:
123456789101112131415161718192021222324252627 procedure TformSeleccion.arreglarCampos ();beginmd.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';md.TCSeleccion.FieldByName('Codigo').DisplayWidth := 6;if (tag = vtNumProveedor) then //proveedorbeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 7;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';end;if (tag = vtNumArticulo) then //artículosbeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 3;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Cód.';md.TCSeleccion.FieldByName('nombre').DisplayWidth := 45;md.TCSeleccion.FieldByName('nombre').DisplayLabel := 'Artículo';md.TCSeleccion.FieldByName('Familia').DisplayWidth := 10;md.TCSeleccion.FieldByName('Familia').DisplayLabel := 'Familia';md.TCSeleccion.FieldByName('Marca').DisplayWidth := 10;md.TCSeleccion.FieldByName('Marca').DisplayLabel := 'Marca';md.TCSeleccion.FieldByName('Modelo').DisplayWidth := 5;md.TCSeleccion.FieldByName('Modelo').DisplayLabel := 'Mod.';md.TCSeleccion.FieldByName('precioventa').DisplayWidth := 5;md.TCSeleccion.FieldByName('precioventa').DisplayLabel := 'PVP';end;end;
En esta función, que será la encargada de mostrar adecuadamente los resultados (nombre del título de columna, tamaño, etc) hemos puesto un par de ejemplos, lógicamente tendréis que adaptarlos a vuestras necesidades.
- En el evento "FormShow" del TForm pondremos el siguiente código:
12345678 procedure TformSeleccion.FormShow(Sender: TObject);beginmd.TCSeleccion.Close;vtClaveElegida := 0;ActRefrescarexecute(nil);Timer1.Enabled := False;txtbuscar.setfocus;end;
- En el evento "FormClose" del TForm colocaremos el siguiente código:
1234567 procedure TformSeleccion.FormClose(Sender: TObject;var Action: TCloseAction);beginmd.TCSeleccion.close;screen.cursor := crdefault;action := cafree;end;
- El procedimiento "Click" del botón de refrescar tendrá el siguiente código:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 procedure TformSeleccion.ActRefrescarExecute(Sender: TObject);begintxtBuscar.EditMask := '';md.TCSeleccion.close;md.TCSeleccion.sql.clear;case tag ofvtNumProveedor : //proveedorbeginCaption := 'Selección de proveedor...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' +vtTablaTercero +' WHERE tipo = "Proveedor" or tipo = "Otro"');op1.visible := true;op2.visible := true;op3.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';op3.Caption := 'Cif/Nif';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;if Op3.Checked then //codigobeginlb.Caption := '&Buscar por Cif/Nif';md.TCSeleccion.sql.add('Order by cif');end;end;vtNumCliente : //clientebeginCaption := 'Selección de cliente...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero +' WHERE tipo = "Cliente" or tipo = "Otro"');op1.visible := true;op2.visible := true;op3.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';op3.Caption := 'Cif/Nif';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;if Op3.Checked then //codigobeginlb.Caption := '&Buscar por Cif/Nif';md.TCSeleccion.sql.add('Order by cif');end;end;trymd.TCSeleccion.open;exceptraise;end;arreglarCampos ();txtbuscar.setfocus;end;
Las constantes vtNumCliente, vtNumProveedor son declaradas públicamente, son números que identifican cada ventana.
- En el evento OnChange del componente TEdit colocaremos el siguiente código:
1234567 procedure TformSeleccion.TxtBuscarChange(Sender: TObject);beginTimer1.Enabled := False;Timer1.Interval := 500;Timer1.Enabled := True;end;
- En el evento OnTimer del TTimer (temporizador) podremos el siguiente código:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 procedure TformSeleccion.Timer1Timer(Sender: TObject);beginTimer1.Enabled := False;if (tag in [vtNumproveedor]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero);md.TCSeleccion.sql.add('WHERE (tipo = "Proveedor" ' +'or tipo = "Otro") and nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString :='%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text,[loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumCliente]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero);md.TCSeleccion.sql.add('WHERE (tipo = "Cliente" ' +'or tipo = "Otro") and nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString :='%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text,[loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;arreglarCampos;end;
-
En el evento OnClick de los componentes TRadioButton haremos una llamada al procedimiento "ActRefrescarExecute", para que cuando el usuario haga clic sobre uno de los campos a buscar se ordene automáticamente por éste.
- En el evento ActNuevoExecute pondremos el siguiente código:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 procedure TformSeleccion.ActNuevoExecute (Sender: TObject);beginif (tag = vtNumCliente) or (Tag = vtNumProveedor) or(Tag = vtNumTercero) then //cliente y proveedorbeginvtAccion := 'nuevo';application.createform(tformGCliente, formGCliente);formGCliente.ShowModal;end;if tag = vtNumArticulo then //clientebeginvtAccion := 'nuevo';application.createform(tformGArticulo, formGArticulo);formGArticulo.ShowModal;end;if tag = vtNumMarca then //marca - materialbeginvtAccion := 'nuevo';application.createform(tformGMarca, formGMarca);formGMarca.ShowModal;end;if tag = vtNumModelo then //modelo - materialbeginvtAccion := 'nuevo';application.createform(tformGModelo, formGModelo);formGModelo.ShowModal;end;if tag = vtNumTecnico then //TécnicobeginvtAccion := 'nuevo';{ DONE : Falta el formulario FormGTecnico }application.createform(tformGTecnico, formGTecnico);formGTecnico.ShowModal;end;if tag = vtNumContacto then //ContactobeginvtAccion := 'nuevo';application.createform(tformGContacto, formGContacto);formGContacto.ShowModal;end;if tag = vtNumRecurso then //RecursobeginvtAccion := 'nuevo';application.createform(tformGRecurso, formGRecurso);formGRecurso.ShowModal;end;ActRefrescarExecute(nil);end;
- En la ventana que hace la llamada a la ventana de selección (en nuestro ejemplo FormGCobro), el botón de abrir selección tendrá el siguiente código:
12345678910 procedure TformGCobro.BSeleccionarClick(Sender: TObject);begintxtCodigoCliente.SetFocus;application.createform(tformseleccion, formseleccion);formseleccion.ActNuevo.Enabled := true;formseleccion.tag := vtNumCliente;formseleccion.ShowModal;if vtClaveElegida <> 0 thentTabla.FieldByName ('codigocliente').AsInteger := vtClaveElegida;end;
NOTAS ADICIONALES
En nuestro caso, el componente de acceso a base de datos, lo hemos colocado en un módulo de datos (Data Module), aunque se podría colocar en el propio formulario. Por ello, cuando nos referimos al componente TQuery ponemos:
md.TCSeleccion
donde "md" es el nombre del módulo de datos y "TCSeleccion" es el nombre del "TQuery".
Os mostramos el código completo de una ventana de selección de una de nuestras aplicaciones, AjpdSoft Gestión Integral:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198 unit UnidadSeleccion;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls, ComCtrls, ToolWin, Grids, DBGrids, Db, DBTables,ActnList, Menus,variants, Mask;typeTformSeleccion = class(TForm)Tabla: TDBGrid;Panel1: TPanel;ActionList1: TActionList;ActSeleccionar: TAction;ActCerrar: TAction;LB: TLabel;GroupBox1: TGroupBox;Op1: TRadioButton;Op2: TRadioButton;Op3: TRadioButton;Op4: TRadioButton;PopupMenu1: TPopupMenu;Seleccionar1: TMenuItem;Salir1: TMenuItem;N1: TMenuItem;CB: TControlBar;BB: TToolBar;ToolButton1: TToolButton;ToolButton2: TToolButton;ToolButton3: TToolButton;ToolButton6: TToolButton;ToolButton7: TToolButton;ActNuevo: TAction;ActRefrescar: TAction;Nuevo1: TMenuItem;Refrescar1: TMenuItem;actMostrarTodos: TAction;ToolButton4: TToolButton;Mostrartodos1: TMenuItem;Timer1: TTimer;txtBuscar: TMaskEdit;procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure TablaKeyPress(Sender: TObject; var Key: Char);procedure FormShow(Sender: TObject);procedure seleccionar ();procedure ActCerrarExecute(Sender: TObject);procedure TxtBuscarChange(Sender: TObject);procedure TxtBuscarKeyPress(Sender: TObject; var Key: Char);procedure FormKeyPress(Sender: TObject; var Key: Char);procedure TxtBuscarKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);procedure ActNuevoExecute(Sender: TObject);procedure ActRefrescarExecute(Sender: TObject);procedure ActSeleccionarExecute(Sender: TObject);procedure actMostrarTodosExecute(Sender: TObject);procedure arreglarCampos ();procedure Timer1Timer(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varformSeleccion: TformSeleccion;implementationuses UnidadMenuPrincipal, UnidadProcedimientos, UnidadModuloDatos,UnidadGCliente, UnidadGArticulo, UnidadGFamilia, UnidadGMarca,UnidadGModelo, UnidadGTecnico, UnidadGParte, UnidadGAccion,UnidadGContacto, UnidadGRecurso;{$R *.DFM}procedure TformSeleccion.arreglarCampos ();beginmd.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';md.TCSeleccion.FieldByName('Codigo').DisplayWidth := 6;if (tag = vtNumProveedor)then //proveedorbeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 7;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';end;if (tag = vtNumContacto)then //contactobeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 7;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';md.TCSeleccion.FieldByName('emailempresa1').DisplayWidth := 15;md.TCSeleccion.FieldByName('emailempresa1').DisplayLabel := 'Email empresa';md.TCSeleccion.FieldByName('movilempresa1').DisplayWidth := 15;md.TCSeleccion.FieldByName('movilempresa1').DisplayLabel := 'Móvil empresa';end;if (tag = vtNumArticulo) then //artículosbeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 3;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Cód.';md.TCSeleccion.FieldByName('nombre').DisplayWidth := 45;md.TCSeleccion.FieldByName('nombre').DisplayLabel := 'Artículo';md.TCSeleccion.FieldByName('Familia').DisplayWidth := 10;md.TCSeleccion.FieldByName('Familia').DisplayLabel := 'Familia';md.TCSeleccion.FieldByName('Marca').DisplayWidth := 10;md.TCSeleccion.FieldByName('Marca').DisplayLabel := 'Marca';md.TCSeleccion.FieldByName('Modelo').DisplayWidth := 5;md.TCSeleccion.FieldByName('Modelo').DisplayLabel := 'Mod.';md.TCSeleccion.FieldByName('precioventa').DisplayWidth := 5;md.TCSeleccion.FieldByName('precioventa').DisplayLabel := 'PVP';end;if (tag = vtNumParte) then //partesbeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 5;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';md.TCSeleccion.FieldByName('numero').DisplayWidth := 5;md.TCSeleccion.FieldByName('numero').DisplayLabel := 'Nº';md.TCSeleccion.FieldByName('fecha').DisplayWidth := 12;md.TCSeleccion.FieldByName('fecha').DisplayLabel := 'Fecha';md.TCSeleccion.FieldByName('totalhoras').DisplayWidth := 5;md.TCSeleccion.FieldByName('totalhoras').DisplayLabel := 'T.Horas';md.TCSeleccion.FieldByName('tecnico1').DisplayWidth := 20;md.TCSeleccion.FieldByName('tecnico1').DisplayLabel := 'Técnico 1';md.TCSeleccion.FieldByName('tecnico2').DisplayWidth := 20;md.TCSeleccion.FieldByName('tecnico2').DisplayLabel := 'Técnico 2';end;if (tag = vtNumIncidencia)then //incidenciabeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 5;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';md.TCSeleccion.FieldByName('asunto').DisplayWidth := 30;md.TCSeleccion.FieldByName('asunto').DisplayLabel := 'Asunto';md.TCSeleccion.FieldByName('tecnico').DisplayWidth := 15;md.TCSeleccion.FieldByName('tecnico').DisplayLabel := 'Técnico';md.TCSeleccion.FieldByName('cliente').DisplayWidth := 15;md.TCSeleccion.FieldByName('cliente').DisplayLabel := 'Cliente';md.TCSeleccion.FieldByName('fecha').DisplayWidth := 10;md.TCSeleccion.FieldByName('fecha').DisplayLabel := 'Fecha';end;if (tag = vtNumNota)then //Notabeginmd.TCSeleccion.FieldByName('Codigo').DisplayWidth := 5;md.TCSeleccion.FieldByName('Codigo').DisplayLabel := 'Código';md.TCSeleccion.FieldByName('asunto').DisplayWidth := 50;md.TCSeleccion.FieldByName('asunto').DisplayLabel := 'Asunto';md.TCSeleccion.FieldByName('fechaalta').DisplayWidth := 10;md.TCSeleccion.FieldByName('fechaalta').DisplayLabel := 'Fecha';end;end;procedure TformSeleccion.FormClose(Sender: TObject;var Action: TCloseAction);beginmd.TCSeleccion.close;screen.cursor := crdefault;action := cafree;end;procedure TformSeleccion.TablaKeyPress(Sender: TObject; var Key: Char);beginif (key = 'c') or (key = 'C') or (key = chr(13))thenactseleccionarexecute(nil);end;procedure TformSeleccion.FormShow(Sender: TObject);beginmd.TCSeleccion.Close;vtClaveElegida := 0;ActRefrescarexecute(nil);Timer1.Enabled := False;txtbuscar.setfocus;end;procedure tformSeleccion.seleccionar ();beginif (tag in [vtNumProveedor, vtNumCliente, vtNumArticulo,vtNumFamilia, vtNumMarca, vtNumModelo, vtNumAccion, vtNumTecnico,vtNumParte, vtNumContacto, vtNumRecurso, vtNumTercero,vtNumIncidencia, vtNumNota]) thenbeginif not (md.TCSeleccion.fieldbyname('Codigo').AsInteger = 0) thenvtClaveElegida := md.TCSeleccion.fieldbyname('Codigo').AsInteger;end;if tag = vtNumContacto thenbeginvtClaveElegidaT := md.tcSeleccion.FieldByName('nombre').AsString;vtClaveElegidaT2 := 'Email: ' + <br>md.tcSeleccion.FieldByName('emailempresa1').AsString +' - Móvil: ' + <br>md.tcSeleccion.FieldByName('movilempresa1').AsString;end;if tag = vtNumTercero thenbeginvtClaveElegidaT := md.tcSeleccion.FieldByName('nombre').AsString;end;close;end;procedure TformSeleccion.ActCerrarExecute(Sender: TObject);beginclose;end;procedure TformSeleccion.TxtBuscarChange(Sender: TObject);beginTimer1.Enabled := False;Timer1.Interval := 500;Timer1.Enabled := True;end;procedure TformSeleccion.TxtBuscarKeyPress(Sender: TObject; var Key: Char);beginif key = chr(13) thenbeginkey := #0;tabla.setfocus;end;end;procedure TformSeleccion.FormKeyPress(Sender: TObject; var Key: Char);beginif key = chr(27) then //escapeActCerrarExecute(nil);end;procedure TformSeleccion.TxtBuscarKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);beginif key = 40 then //tecla cursor abajotabla.setfocus;end;procedure TformSeleccion.ActNuevoExecute(Sender: TObject);beginif (tag = vtNumCliente) or (Tag = vtNumProveedor) or <br> (Tag = vtNumTercero) then //cliente y proveedorbeginvtAccion := 'nuevo';application.createform(tformGCliente, formGCliente);formGCliente.ShowModal;end;if tag = vtNumArticulo then //clientebeginvtAccion := 'nuevo';application.createform(tformGArticulo, formGArticulo);formGArticulo.ShowModal;end;if tag = vtNumFamilia then //familia - materialbeginvtAccion := 'nuevo';application.createform(tformGFamilia, formGFamilia);formGFamilia.ShowModal;end;if tag = vtNumMarca then //marca - materialbeginvtAccion := 'nuevo';application.createform(tformGMarca, formGMarca);formGMarca.ShowModal;end;if tag = vtNumModelo then //modelo - materialbeginvtAccion := 'nuevo';application.createform(tformGModelo, formGModelo);formGModelo.ShowModal;end;if tag = vtNumParte then //partebeginvtAccion := 'nuevo';application.createform(tformGParte, formGParte);formGModelo.ShowModal;end;if tag = vtNumAccion then //TareabeginvtAccion := 'nuevo';application.createform(tformGAccion, formGAccion);formGAccion.ShowModal;end;if tag = vtNumTecnico then //TécnicobeginvtAccion := 'nuevo';{ DONE : Falta el formulario FormGTecnico }application.createform(tformGTecnico, formGTecnico);formGTecnico.ShowModal;end;if tag = vtNumContacto then //ContactobeginvtAccion := 'nuevo';application.createform(tformGContacto, formGContacto);formGContacto.ShowModal;end;if tag = vtNumRecurso then //RecursobeginvtAccion := 'nuevo';application.createform(tformGRecurso, formGRecurso);formGRecurso.ShowModal;end;ActRefrescarExecute(nil);end;procedure TformSeleccion.ActRefrescarExecute(Sender: TObject);begintxtBuscar.EditMask := '';md.TCSeleccion.close;md.TCSeleccion.sql.clear;case tag ofvtNumProveedor : //proveedorbeginCaption := 'Selección de proveedor...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero + <br> ' WHERE tipo = "Proveedor" or tipo = "Otro"');op1.visible := true;op2.visible := true;op3.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';op3.Caption := 'Cif/Nif';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;if Op3.Checked then //codigobeginlb.Caption := '&Buscar por Cif/Nif';md.TCSeleccion.sql.add('Order by cif');end;end;vtNumCliente : //clientebeginCaption := 'Selección de cliente...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero + <br> ' WHERE tipo = "Cliente" or tipo = "Otro"');op1.visible := true;op2.visible := true;op3.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';op3.Caption := 'Cif/Nif';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;if Op3.Checked then //codigobeginlb.Caption := '&Buscar por Cif/Nif';md.TCSeleccion.sql.add('Order by cif');end;end;vtNumTercero : //tercerobeginCaption := 'Selección de tercero...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero);op1.visible := true;op2.visible := true;op3.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';op3.Caption := 'Cif/Nif';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;if Op3.Checked then //codigobeginlb.Caption := '&Buscar por Cif/Nif';md.TCSeleccion.sql.add('Order by cif');end;end;vtNumArticulo : //artículobeginCaption := 'Selección de artículo...';md.TCSeleccion.sql.add('SELECT a.Codigo, a.Nombre, ' +<br> 'f.Nombre Familia, m.Nombre Marca, ' +'md.Nombre Modelo, a.precioventa');md.TCSeleccion.sql.add('FROM ' + <br> vtTablaArticulo + ' a, ' + vtTablaFamilia + ' f, ' + <br> vtTablaMarca + ' m, ' + vtTablaModelo + ' md');md.TCSeleccion.sql.add('WHERE a.codigofamilia=f.codigo ' +<br> 'AND a.codigomarca=m.codigo AND a.codigomodelo=md.codigo');op1.visible := true;op2.visible := true;op3.visible := true;op4.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';op3.Caption := 'Familia';op4.Caption := 'Marca';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by a.nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by a.codigo');end;if Op3.Checked then //familiabeginmd.TCSeleccion.sql.add('Order by f.nombre');lb.Caption := '&Buscar por Familia';end;if Op4.Checked then //marcabeginmd.TCSeleccion.sql.add('Order by m.nombre');lb.Caption := '&Buscar por marca';end;end;vtNumParte : //Partes de trabajobeginCaption := 'Selección de parte de trabajo...';md.TCSeleccion.sql.add('SELECT p.codigo, p.numero, ' +' p.fecha, p.totalhoras, t.Nombre Tecnico1, t2.Nombre Tecnico2');md.TCSeleccion.sql.add('FROM ' + vtTablaParte + ' p, ' <br> + vtTablaTecnico + ' t, ' + vtTablaTecnico + ' t2');md.TCSeleccion.sql.add('WHERE p.tecnico1 = ' +<br> 't.codigo and p.tecnico2 = t2.codigo');md.TCSeleccion.sql.add('and p.codigocliente = ' +<br> ' :pCodigoCliente and p.facturado <> :pFacturado');md.TCSeleccion.ParamByName('pFacturado').DataType := ftString;md.TCSeleccion.ParamByName('pFacturado').Value := 'S';md.TCSeleccion.ParamByName('pCodigoCliente').DataType := ftInteger;md.TCSeleccion.ParamByName('pCodigoCliente').Value := vtCodigoSel;op1.visible := true;op2.visible := true;op3.visible := true;op4.visible := true;op1.caption := '&Número';op2.caption := 'Códig&o';op3.Caption := 'Técnico 1';op4.Caption := 'Fecha';if Op1.Checked then //numerobeginmd.TCSeleccion.sql.add('Order by numero');lb.Caption := '&Buscar por número';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;if Op3.Checked then //tecnico1beginmd.TCSeleccion.sql.add('Order by t.Nombre');lb.Caption := '&Buscar por Técnico 1';end;if Op4.Checked then //fechabeginmd.TCSeleccion.sql.add('Order by fecha');lb.Caption := '&Buscar por fecha';txtBuscar.EditMask := '!99/99/0000;1;_';end;end;vtNumFamilia : //Familia - materialbeginCaption := 'Selección de Familia...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaFamilia);op1.visible := true;op2.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;vtNumModelo : //Modelo - materialbeginCaption := 'Selección de Modelo...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaModelo);op1.visible := true;op2.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;vtNumMarca : //Marca - materialbeginCaption := 'Selección de Marca...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaMarca);op1.visible := true;op2.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;vtNumTecnico : //TécnicobeginCaption := 'Selección de Técnico...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaTecnico);op1.visible := true;op2.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;vtNumAccion : //AcciónbeginCaption := 'Selección de Acción...';md.TCSeleccion.sql.add('SELECT codigo, nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaAccion);op1.visible := true;op2.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;vtNumContacto : //ContactobeginCaption := 'Selección de Contacto...';md.TCSeleccion.sql.add('SELECT codigo, nombre, ' + <br> 'movilempresa1, emailempresa1');md.TCSeleccion.sql.add('FROM ' + vtTablaContacto);op1.visible := true;op2.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;vtNumRecurso : //RecursobeginCaption := 'Selección de Recurso...';md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaRecurso);op1.visible := true;op2.visible := true;op1.caption := '&Nombre';op2.caption := 'Códig&o';if Op1.Checked then //nombrebeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por nombre';end;if Op2.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;vtNumIncidencia : //incidenciasbeginCaption := 'Búsqueda de incidencia...';md.TCSeleccion.sql.add('SELECT i.codigo, i.fecha, i.asunto, '<br> 't.nombre Cliente, tn.nombre Tecnico');md.TCSeleccion.sql.add('FROM ' + vtTablaIncidencia + ' i,');md.TCSeleccion.sql.add( vtTablaTercero + ' t, ' + <br> vtTablaTecnico + ' tn');md.TCSeleccion.sql.add('WHERE i.codigocliente = ' +<br> 't.codigo and i.codigotecnico = tn.codigo');op1.visible := true;op2.visible := true;op3.visible := true;op4.visible := true;op1.caption := '&Incidencia';op2.caption := '&Resolución';op3.Caption := 'Contacto';op4.Caption := 'Asunto';if Op1.Checked then //descripciónbeginmd.TCSeleccion.sql.add('Order by i.incidencia');lb.Caption := '&Buscar por Incidencia';end;if Op2.Checked then //resoluciónbeginmd.TCSeleccion.sql.add('Order by i.incidenciaresolucion');lb.Caption := '&Buscar por Resolución';end;if Op3.Checked then //contactobeginmd.TCSeleccion.sql.add('Order by i.contacto');lb.Caption := '&Buscar por Contacto';end;if Op4.Checked then //asuntobeginmd.TCSeleccion.sql.add('Order by i.asunto');lb.Caption := '&Buscar por Asunto';end;end;vtNumNota : //notabeginCaption := 'Selección de Nota...';md.TCSeleccion.sql.add('SELECT codigo, asunto, fechaalta');md.TCSeleccion.sql.add('FROM ' + vtTablaNota);op1.visible := true;op2.visible := true;op3.visible := true;op1.caption := '&Contenido';op2.caption := '&Asunto';op3.caption := 'Códig&o';if Op1.Checked then //contenidobeginmd.TCSeleccion.sql.add('Order by nombre');lb.Caption := '&Buscar por contenido';end;if Op2.Checked then //asuntobeginmd.TCSeleccion.sql.add('Order by asunto');lb.Caption := '&Buscar por asunto';end;if Op3.Checked then //codigobeginlb.Caption := '&Buscar por Código';md.TCSeleccion.sql.add('Order by codigo');end;end;end;trymd.TCSeleccion.open;exceptraise;end;arreglarCampos ();txtbuscar.setfocus;end;procedure TformSeleccion.ActSeleccionarExecute(Sender: TObject);beginseleccionar();end;procedure TformSeleccion.actMostrarTodosExecute(Sender: TObject);begintag := 50;ActRefrescarExecute(nil);end;procedure TformSeleccion.Timer1Timer(Sender: TObject);beginTimer1.Enabled := False;if (tag in [vtNumproveedor]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero);md.TCSeleccion.sql.add('WHERE (tipo = "Proveedor" ' +<br> 'or tipo = "Otro") and nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := '%' + <br> TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', <br> txtbuscar.text, [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumCliente]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero);md.TCSeleccion.sql.add('WHERE (tipo = "Cliente" or ' +<br> tipo = "Otro") and nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := '%' + <br> TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumTercero]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre, cif');md.TCSeleccion.sql.add('FROM ' + vtTablaTercero);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := '%' + <br> TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumArticulo]) thenbeginif Op1.Checked or op3.checked or <br> op4.checked then //Nombre, familia, marcabegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT a.Codigo, a.Nombre, ' +'f.Nombre Familia, m.Nombre Marca, ' +<br> 'md.Nombre Modelo, a.precioventa');md.TCSeleccion.sql.add('FROM ' + vtTablaArticulo + ' a, ' <br> + vtTablaFamilia + ' f, ' + vtTablaMarca + ' m, ' <br> + vtTablaModelo + ' md');md.TCSeleccion.sql.add('WHERE a.codigofamilia=f.codigo ' + <br> ' AND a.codigomarca=m.codigo AND a.codigomodelo=md.codigo');if Op1.Checked thenmd.TCSeleccion.sql.add('and a.nombre like :pValor');if Op3.Checked thenmd.TCSeleccion.sql.add('and f.nombre like :pValor');if Op4.Checked thenmd.TCSeleccion.sql.add('and m.nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := '%' + <br> TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumParte]) thenbeginif Op1.Checked or op3.checked or<br> op4.Checked then //número, técnico, fechabegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT p.codigo, p.numero, ' +'p.fecha, p.totalhoras, t.Nombre Tecnico1, ' +'t2.Nombre Tecnico2');md.TCSeleccion.sql.add('FROM ' + vtTablaParte + <br> ' p, ' + vtTablaTecnico + ' t, ' + <br> vtTablaTecnico + ' t2');md.TCSeleccion.sql.add('WHERE p.tecnico1 = t.codigo ' +<br> 'and p.tecnico2 = t2.codigo');md.TCSeleccion.sql.add('and p.codigocliente = ' +':pCodigoCliente and p.facturado <> :pFacturado');if Op1.Checked thenmd.TCSeleccion.sql.add('and p.numero like :pValor');if Op3.Checked thenmd.TCSeleccion.sql.add('and t.nombre like :pValor');if Op4.Checked thenmd.TCSeleccion.sql.add('and p.fecha = ' +'STR_TO_DATE(:pValor, "%d/%c/%Y %H:%i:%s")');md.TCSeleccion.ParamByName('pFacturado').DataType := ftString;md.TCSeleccion.ParamByName('pFacturado').Value := 'S';md.TCSeleccion.ParamByName('pCodigoCliente').DataType := ftInteger;md.TCSeleccion.ParamByName('pCodigoCliente').Value := vtCodigoSel;if Op4.Checked thenbeginmd.TCSeleccion.ParamByName('pValor').DataType := ftString;if Length (TxtBuscar.Text) = 10 thenmd.TCSeleccion.ParamByName('pValor').AsString := TxtBuscar.Text;endelsebeginmd.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';end;md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumFamilia]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaFamilia);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumAccion]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaAccion);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumMarca]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaMarca);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumModelo]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaModelo);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumTecnico]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaTecnico);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString :=<br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumRecurso]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT Codigo, Nombre');md.TCSeleccion.sql.add('FROM ' + vtTablaRecurso);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumContacto]) thenbeginif Op1.Checked then //Nombrebegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT codigo, nombre, ' + <br> 'movilempresa1, emailempresa1');md.TCSeleccion.sql.add('FROM ' + vtTablaContacto);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text, <br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;if (tag in [vtNumIncidencia]) thenbeginif Op1.Checked then //incidenciabegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT i.codigo, i.fecha, ' +'i.asunto, t.nombre Cliente, tn.nombre Tecnico');md.TCSeleccion.sql.add('FROM ' + <br> vtTablaIncidencia + ' i,');md.TCSeleccion.sql.add( vtTablaTercero + ' t, ' <br> + vtTablaTecnico + ' tn');md.TCSeleccion.sql.add('WHERE i.codigocliente = ' + <br> 't.codigo and i.codigotecnico = tn.codigo');md.TCSeleccion.sql.add('and i.incidencia like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //resoluciónbegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT i.codigo, i.fecha, ' +<br> 'i.asunto, t.nombre Cliente, tn.nombre Tecnico');md.TCSeleccion.sql.add('FROM ' + <br> vtTablaIncidencia + ' i,');md.TCSeleccion.sql.add( vtTablaTercero + ' t, <br> ' + vtTablaTecnico + ' tn');md.TCSeleccion.sql.add('WHERE i.codigocliente = ' +'t.codigo and i.codigotecnico = tn.codigo');md.TCSeleccion.sql.add('and i.incidenciaresolucion like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op3.Checked then //contactobegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT i.codigo, i.fecha, ' + <br> 'i.asunto, t.nombre Cliente, tn.nombre Tecnico');md.TCSeleccion.sql.add('FROM ' + <br> vtTablaIncidencia + ' i,');md.TCSeleccion.sql.add( vtTablaTercero + ' t, ' + <br> vtTablaTecnico + ' tn');md.TCSeleccion.sql.add('WHERE i.codigocliente = ' + <br> 't.codigo and i.codigotecnico = tn.codigo');md.TCSeleccion.sql.add('and i.contacto like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op4.Checked then //asuntobegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT i.codigo, i.fecha, ' +<br> 'i.asunto, t.nombre Cliente, tn.nombre Tecnico');md.TCSeleccion.sql.add('FROM ' + <br> vtTablaIncidencia + ' i,');md.TCSeleccion.sql.add( vtTablaTercero + ' t, ' +<br> vtTablaTecnico + ' tn');md.TCSeleccion.sql.add('WHERE i.codigocliente =' +<br> ' t.codigo and i.codigotecnico = tn.codigo');md.TCSeleccion.sql.add('and i.asunto like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;end;if (tag in [vtNumNota]) thenbeginif Op1.Checked then //contenidobegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT codigo, asunto, fechaalta');md.TCSeleccion.sql.add('FROM ' + vtTablaNota);md.TCSeleccion.sql.add('WHERE nombre like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op2.Checked then //asuntobegintrymd.tcSeleccion.Close;md.TCSeleccion.SQL.Clear;md.TCSeleccion.sql.add('SELECT codigo, asunto, fechaalta');md.TCSeleccion.sql.add('FROM ' + vtTablaNota);md.TCSeleccion.sql.add('WHERE asunto like :pValor');md.TCSeleccion.ParamByName('pValor').DataType := ftString;md.TCSeleccion.ParamByName('pValor').AsString := <br> '%' + TxtBuscar.Text + '%';md.TCSeleccion.Open;except//silenciosaend;end;if Op3.Checked then //codigobegintrymd.tcSeleccion.Locate ('Codigo', txtbuscar.text,<br> [loCaseInsensitive, loPartialKey]);except//silenciosaend;end;end;arreglarCampos;end;end.
Para realizar este artículo hemos utilizado:
- MySQL Server 4.1.
- Borland Delphi 6.
Créditos:
- Diseño de la ventana y código por AjpdSoft.
- Algoritmo de búsqueda automático (mediante temporizador y LIKE) por Antonio RN de RS.