sacofrito 0 Denunciar post Postado Março 9, 2012 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
Prog 183 Denunciar post Postado Março 9, 2012 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
sacofrito 0 Denunciar post Postado Março 9, 2012 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
Prog 183 Denunciar post Postado Março 9, 2012 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
sacofrito 0 Denunciar post Postado Março 9, 2012 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
Prog 183 Denunciar post Postado Março 9, 2012 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
sacofrito 0 Denunciar post Postado Março 9, 2012 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
Prog 183 Denunciar post Postado Março 9, 2012 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
sacofrito 0 Denunciar post Postado Março 9, 2012 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
Prog 183 Denunciar post Postado Março 9, 2012 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
sacofrito 0 Denunciar post Postado Março 9, 2012 Valeu, já consegui. O problema era que eu nao tinha fechado o ) no fim da string Compartilhar este post Link para o post Compartilhar em outros sites