Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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?
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;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(); 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(); 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;Aí são 2 casos, você tem que declarar seus procedimentos antes de chamá-los.
procedure pf_Insert();
begin
...
end;
procedure pf_Atualiza();end;
procedure TfrmCadProd.SpeedButton2Click(Sender: TObject);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);end;
procedure TfrmCadProd.pf_Insert();end;
procedure TfrmCadProd.pf_Atualiza();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.
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.
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 ?
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;Valeu, já consegui. O problema era que eu nao tinha fechado o ) no fim da string
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;