Fórum Transformar em função #285752
22/06/2005
0
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...
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
Curtir tópico
+ 0
Responder
Posts
22/06/2005
Sandra
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):
Ctrl+Shift+C e ficará assim:
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:
É 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.
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]
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:
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:
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:
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:
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´.
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;
Procedure ShowMessage (const Msg: string);
ShowMessage (´Exemplo de Procedimento´);
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;
Function FormataCPF(CPF : string): string; begin Result := Copy(CPF,1,3)+´.´+Copy(CPF,4,3)+´.´+Copy(CPF,7,3)+´-´+Copy(CPF,10,2); end;
Responder
Gostei + 0
06/07/2005
Tremonti
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 );
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 );
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)