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

24/01/2023

0

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

Responder

Post mais votado

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;

Lucas Santato

Lucas Santato
Responder

Mais Posts

24/01/2023

Rhuann Estrelas

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)
);


Responder

25/01/2023

Lucas Santato


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.
Responder

25/01/2023

Rhuann Estrelas


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.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar