Fórum Recuperar valores dos Campos do Banco de Dados FB no Delphi #615910
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
Curtir tópico
+ 0Post 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
Gostei + 1
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;
Gostei + 0
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
Gostei + 1
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;
Gostei + 0
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.
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)