Fórum Impletemtação de função de procura única #48026
12/11/2004
0
Olá a todos,
Estou com um pequeno problema pra implementar uma função padrão pra procura em bancos de dados... estou usando o Fb 1.5 com dbExpress, pra essas consultas eu utilizo somente a SQLQuery criada em tempo de execução ligada ao SQLConnection.
Estou tentando usar esse cabeçalho pra função:
Sendo:
Tabela: Só pra no caso de erro eu dar a msg em qual tabela o BD deu erro.
SQLExec: string de sql a ser executada na procura.
Campos: Lista de campos para serem pesquizados, uso como parametro no FieldByName() pra nao trabalhar com a posição ordinal do campo na tabela.
Aqui o meu problema:
ResSet: Seria uma lista dos valores encontrados, mas essa variavel estaria declarana na função que chama a função Procura, seria passada como parâmetro e vazia, para ser preenchida pela função procura e retornada vazia ou com os resultados encontrados pela pesquiza,
isto é, tb só seria acessada no caso do retorno da função for True.
Não sei se esse é o melhor jeito de se fazer isso, gostaria de padronizar todas as consultas que retornam soh alguns campos pra conferencia ou somente pra verificar se tal id, cpf, codigo existe no banco...
Se alguem puder me ajudar, obrigao
Julio :)
Estou com um pequeno problema pra implementar uma função padrão pra procura em bancos de dados... estou usando o Fb 1.5 com dbExpress, pra essas consultas eu utilizo somente a SQLQuery criada em tempo de execução ligada ao SQLConnection.
Estou tentando usar esse cabeçalho pra função:
function Procura(Tabela, SQLExec: String; Campos, ResSet: TStringList): Boolean;
Sendo:
Tabela: Só pra no caso de erro eu dar a msg em qual tabela o BD deu erro.
SQLExec: string de sql a ser executada na procura.
Campos: Lista de campos para serem pesquizados, uso como parametro no FieldByName() pra nao trabalhar com a posição ordinal do campo na tabela.
Aqui o meu problema:
ResSet: Seria uma lista dos valores encontrados, mas essa variavel estaria declarana na função que chama a função Procura, seria passada como parâmetro e vazia, para ser preenchida pela função procura e retornada vazia ou com os resultados encontrados pela pesquiza,
isto é, tb só seria acessada no caso do retorno da função for True.
Não sei se esse é o melhor jeito de se fazer isso, gostaria de padronizar todas as consultas que retornam soh alguns campos pra conferencia ou somente pra verificar se tal id, cpf, codigo existe no banco...
Se alguem puder me ajudar, obrigao
Julio :)
Tuskinhu
Curtir tópico
+ 0
Responder
Posts
13/11/2004
Afarias
bom,
se TABELA é uma resposta da função, então devia ser declarada como VAR.
Não entendi como vc pretende retornar o resultado da consulta em um StringList.
T+
se TABELA é uma resposta da função, então devia ser declarada como VAR.
Não entendi como vc pretende retornar o resultado da consulta em um StringList.
T+
Responder
Gostei + 0
13/11/2004
Tuskinhu
bom,
se TABELA é uma resposta da função, então devia ser declarada como VAR.
Não entendi como vc pretende retornar o resultado da consulta em um StringList.
T+
Eu gostaria de que a função me retornasse 1 ou 2 resultados:
1 - Se um determinado registro existe na tabela
2 - Se existe e mais alguma informação
digamos: Uma tabela Pedidos e Itens
na parte do item a pessoa deve digitar um codigo de Item e o sistema deve verificar se ele existe ou não, e se caso existir, pode-se exibir o nome do item...
Eu em meu sistema tenho varias consultas deste tipo... eu queria era centralizar essas consultas em apenas uma função padrão, a Procura...
não sei se vc entendeu...
digamos a função retorna True ou False se existir, e se existir e eu ainda quero pegar algum dado eu pegaria pelo ResSet, a Tabela é apenas um parametro que eu passo pro caso de eu precisar apresentar um erro eu tenho a tabela ou qq info sobre onde ocorreu o erro.
Aqui vai o codigo:
1- Chamada da Função:
Res := TStringList.Create; Campo := TStringList.Create; Campo.Add(´NOVO_CODIGO´); if Procura( ´SP_GET_CODIGO_CLIENTE´, ´Select NOVO_CODIGO From SP_GET_CODIGO_CLIENTE´, Campo, Res) then Result := PoeZeros(StrToIntDef(Res[0], 0), 6);
2- Função:
function Procura(Tabela, SQLExec: String; Campos: TStringList; var ResSet: TStringList): Boolean; var Query: TSQLQuery; TmpItem: String; Conta: Integer; Lista: TStringList; begin Result := True; try Lista := TStringList.Create; Lista.Clear; Lista.Add(´´); if (Campos.Count > 0) and (Tabela = ´´) and (SQLExec = ´´) then begin Result := False; ShowMessage(´Erro na passagem dos parâmetros para a função.´); Exit; end; Query := TSQLQuery.Create(nil); Query.Close; if Tabela = ´CEP´ then Query.SQLConnection := BdCep.BdCep else Query.SQLConnection := BD.BD; Query.SQL.Clear; Query.SQL.Text := SQLExec; Query.Open; if not Query.IsEmpty() then begin Lista.Clear; while not Query.Eof do begin for Conta := 0 to Campos.Count - 1 do begin ResSet.Add(Query.FieldByName(Campos[Conta]).AsString); end; // For Query.Next; end; // while end else begin Result := False; Exit; end; // if except on E:Exception do begin ShowMessage(´Erro ao tentar recuperar registros da tabela: ´ + Tabela + 13 + 13 + ´SQL: ´ + SQLExec + 13 + 13 + ´Mensagem: ´ + E.Message); Result := False; end; end; // try Query.Close; Query.Free; Lista.Free; end; // Proc
eu acho que essa função ainda está ´feia´ acho que eu poderia melhorá-la
principalmente na chamada... gostaria de ter opinioes...
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)