 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
abagattini Mestre

Registrado: Terça-Feira, 29 de Novembro de 2005 Mensagens: 758 Localização: Porto Alegre/RS
|
Enviada: Sáb Out 08, 2016 8:44 am Assunto: Não sei se é aqui que posto ou mesmo se posso postar |
|
|
Não sei se é aqui que posto ou mesmo se posso postar.
Uma função que uso muito em meus sistemas.
Código: |
function GetValor(Tabela,CampoProcurar,OQueProcurar,CampoRetornar:STring):String;
var sds:TSimpleDataset;
begin
sds:=TSimpleDataSet.Create(Self);
TRY
sds.Connection:=dm.SQLConnection1;
sds.Close;
sds.DataSet.CommandText:='SELECT '+CampoRetornar+' FROM '+Tabela+' WHERE ('+CampoProcurar+'='+QuotedStr(OQueProcurar)+')';
sds.Open;
Result:=sds.Fields[0].AsString;
FINALLY
sds.Close;
sds.Free;
END;
end;
|
Como usar...
Código: |
NomeCliente:=GetValor('CLIENTES','ID_CLIENTE',10,'RAZAO_SOCIAL'); |
|
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sáb Out 08, 2016 9:37 am Assunto: |
|
|
Amigo utilize parametrização na sua função e quando for referente a número você pode fazer pelo datatype.
Eis uma função que é mais simples do que a que utilizo para buscar dados:
Código: | function cdsSearch(Cds: TClientDataSet; TypeSearch: TTypeLocalizar; wSearch:
AnsiString; Index: Byte; KindSearch: TKindSearch): Integer;
begin
Cds.Close;
case TypeSearch of
fsInteger: Cds.Params[Index].AsInteger := StrToInt(wSearch);
fsAnsiString: begin
//KindSearch := TKindSearch(4);
Case KindSearch of
fromBegin: cds.Params[Index].AsAnsiString := AnsiUpperCase(wSearch + '%');
fromAnywhere: cds.Params[Index].AsAnsiString := AnsiUpperCase('%' + wSearch + '%');
fromEnd: cds.Params[Index].AsAnsiString := AnsiUpperCase('%' + wSearch);
end;
end;
end;
Cds.Open;
Result := Cds.RecordCount;
if Result = 0 then
Application.MessageBox('Nenhum registro similar encontrado.',
'AVISO DO SISTEMA - Pesquisa', MB_ICONINFORMATION+MB_OK);
end;
type
TTypeLocalizar = (fsInteger, fsAnsiString);
// Não uttilizo, mas o proncípio é o mesmo
procedure FilterCDS(aCds: TClientDataSet; aType: TTypeLocalizar; aBusca: AnsiString);
begin
aCds.Close;
case aType of
fsInteger: aCds.Params[0].AsInteger := StrToInt(String(aBusca));
fsAnsiString: aCds.Params[0].AsString := AnsiUpperCase('%' + String(aBusca) + '%');
end;
aCds.Open;
end; |
Não utilizo nenhuma das duas supracitadas, foi só para exemplificar, no caso eu utilizo uma que descobre sozinho o tipo de dados utilizando datatype e rtti para algumas coisas, sendo um pouco maior do que esta, mas o princípio é o mesmo.
Nestas funções tem de haver uma função que monta o sql. Mas o benefício é que não importa a quantidade de campos a serem procurados, utilizo a mesma função interdependente da quantidade de campos.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|