Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sacofrito

[Resolvido] Function em delphi

Recommended Posts

Boa tarde galera.

Em delphi, com faço para criar uma function e chamala em qualquer parte do meu codigo.

 

Estou querendo criar uma para inserir os dados e outra para atualizar.

Mas nao estou conseguindo achar o jeito certo.

 

Em vb eu faria assim

function insere()
 comandos
end function

function update()
 comandos
end function

e para chamar

update

Como faço isso em delphi?

 

Obrigado a quem puder ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em Delphi existem diferença entre a declaração de funções e procedimentos.

 

Sintaxe para um procedimento:

procedure procedimento([var: TipoEntrada]);
begin
  ...
end;

 

Sintaxe para uma função:

function funcao([var: TipoEntrada]): TipoSaida;
begin
 ...
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo. MAs por exemplo como faço para chamar uma função a qualquer momento?

 

Pode me dar um exemplo?

Oque estou querendo fazer é o neste raciocinio: ao abrir o form preencho um combobox com dados da tabela. E ao inserir um novo registro precisarei repopular este combo box com o select feito inicialmente mas sem que o usuario precise sair e voltar a tela de cadastro.

 

Exemplo:

 

procedure botaogravarclick(blabla)

 

begin

if editar = true then

comandos para editar ou funcao para editar

else

comandos para gravar ou funcao para gravar

 

// aqui chama a funçao para popular o combobox

 

end;

 

Neste caso eu nao entendi os parametros entre os parenteses das functions em delphi. Como em vb é opcional e em php tambem, nao entendi como funciona.

Tem como me dar um exemplo de como faço isso que estou querendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em Delphi também, mas para função, o tipo de retorno é obrigatório. Pela sua necessidade você parece precisar de um procedimento, neste caso, você vai chamar direto mesmo:

 

procedure preechecombobox;
begin
  ...
end;

procedure botaogravarclick(blabla)
begin
  ...
  preechecombobox;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah! Beleza, vou tentar aqui qualquer coisa posto novamente

 

Fiz do jeito que voce falou porem nao funcionou

procedure TfrmCadProd.SpeedButton2Click(Sender: TObject);
begin
 if (txtcodigo.Text <> '') then
    begin
     consulta.Close;
     consulta.SQL.Clear;
     consulta.SQL.Add ('select * from produtos where idproduto :=' + txtcodigo.Text);
     consulta.Open;
     if not consulta.Eof then
       begin
         pf_Atualiza;
       end
     else
       begin
         pf_Insert;

       end;
    end
 else
   begin
       begin
         pf_Insert;
       end;
   end;

   ShowMessage(msg);
end;

procedure pf_Insert();
begin
     insere.Close;
     insere.SQL.Clear;
     insere.SQL.add ('insert into produtos (descricao, vl_venda, codbarras, ativo) VALUES (' + QuotedStr(cmbDescricao.Text) + '');
     insere.sql.add (','+ txtValor.Text );
     if txtcodbarras.Text <> '' then
       begin
       insere.sql.add (',' + QuotedStr(txtCodBarras.Text) );
       end
     else
       begin
         insere.sql.add (',' +null);
       end;

     if optsim.Checked = true then
       begin
         insere.sql.add(', S)');
       end
     else
       begin
         insere.sql.add(', N)');
       end;
     insere.ExecSQL;
     msg := 'Dados inseridos com sucesso!';
end;

procedure pf_Atualiza();
begin
   atualiza.SQL.add('update produtos set descricao:='+ QuotedStr(cmbDescricao.Text)+',');
   if (txtValor.Text <> '') and (txtValor.Text <> '0') then
     begin
       atualiza.SQL.Add('vl_venda :=' +txtValor.Text+',');
     end
   else
     begin
       atualiza.SQL.Add('vl_venda:=' + txtValor.text +',');
     end;

   if (optSim.Checked = true) then
     begin
       atualiza.sql.Add('ativo := S');
     end
   else
     begin
       atualiza.sql.Add('ativo := N');
     end;

  if txtCodBarras.Text <> '' then
   begin
     atualiza.sql.Add('codbarras :=' + QuotedStr(txtCodBarras.Text) + '');
   end;
//          ShowMessage(atualiza.sql);
   atualiza.ExecSQL;
   msg := 'Dados atualizados com sucesso!';
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí são 2 casos, você tem que declarar seus procedimentos antes de chamá-los.

 

procedure pf_Insert();
begin
 ...
end;

procedure pf_Atualiza();
begin
 ...
end;

procedure TfrmCadProd.SpeedButton2Click(Sender: TObject);
begin
 ...
end;

 

Ou, se quiser evitar este incoveniente, você pode declarar:

 

type

 TfrmCadProd = class(TForm)
   ...
   procedure SpeedButton2Click(Sender: TObject);
   ...
   procedure pf_Insert();
   procedure pf_Atualiza();

...

procedure TfrmCadProd.SpeedButton2Click(Sender: TObject);
begin
 ...
end;

procedure TfrmCadProd.pf_Insert();
begin
 ...
end;

procedure TfrmCadProd.pf_Atualiza();
begin
 ...
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou.

Quando estou debugando ele nao passa nas linhas da procedure? Esta dando erro na sintaxe da minha sql mas nao consigo ver oque é pois nao debuga até dentro da procedure.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué, se você coloca o break point dentro da procedure, o Delphi deveria debugar.

Não lembro qual é a tecla de atalho, mas tente debugar o step-by-step com o F7.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui.

Oque esta errado aqui ?Pelo que entendi esta dando erro ao inserir o campo ativo.

insere.Close;

insere.SQL.Clear;

insere.SQL.add ('insert into produtos (descricao, vl_venda, codbarras, ativo) VALUES (' + QuotedStr(cmbDescricao.Text) + '');

insere.sql.add (','+ txtValor.Text );

if txtcodbarras.Text <> '' then

begin

insere.sql.add (',' + QuotedStr(txtCodBarras.Text) );

end

else

begin

insere.sql.add (',' + QuotedStr(''));

end;

 

if optsim.Checked = true then

begin

insere.sql.add(',' + QuotedStr('S'));

end

else

begin

insere.sql.add(',' + QuotedStr('N'));

end;

insere.ExecSQL;

 

 

Como insiro string na query ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugestão:

 

insere.Close;
insere.sql.Clear;
insere.sql.add('insert into produtos (descricao, vl_venda, codbarras, ativo) VALUES ('); 
insere.sql.add(QuotedStr(cmbDescricao.Text));
insere.sql.add(','+ QuotedStr(txtValor.Text));

if txtcodbarras.Text <> '' then
 insere.sql.add (',' + QuotedStr(txtCodBarras.Text) );
end;

if optsim.Checked then
 insere.sql.add(',' + QuotedStr('S'))
else
 insere.sql.add(',' + QuotedStr('N'));
end;

insere.sql.add(')');
insere.ExecSQL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.