¿Cómo puedo realizar una búsqueda en una tabla de la base de datos con Delphi?

Otra vez yo molestándote la vida,
mira que necesito buscar un registro en una tabla, por ejemplo en la de clientes, pero no se como buscar por el nombre del cliente, utilizo el siguiente código, que lo he armado como creo que se debe realizar la búsqueda en delphi pero me genera una excepción. Este es mi código, si hay que corregir algo te pido que me colabores en eso o un método mejor para buscar pero que sea 100% seguro:
var
s:string;
begin
s:=InputBox('¡ C o n s u l t a r !','Registro a buscar:','');
if s <> '' then
begin
TBClientes.First;
if not TBClientes.Locate('CLIENTE',s,[]) then
MessageDlg('Nombre no lacalizado',mtError, [mbOk],0)
else
begin
TBClientes.SetKey;
TBClientes['CLIENTE'] := s;
TBClientes.GotoNearest;
end;
end;
Donde tbclientes es la tabla y CLIENTE es el campo en la tabla donde se guarda el nombre del cliente valga la redundancia.
Muchísimas gracias espero que me puedas ayudar lo más pronto posible si no hay ninguna molestia.

1 Respuesta

Respuesta
1
El locate ya te sitúa en el registro, si lo ha encontrado, por lo tanto con el código siguiente bastaría.
var
s:string;
begin
s:=InputBox('¡ C o n s u l t a r !','Registro a buscar:','');
if s <> '' then
begin
TBClientes.First;
if not TBClientes.Locate('CLIENTE',s,[]) then
MessageDlg('Nombre no lacalizado',mtError, [mbOk],0);
end;
O si lo quieres hacer vía query sería:
Pones en una tquery:
select * from tbclientes where cliente =:cliente
En el código:
procedure GetCliente(cliente : integer; var ds : Tdataset);
begin
with query1 do begin
close;
parambyname('cliente').AsInteger := cliente;
open;
ds := query1;
end;
end;
//En un boton
procedure tform1.button1click(sender : tobject);
var
ds : Tdataset;
begin
GetCliente(edit2.text, ds);
//Obtenemos el dataset y se lo asignamos al datasource que apunta al dbgrid resultado.
datasource.dataset := ds;
end;
Supongo que el tipo TBDetVenIDARTICULO debe ser Double tambien. Si así lo fuera no vería más problemas con respecto al trozo de código que me has pasado, desconocido los tipos de la tabla y de los posibles tipos de los campos persistentes creados en el ttable.
Otra forma de hacer búsquedas, que te devuelva el resultado en un tdataset, podría ser la siguiente:
procedure TFormFactVta.PickPartNo(Sender: TObject);
var
ds : TDataset;
begin
if ItemsGrid.SelectedField = DataModule1.TBDetVenIDARTICULO then
begin
if DataModule1.TBDetVenIDARTICULO.Value <> 0 then
if FormSearch.ShowModalArticulos(DataModule1.TBDetVenIDARTICULO.Value, ds) = mrOk then
begin
//Seleccionamos el datasource correspondiente que apunte a la dbgrid.
datasource1.dataset := ds;
end;
end;
end;
En el tFormSearh (Form de búsqueda) incluimos un tquery con la propiedad tdatabase correspondiente y con la SQL "select * from tabla where campo = :pValorCampo" donde tabla y campo es el nombre de la tabla y el nombre del campo que nos interesan.
La función la definiremos en la parte superior de la forma
private
public
function ShowModalArticulos(valorbusqueda : double; var ds : TDataset): Integer;
end;
El código:
function TFormSearch.ShowModalArticulos(valorbusqueda : double; var ds : TDataset): Integer;
begin
Result := 0;
Try
with query1 do begin
if active then close;
Parambyname('pValorCampo').AsDouble := valorbusqueda;
Open;
ds := query1;
end
except
on e:exception do
begin
//Si queremos mostramos el error
Showmessage('Error en ShowModalArticulos: '+e.message);
//Retornamos código retorno erroneo
Result := -1;
end;
end;
end;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas