Transformar em função

Delphi

22/06/2005

Galera, Boa tarde...

gostaria de criar uma função com base neste código pois uso muitas vezes e é sempre necessario colocar uma TQuery (BDE) para me ajudar com isto...

Poderiam me ajudar?!


Código do evento onExit do Edit
if edtProcCodPrd.Tag = 0 then Exit;
edtProcCodPrd.Text := LeftZero(edtProcCodPrd.Text, 4);
qryAuxProduto.ParamByName(´CdPrd´).Value := edtProcCodPrd.Text;
qryAuxProduto.Close;
qryAuxProduto.Open;
if qryAuxProduto.IsEmpty then
Begin
btnProcCdPrd.Click;
edtProcCodPrd.SetFocus;
Exit;
end;
edtProcCodPrd.Text := qryAuxProdutoCdPrd.Value;
lblDescricaoProd.Caption := qryAuxProdutoDescCdPrd.Value;
edtProcCodPrd.Tag := 0;


SQL DA Query
Select CdPrd, DescCdPrd, Unid
From Tb_Produtos
Where CdPrd = :CdPrd


Abraços e espero REspotas...


Tremonti

Tremonti

Curtidas 0

Respostas

Sandra

Sandra

22/06/2005

Olá Tremonti. :D

Não analisei linha a linha do código, porém, se for da maneira que entendi sua dificuldade, o correto seria transformar esse código em [b:3df65d5d67]procedure[/b:3df65d5d67] pois não retorna nenhum valor (a function sim, deverá retornar).

Uma idéia (ou sugestão). Na seção [b:3df65d5d67]type[/b:3df65d5d67], public (ou private, dependendo da sua necessidade):
procedure FazAlgo;

Ctrl+Shift+C e ficará assim:

procedure TForm1.FazAlgo;
begin
  if edtProcCodPrd.Tag = 0 then
    Exit;
  edtProcCodPrd.Text := LeftZero(edtProcCodPrd.Text, 4);
  qryAuxProduto.ParamByName(´CdPrd´).Value := edtProcCodPrd.Text;
  qryAuxProduto.Close;
  qryAuxProduto.Open;
  if qryAuxProduto.IsEmpty then
  Begin
    btnProcCdPrd.Click;
    edtProcCodPrd.SetFocus;
    Exit;
  end;
  edtProcCodPrd.Text := qryAuxProdutoCdPrd.Value;
  lblDescricaoProd.Caption := qryAuxProdutoDescCdPrd.Value;
  edtProcCodPrd.Tag := 0;

Só não entendi porque está fechando e abrindo a qryAuxProd (como eu disse anteriormente, não analisei seu código).
Sempre que precisar, nas demais procedures, basta colocar a linha:

procedure tal;
begin
  faz alguma coisa; // seus códigos
  FazAlgo;
  faz algo mais;    // mais códigos
end;


É isso que está está precisando?


No antigo portal ClubeDelphi, tinha um artigo explicando cada um. Não achei no atual, por isso estou colando para esclarecer eventuais dúvidas.

[size=12:3df65d5d67]Procedimentos e Funções no Delphi Conceito: procedimentos e funções são rotinas que subdividem um sistema. Elas fazem parte do código do programa e são conhecidas como subrotinas, fazendo uma analogia ao código completo do sistema. Objetivo: a função dessas subrotinas é facilitar a manutenção do sistema e a reutilização destes códigos, possibilitando assim, maior compatibilidade com códigos de outros projetos. Semelhanças: O escopo dos procedimentos e das funções são muito parecidos. Ambos podem receber parâmetros de entrada e o desenvolvimento de cada um segue a mesma lógica. Podem também, possuir variáveis locais para tratarem estes parâmetros. Para realizar chamadas a procedimentos ou funções no Delphi, é necessário declará-los anteriormente ao local de sua utilização. Diferenças: A principal diferença de um procedimento para uma função, é que esta sempre irá retornar um valor, o que não acontece nos procedimentos, eles apenas executam sua rotina. No Delphi, temos um aliado para distingüí-los: os procedimentos são iniciados com a palavra procedure e as funções com o vocábulo function, que significam procedimento e função respectivamente, na língua inglesa. Procedimentos: são usados para subdividir um programa em pequenos blocos de código que serão chamados diversas vezes durante o desenvolvimento. Como foi dito anteriormente, o procedimento é iniciado com a palavra procedure, em seguida vem nome dado a este procedimento. Sintaxe de Procedimento em Object Pascal (linguagem padrão do Delphi):[/size:3df65d5d67]
Procedure Nome_do_procedimento (parâmetro_a: tipo_a, ... , parâmetro_z: tipo_z)
var
  {declaração das variáveis locais}
begin
  {corpo do procedimento} 
end;
As palavras procedure, var, begin e end, são palavras reservadas desta linguagem, portanto não podem ser usadas para outro objetivo. A palavra var inicia a declaração das variáveis terminando com a palavra begin, onde começa o código propriamente dito. Este, é finalizado com a palavra end, onde é concluído também o procedimento em questão. O Delphi possui alguns procedimentos nativos. Por exemplo:
Procedure ShowMessage (const Msg: string);
Esta é a declaração da procedure ShowMessage, que recebe como parâmetro uma constante Msg do tipo string. Veja agora como ficaria sua utilização:
ShowMessage (´Exemplo de Procedimento´);
Este procedimento mostra como padrão uma caixa de diálogo com a mensagem especificada pelo programador e um botão de confirmação, além de trazer em sua barra de títulos o nome do aplicativo. Repare que a frase ´Exemplo de Procedimento´ encontra-se entre ´plics´, que é padrão nos procedimentos. Esta frase é a mensagem que aparecerá para o usuário. Funções: obedecendo o mesmo conceito dos procedimentos no que se refere a estrutura, as funções apresentam-se com uma característica especial, a de retornar um valor. Este é o resultado da execução desta função e pode ser atribuído a uma variável local. Sintaxe de Função em Object Pascal:
Function nome_da_função(parâmetro_a: tipo_a , ... , parâmetro_n: tipo_n): 
  tipo_de_retorno;
var
  {declaração das variáveis locais}
begin
  {corpo da função}
  result := valor_de_retorno;
end;
A estrutura anterior lembra um procedimento, porém difere com a declaração do tipo de retorno em seu cabeçalho e com a variável de retorno ´result´ ao final da função. Exemplo de Função:
Function FormataCPF(CPF : string): string;
begin
  Result := Copy(CPF,1,3)+´.´+Copy(CPF,4,3)+´.´+Copy(CPF,7,3)+´-´+Copy(CPF,10,2); 
end; 
O Delphi possui muitas funções nativas. O exemplo anterior, apesar de não ser nativo, exemplifica com perfeição a estrutura apresentada anteriormente. Veja ao final do cabeçalho que esta função deve retornar um valor do tipo ´string´.



GOSTEI 0
Tremonti

Tremonti

22/06/2005

Function Achar(prCod, prDesc, prParam , prTabela : String ; prTipo : integer) : String;
var
QQ : TQuery;
begin
//if ((Prtipo <> 2) and (Prtipo <> 1)) Then Exit;

QQ := TQuery.Create(Application);
QQ.DatabaseName := ´MonSys´;
QQ.SessionName := ´MainSession´;
QQ.Close;
QQ.SQL.Clear;

if prTipo = 1 Then
Begin
QQ.SQL.Add(´Select ´ + prCod );
QQ.SQL.Add(´From ´ + prTabela);
QQ.SQL.Add(´Where ´ + prCod + ´= :Param´);
QQ.ParamByName(´Param´).Value := prParam;
QQ.Open;
Result := QQ.FieldByName(prCod).AsString;
End
Else
if prTipo = 2 Then
Begin
QQ.SQL.Add(´Select ´ + prDesc );
QQ.SQL.Add(´From ´ + prTabela);
QQ.SQL.Add(´Where ´ + prCod + ´ = :Param´);
QQ.ParamByName(´Param´).Value := prParam;
QQ.Open;
Result := QQ.FieldByName(prDesc).AsString;
End;
QQ.Free;
End;

Usando...
edtCdPrd.Text := Achar(´CdPrd´, ´´, edtCdPrd.Text , ´Tb_Produtos´,1 );


GOSTEI 0
POSTAR