Recuperar valores dos Campos do Banco de Dados FB no Delphi
07/06/2021
0
procedure TFrmPrincipal.rct_inserirprodClick(Sender: TObject); var inserirp,prodcodbarra: string; prodcodigo,numesa: integer; prodprecvend: double; begin if edt_inserirprod.Text <> '''''''' then begin inserirp := edt_inserirprod.Text; DM_Comanda.FDQueryInsProd.Close; DM_Comanda.FDQueryInsProd.SQL.Clear; DM_Comanda.FDQueryInsProd.SQL.Add(''''select * from PRODUTO where descricao like :cInserirp''''); DM_Comanda.FDQueryInsProd.ParamByName(''''cInserirp'''').AsString := inserirp; DM_Comanda.FDQueryInsProd.Open; prodcodigo := DM_Comanda.FDQueryInsProd.FieldByName(''''codigo'''').AsInteger; prodcodbarra := DM_Comanda.FDQueryInsProd.FieldByName(''''codbarra'''').AsString; prodprecvend := DM_Comanda.FDQueryInsProd.FieldByName(''''precovenda'''').AsFloat; numesa := lbl_numesa.Text.ToInteger; ShowMessage((prodcodigo).tostring); -------- Estou aqui tentando imprimir os valores dos campos do banco de dados da Query para ver se está tudo certo para eu poder esta gravando com um INSERT, mas não está puxando os valores, o que posso estar fazendo de errado ? qual a melhor maneira de fazer isso ? //DM_Comanda.FDQueryInsProd.Close; //DM_Comanda.FDQueryInsProd.SQL.Clear; //DM_Comanda.FDQueryInsProd.SQL.Add(''''insert into MESACARTAO (mesa,produto,codbarra,preco) values (numesa,prodcodigo,prodcodbarra,prodprecvend)''''); //DM_Comanda.FDQueryInsProd.Open; end;
Helton Faria
Post mais votado
07/06/2021
procedure TFrmPrincipal.rct_inserirprodClick(Sender: TObject); var inserirp, prodcodbarra: string; prodcodigo, numesa: integer; prodprecvend: double; begin // edt_inserirprod.Text contém o curinga pra usar com like? inserirp := edt_inserirprod.Text; if inserirp > '' then begin // se edt_inserirprod.Text não contém o curinga, precisa inserir // caso não contenha o % (percentual) o like funciona como = (igual) // outra coisa: por padrão o Firebird é case sensitive. // nesse caso só vai encontrar o registro se o conteúdo pesquisado for idêntico ao conteúdo gravado. // para evitar problemas na busca sugiro sempre transforma tudo em maiúsculas no momento da pesquisa inserirp := AnsiUpperCase(inserirp) + '%'; DM_Comanda.FDQueryInsProd.Close; DM_Comanda.FDQueryInsProd.SQL.Text := 'select * from PRODUTO where upper(descricao) like '+QuotedStr(inserirp); // transforma descricao em maiúsculas e pesquisa por um conteúdo também em maiúsculas DM_Comanda.FDQueryInsProd.Open; if DM_Comanda.FDQueryInsProd.Eof then begin ShowMessage('Nenhum registro encontrado!'); exit; // sai da procedure end; prodcodigo := DM_Comanda.FDQueryInsProd.FieldByName('codigo').AsInteger; prodcodbarra := DM_Comanda.FDQueryInsProd.FieldByName('codbarra').AsString; prodprecvend := DM_Comanda.FDQueryInsProd.FieldByName('precovenda').AsFloat; numesa := lbl_numesa.Text.ToInteger; ShowMessage(prodcodigo.tostring); //DM_Comanda.FDQueryInsProd.Close; //DM_Comanda.FDQueryInsProd.SQL.Clear; //DM_Comanda.FDQueryInsProd.SQL.Add(''''insert into MESACARTAO (mesa,produto,codbarra,preco) values (numesa,prodcodigo,prodcodbarra,prodprecvend)''''); //DM_Comanda.FDQueryInsProd.Open; end;
Emerson Nascimento
Mais Posts
09/06/2021
Helton Faria
procedure TFrmPrincipal.rct_inserirprodClick(Sender: TObject); var inserirp, prodcodbarra: string; prodcodigo, numesa: integer; prodprecvend: double; begin // edt_inserirprod.Text contém o curinga pra usar com like? inserirp := edt_inserirprod.Text; if inserirp > '' then begin // se edt_inserirprod.Text não contém o curinga, precisa inserir // caso não contenha o % (percentual) o like funciona como = (igual) // outra coisa: por padrão o Firebird é case sensitive. // nesse caso só vai encontrar o registro se o conteúdo pesquisado for idêntico ao conteúdo gravado. // para evitar problemas na busca sugiro sempre transforma tudo em maiúsculas no momento da pesquisa inserirp := AnsiUpperCase(inserirp) + '%'; DM_Comanda.FDQueryInsProd.Close; DM_Comanda.FDQueryInsProd.SQL.Text := 'select * from PRODUTO where upper(descricao) like '+QuotedStr(inserirp); // transforma descricao em maiúsculas e pesquisa por um conteúdo também em maiúsculas DM_Comanda.FDQueryInsProd.Open; if DM_Comanda.FDQueryInsProd.Eof then begin ShowMessage('Nenhum registro encontrado!'); exit; // sai da procedure end; prodcodigo := DM_Comanda.FDQueryInsProd.FieldByName('codigo').AsInteger; prodcodbarra := DM_Comanda.FDQueryInsProd.FieldByName('codbarra').AsString; prodprecvend := DM_Comanda.FDQueryInsProd.FieldByName('precovenda').AsFloat; numesa := lbl_numesa.Text.ToInteger; ShowMessage(prodcodigo.tostring); //DM_Comanda.FDQueryInsProd.Close; //DM_Comanda.FDQueryInsProd.SQL.Clear; //DM_Comanda.FDQueryInsProd.SQL.Add(''''insert into MESACARTAO (mesa,produto,codbarra,preco) values (numesa,prodcodigo,prodcodbarra,prodprecvend)''''); //DM_Comanda.FDQueryInsProd.Open; end;
Estou estudando Delphi tem muitas coisas que não sei ainda pois eu trabalhava mais com php e lá ele faz as conversões automáticamente, eu tenho outra dúvida se poder me ajudar só preciso desta direção, preciso inserir as informações no Firebird através deste Inset Into e no FB os tipos dos campos estão como a baixo, eu preciso fazer alguma conversão para inserir os dados na tabela ?
codigo do tipo NUMERIC é o campo de chave primária eu preciso fazer algum loop para ele fazer a contagem ?
mesa do tipo NUMERIC;
produto do tipo NUMERIC;
codbarra do tipo NUMERIC;
quantidade do tipo DOUBLE PRECISION;
preco do tipo DOUBLE PRECISION;
operador do tipo NUMERIC;
empresa do tipo NUMERIC;
data está no formato 27.05.2021 08:17 tipo TIMESTAMP;
totalitem do tipo DOUBLE PRECISION;
nomepro do tipo VARCHAR;
09/06/2021
Emerson Nascimento
DM_Comanda.FDQueryInsProd.Close; DM_Comanda.FDQueryInsProd.SQL.Text := 'select codigo, codbarra, precovenda from PRODUTO where upper(descricao) like '+QuotedStr(inserirp); // transforma descricao em maiúsculas e pesquisa por um conteúdo também em maiúsculas DM_Comanda.FDQueryInsProd.Open;
no caso do insert:
prodcodigo := DM_Comanda.FDQueryInsProd.FieldByName('codigo').AsInteger; prodcodbarra := DM_Comanda.FDQueryInsProd.FieldByName('codbarra').AsString; prodprecvend := DM_Comanda.FDQueryInsProd.FieldByName('precovenda').AsFloat; numesa := lbl_numesa.Text.ToInteger; DM_Comanda.FDQueryInsProd.Close; DM_Comanda.FDQueryInsProd.SQL.text := 'insert into MESACARTAO (mesa,produto,codbarra,preco) values (:numesa,:prodcodigo,:prodcodbar,:prodpreco)'; DM_Comanda.FDQueryInsProd.ParamByName('numesa').AsInteger := numesa; DM_Comanda.FDQueryInsProd.ParamByName('prodcodigo').AsInteger := prodcodigo; DM_Comanda.FDQueryInsProd.ParamByName('prodcodbar').AsNumeric := prodcodbarra; // é numérico mesmo? DM_Comanda.FDQueryInsProd.ParamByName('prodpreco').AsFloat := prodprecvend; DM_Comanda.FDQueryInsProd.ExecSQL; // quando você tem um comando DDL ou DML você não abre (Open), você executa (ExecSQL) //Se a chave primária for autoincremental não precisa passar para o comando insert
09/06/2021
Helton Faria
DM_Comanda.FDQueryInsProd.Close; DM_Comanda.FDQueryInsProd.SQL.Text := 'select codigo, codbarra, precovenda from PRODUTO where upper(descricao) like '+QuotedStr(inserirp); // transforma descricao em maiúsculas e pesquisa por um conteúdo também em maiúsculas DM_Comanda.FDQueryInsProd.Open;
no caso do insert:
prodcodigo := DM_Comanda.FDQueryInsProd.FieldByName('codigo').AsInteger; prodcodbarra := DM_Comanda.FDQueryInsProd.FieldByName('codbarra').AsString; prodprecvend := DM_Comanda.FDQueryInsProd.FieldByName('precovenda').AsFloat; numesa := lbl_numesa.Text.ToInteger; DM_Comanda.FDQueryInsProd.Close; DM_Comanda.FDQueryInsProd.SQL.text := 'insert into MESACARTAO (mesa,produto,codbarra,preco) values (:numesa,:prodcodigo,:prodcodbar,:prodpreco)'; DM_Comanda.FDQueryInsProd.ParamByName('numesa').AsInteger := numesa; DM_Comanda.FDQueryInsProd.ParamByName('prodcodigo').AsInteger := prodcodigo; DM_Comanda.FDQueryInsProd.ParamByName('prodcodbar').AsNumeric := prodcodbarra; // é numérico mesmo? DM_Comanda.FDQueryInsProd.ParamByName('prodpreco').AsFloat := prodprecvend; DM_Comanda.FDQueryInsProd.ExecSQL; // quando você tem um comando DDL ou DML você não abre (Open), você executa (ExecSQL) //Se a chave primária for autoincremental não precisa passar para o comando insert
Obrigado por esclarecer minhas dúvidas, no IBEXPERT quando eu vou na aba FIELDS lá mostra que o tipo da coluna da tabela é do tipo NUMERIC, daria certo se eu colocasse a variável como Integer também ? ou tem que ser do tipo Numeric ? para fazer o INSERT INTO ? eu mexia com PhpMyAdmin e usava mais o INT mas o mercado de trabalho está exigindo;
09/06/2021
Emerson Nascimento
Daí veja qual comporta o conteúdo do campo.
Sempre vejo o campo do código de barras como string, porque 123456 é diferente de 0123456 e você não conseguirá guardar o conteúdo como 0123456 num campo numérico.
Clique aqui para fazer login e interagir na Comunidade :)