[DELPHI] Como fazer o Edit salvar em uma Query? E Operação de multiplicação de campos...

Delphi

Query

Firebird

CRUD - Delphi

24/01/2023

Bom dia a todos :

Estou treinando no Delphi e me deparei com uma coisa que não estou conseguindo resolver... normalmente é facil gravar um DBEdit em uma tabela firebird atraves de uma Query. Porem em um exercicio que estou fazendo, eu preciso salvar de um Edit comum...

Vamos lá:

Então eu tenho:
1- Conexão
2- QROrcamento (query de Orçamento)
3- DSOrcamento (Datasource de Orçamento)
4- QRRegistro (Query de Registro)
5- DSRegistro (Datasource de Registro)
6- QREstoque (Query de Estoque)
7- DSEstoque (Datasource de Estoque)

Eu gostaria de fazer uma tabela de Orçamento... onde na tela, puxaria as informações da tabela Registro (ID e Cliente [O cliente esta sendo usado um LookupCombobox])
e depois de selecionar o cliente, selecionaria o produto, puxado da tabela Estoque (ID do produto, descrição, valor unitario etc...); Ao mesmo tempo informar a quantidade na tela e adicionar a tabela Orçamento. Porem tudo isso tem que ser feito usando Edit's.

No botão de salvar eu coloquei assim:

procedure Tfrm_orcamento2.Button2Click(Sender: TObject);
begin
if QREstoque.RecordCount <> 0 then
begin
QROrcamento.Close;
QROrcamento.SQL.Clear;
QROrcamento.SQL.Add('select * from orcamento where produto');
QROrcamento.SQL.Add('= :pProduto');
QROrcamento.ParamByName('pProduto').AsString := edtPRODUTO.Text;
QROrcamento.SQL.Add('select * from orcamento where ID_Produto');
QROrcamento.SQL.Add('= : pIDProduto');
QROrcamento.ParamByName('pIDProduto').AsString := edtID_PRODUTO.Text;
QROrcamento.SQL.Add('select * from orcamento where quantidade');
QROrcamento.SQL.Add('= : pquantidade');
QROrcamento.ParamByName('pquantidade').AsString := edt_QUANTIDADE.Text;
QROrcamento.Post;

end
else
begin
ShowMessage('Favor inserir o porduto para o orçamento');
end;


Mas está retornando o seguinte:

QROrcamento: Parameter 'pIDProduto' not found.


Alguem tem alguma sugestão?
Rhuann Estrelas

Rhuann Estrelas

Curtidas 1

Melhor post

Lucas Santato

Lucas Santato

24/01/2023

Para fazer isso você precisa utilizar o Query.FieldByName('NOME_DO_CAMPO').TipoDoCampo := Valor.
O ParamByName serve apenas para os parâmetros da query, não para os campos.
Ficaria assim:
QROrcamento.FieldByName('pProduto').AsString := edtPRODUTO.Text;
GOSTEI 1

Mais Respostas

Rhuann Estrelas

Rhuann Estrelas

24/01/2023

Para fazer isso você precisa utilizar o Query.FieldByName('NOME_DO_CAMPO').TipoDoCampo := Valor.
O ParamByName serve apenas para os parâmetros da query, não para os campos.
Ficaria assim:
QROrcamento.FieldByName('pProduto').AsString := edtPRODUTO.Text;


Ei mano, obrigado pela responta.. mas em ambos os casos... seja com a Parambyname ou com a Fieldbyname, continua dando erro pra salvar.
Na "Parambyname" - [FireDAC][phys][FB] Dynamic SQL Error SQL Error Code =-104 Token unknown - line3, column1 select.
Na "Fieldbyname" - QROrcamento: Field 'produto' not found.

Só pra adiantar "Sim, eu coloquei na minha planilha Firedac todos os campos que eram Varchar como Win1252 (aceita acentuações)", e "Sim, existe o campo Produto na planilha Orçamento".

abaixo minha planilha Firedac



CREATE GENERATOR GEN_ORCAMENTO_ID;

CREATE TABLE ORCAMENTO (
ID INTEGER,
ID_CLIENTE CHAR(50) CHARACTER SET WIN1252,
VALOR_TOTAL VARCHAR(10) CHARACTER SET WIN1252,
ID_PRODUTO VARCHAR(15) CHARACTER SET WIN1252,
PRODUTO VARCHAR(50) CHARACTER SET WIN1252,
QUANTIDADE NUMERIC(15,2),
PRECO_UNITARIO NUMERIC(15,2),
DESCONTO NUMERIC(15,2),
TOTAL NUMERIC(15,2)
);


GOSTEI 1
Lucas Santato

Lucas Santato

24/01/2023


CREATE GENERATOR GEN_ORCAMENTO_ID;

CREATE TABLE ORCAMENTO (
ID INTEGER,
ID_CLIENTE CHAR(50) CHARACTER SET WIN1252,
VALOR_TOTAL VARCHAR(10) CHARACTER SET WIN1252,
ID_PRODUTO VARCHAR(15) CHARACTER SET WIN1252,
PRODUTO VARCHAR(50) CHARACTER SET WIN1252,
QUANTIDADE NUMERIC(15,2),
PRECO_UNITARIO NUMERIC(15,2),
DESCONTO NUMERIC(15,2),
TOTAL NUMERIC(15,2)
);




Você está passando pIdProduto como campo, esse campo não existe, na sua tabela existe o campo ID_PRODUTO, o campo que você passa no FieldByName tem que ser exatamente igual a um que tenha no seu select.
GOSTEI 1
Rhuann Estrelas

Rhuann Estrelas

24/01/2023


CREATE GENERATOR GEN_ORCAMENTO_ID;

CREATE TABLE ORCAMENTO (
ID INTEGER,
ID_CLIENTE CHAR(50) CHARACTER SET WIN1252,
VALOR_TOTAL VARCHAR(10) CHARACTER SET WIN1252,
ID_PRODUTO VARCHAR(15) CHARACTER SET WIN1252,
PRODUTO VARCHAR(50) CHARACTER SET WIN1252,
QUANTIDADE NUMERIC(15,2),
PRECO_UNITARIO NUMERIC(15,2),
DESCONTO NUMERIC(15,2),
TOTAL NUMERIC(15,2)
);




Você está passando pIdProduto como campo, esse campo não existe, na sua tabela existe o campo ID_PRODUTO, o campo que você passa no FieldByName tem que ser exatamente igual a um que tenha no seu select.


Era isso msmo... obrigado mano. Boa semana pra tu.
GOSTEI 1
POSTAR