Fórum cosultas com componentes criados dinamicamente #932
01/12/2008
0
Arnoldo Lima
Curtir tópico
+ 0Post mais votado
02/12/2008
QryBusca := TZQuery.Create(Self);
QryBusca.Connection := DM.conexao; QryBusca.Close;
QryBusca.Sql.Clear;
QryBusca.SQL.Add(Select Quantidade, Unidade, Produto, Artigo, Grupo, Marca, PrecoAtacado, PrecoVenda from Produtos);
QryBusca.SQL.Add(WHERE Referencia = :Referencia);
QryBusca.ParamByName(Referencia).AsString := MascEdit8.Text;
QryBusca.Open; MascEdit10.Text := QryBusca.FieldByName(Quantidade).AsString;
MascEdit6.Text := QryBusca.FieldByName(Unidade).AsString;
Label25.Caption := QryBusca.FieldByName(Produto).AsString;
Edit2.Text := QryBusca.FieldByName(Artigo).AsString;
Edit3.Text := QryBusca.FieldByName(Grupo).AsString;
Edit4.Text := QryBusca.FieldByName(Marca).AsString;
if ComboBox5.ItemIndex = 0 then
MascEdit11.Text := FormatFloat(0.#0,,(QryBusca.FieldByName(PrecoAtacado).AsFloat))
else
MascEdit11.Text := FormatFloat(0.#0,,(QryBusca.FieldByName(PrecoVenda).AsFloat));
{ end
else
begin
ShowMessage(Produto não encontrado); --> aqui, se a busca não encontrar o Produto ele avisa.
MascEdit8.SetFocus;
exit;
end; }
//nova busca termina Como faço para colocar o "if ... then" nesse código. Aguardo. Arnoldo
Arnoldo Lima
Gostei + 1
Mais Posts
01/12/2008
Rodrigo Mourão
Gostei + 0
02/12/2008
Rodrigo Mourão
[#VIDEO-35#]
Gostei + 0
02/12/2008
Arnoldo Lima
Gostei + 0
02/12/2008
Arnoldo Lima
Qry := TZQuery.Create(Self);
Qry.Connection := DM.conexao;
DM.TbSaida.First;
while not DM.TbSaida.Eof do
begin
Qry.Close;
Qry.SQL.Add(Select Quantidade from Produtos);
Qry.SQL.Add(WHERE Referencia = :Referencia);
Qry.ParamByName(Referencia).AsString := DM.TbSaida.FieldByName(Produto).asstring;
Qry.Open;
Qry.Edit;
Qry.Fields[0].AsFloat := Qry.Fields[0].AsFloat - DM.TbSaida.FieldByName(Quantidade).Asfloat;
Qry.Post;
DM.TbSaida.Next;
end;
end; //Fim da escolha tipo de Pedido //observação1: Escolho o tipo de pedido, porque as vezes na empresa não precisa dar baixa na quantidade de produtos aí escolhes "Pedido Remessa por exemplo. Esse não daria baixa, o estoque ficaria como estava. //Essa variável eu declarei no início do procedimento: "Qry: TZQuery; " - Lá no início do código. Esse é o código antigo: { //atualiza as quantidades
with TbProduto do
begin
Open;
DM.TbSaida.First;
while not DM.TbSaida.Eof do
begin
//coloca em Fields[0] para código, Fields[1] para referência
Locate(Fields.Fields[1].FieldName,DM.TbSaida.FieldByName(Produto).AsString,[]);
Edit;
FieldByName(Quantidade).Asfloat := FieldByName(Quantidade).asfloat -
DM.TbSaida.FieldByName(Quantidade).Asfloat;
Post;
ApplyUpdates;
DM.TbSaida.Next;
end; // fim do while
end; //fim do with } POR GENTILEZA, DÊ UMA OLHADA E ME DIGA SE ESTÁ TUDO OK OU SE EU POSSO MELHORAR MINHA ADAPTAÇÃO DO CÓDIGO. Ainda sobre esse assunto gostaria de saber se posso adaptar outro LOCATE. Lhe envio em seguida. Grato, Arnoldo
Gostei + 0
02/12/2008
Arnoldo Lima
if DM.TbSaida.Locate(Produto,MascEdit8.Text,[]) then
begin
ShowMessage(O produto já foi lançado);
if Application.MessageBox(SIM para adicionar outro item - NÃO para EDITAR ou FECHAR o PEDIDO,Sair,MB_YESNO + MB_ICONINFORMATION + MB_DEFBUTTON2)= IdYes then
MascEdit8.SetFocus
else
begin
if NumEdit3.Enabled = True then
NumEdit3.SetFocus
else
begin
NumEdit3.Enabled := True;
NumEdit3.SetFocus;
NumEdit4.Enabled := False;
end;
Exit;
end;
end;
//até aqui faz a busca para saber se o código é igual na tabela saída //pega os dados da tabela Produtos e traz para o Pedido
With TbProduto do
begin
Open;
Refresh; //coloa aqui 0 (zero) para buscar pelo código, 1 (um) para buscar pela referência
if Locate(FieldDefs.Items[1].Name,MascEdit8.Text,[]) then
begin
MascEdit10.Text := FieldByName(Quantidade).AsString;
MascEdit6.Text := FieldByName(Unidade).AsString;
Label25.Caption := FieldByName(Produto).AsString;
Edit2.Text := FieldByName(Artigo).AsString;
Edit3.Text := FieldByName(Grupo).AsString;
Edit4.Text := FieldByName(Marca).AsString; if ComboBox5.ItemIndex = 0 then
MascEdit11.Text := FormatFloat(0.#0,,(FieldByName(PrecoAtacado).AsFloat))
else
MascEdit11.Text := FormatFloat(0.#0,,(FieldByName(PrecoVenda).AsFloat));
end
else
begin
ShowMessage(Produto não encontrado);
MascEdit8.SetFocus;
exit;
end;
Close;
end; MascEdit12.Text := 0; Aguardo Arnoldo
Gostei + 0
02/12/2008
Arnoldo Lima
begin
Qry := TZQuery.Create(Self);
Qry.Connection := DM.conexao;
DM.TbSaida.First;
while not DM.TbSaida.Eof do
begin
Qry.Close;
Qry.SQL.Add(Select Quantidade from Produtos);
Qry.SQL.Add(WHERE Referencia = :Referencia);
Qry.ParamByName(Referencia).AsString := DM.TbSaida.FieldByName(Produto).asstring;
Qry.Open;
Qry.Edit;
Qry.Fields[0].AsFloat := Qry.Fields[0].AsFloat - DM.TbSaida.FieldByName(Quantidade).Asfloat;
Qry.Post;
DM.TbSaida.Next;
end;
end; //fim da escolha Tipo de Pedido CÓDIGO VELHO - Funcionava beleza e dava baixa nos produtos listados no pedido: { //atualiza as quantidades
with TbProduto do
begin
Open;
DM.TbSaida.First;
while not DM.TbSaida.Eof do
begin
//coloca em Fields[0] para código, Fields[1] para referência
Locate(Fields.Fields[1].FieldName,DM.TbSaida.FieldByName(Produto).AsString,[]);
Edit;
FieldByName(Quantidade).Asfloat := FieldByName(Quantidade).asfloat -
DM.TbSaida.FieldByName(Quantidade).Asfloat;
Post;
ApplyUpdates;
DM.TbSaida.Next;
end; // fim do while
end; //fim do with } Se eu listar mais de 1 produto ele dá erro. A partir do segundo ele já não da baixa no estoque.
Gostei + 0
02/12/2008
Rodrigo Mourão
Gostei + 0
02/12/2008
Arnoldo Lima
begin
Qry := TZQuery.Create(Self);
Qry.Connection := DM.conexao;
DM.TbSaida.First;
while not DM.TbSaida.Eof do
begin
//Qry.Close;
Qry.SQL.Add(Select Quantidade from Produtos);
Qry.SQL.Add(WHERE Referencia = :Referencia);
Qry.ParamByName(Referencia).AsString := DM.TbSaida.FieldByName(Produto).asstring;
Qry.Open;
Qry.Edit;
Qry.Fields[0].AsFloat := Qry.Fields[0].AsFloat - DM.TbSaida.FieldByName(Quantidade).Asfloat;
Qry.Post;
DM.TbSaida.Next;
end;
end; //fim da escolha Tipo de Pedido So atualiza a quantidade de 1 produto no pedido depois dá erro. O que está acontecendo?
Gostei + 0
02/12/2008
Rodrigo Mourão
Gostei + 0
02/12/2008
Arnoldo Lima
begin
Qry := TZQuery.Create(Self);
Qry.Connection := DM.conexao;
DM.TbSaida.First;
while not DM.TbSaida.Eof do
begin
Qry.Close;
Qry.SQL.Add(Select Quantidade from Produtos);
Qry.SQL.Add(WHERE Referencia = :Referencia);
Qry.ParamByName(Referencia).AsString := DM.TbSaida.FieldByName(Produto).asstring;
Qry.Open;
Qry.Edit;
Qry.Fields[0].AsFloat := Qry.Fields[0].AsFloat - DM.TbSaida.FieldByName(Quantidade).Asfloat;
Qry.Post;
DM.TbSaida.Next;
end;
end; //fim da escolha Tipo de Pedido 1- O que o código faz? R. Procura quantidade da tabela Produtos. Depois edita somente A "Referencia" que está em Produtos de acordo com a TbSaida. Obs. Antes desse código vou colocando um por um os produtos dentro da tabela "TbSaida". 2- O que faço depois? Justamente o código acima. Vou dando baixa na quantidade da tabela "Produtos" um por um até o fim da "TbSaida" onde estão os produtos lançados para venda no momento. O código acima funciona somente para 1 (um) produto na tabela "TbSaida", quando coloco acima de 1 aparece a mensagem abaixo: SQL Error: You have an error your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
"SelecQuantidade from Produtos WHERE Referencia = 100104" at line 1. Obs. "100104" é a referencia de um dos produtos que estão lançados na TbSaida. Por exemplo: Se lanço os produtos na tabela "TbSaida": 100102 - Celular 100104 - Fone de ouvido 100106- Pen drive O erro acima aparece logo na referência "100104" . Aguardo resposta, Arnoldo
Gostei + 0
02/12/2008
Rodrigo Mourão
Vamos lá na minha vídeo eu usei ADO pois não tenho o Zeos. O commandtext no ADO e String já o Seu componente e um TString. Repare voce da ADD.
Sendo Assim sempre que entrar no código tem que dar um Clear se nao ele vai concatenar um select no outro por isso o erro no segundo. Observe:
DM.TbSaida.First;
while not DM.TbSaida.Eof do
begin
Qry.Close;
Qry.Sql.Clear;
Qry.SQL.Add(Select Quantidade from Produtos);
Qry.SQL.Add(WHERE Referencia = :Referencia);
Qry.ParamByName(Referencia).AsString := DM.TbSaida.FieldByName(Produto).asstring;
Qry.Open;
Qry.Edit;
Qry.Fields[0].AsFloat := Qry.Fields[0].AsFloat - DM.TbSaida.FieldByName(Quantidade).Asfloat;
Qry.Post;
DM.TbSaida.Next;
end;
Isso ira resolver !!
Aguardo retorno para encerrar o chamado !!!!
Gostei + 0
02/12/2008
Rodrigo Mourão
O Código resolveu ???
abs !!
Gostei + 0
02/12/2008
Rodrigo Mourão
QryBusca.Connection := DM.conexao; QryBusca.Close;
QryBusca.Sql.Clear;
QryBusca.SQL.Add(Select Quantidade, Unidade, Produto, Artigo, Grupo, Marca, PrecoAtacado, PrecoVenda from Produtos);
QryBusca.SQL.Add(WHERE Referencia = :Referencia);
QryBusca.ParamByName(Referencia).AsString := MascEdit8.Text;
QryBusca.Open;
if Qry.RecordCount = 1 then
begin
MascEdit10.Text := QryBusca.FieldByName(Quantidade).AsString;
MascEdit6.Text := QryBusca.FieldByName(Unidade).AsString;
Label25.Caption := QryBusca.FieldByName(Produto).AsString;
Edit2.Text := QryBusca.FieldByName(Artigo).AsString;
Edit3.Text := QryBusca.FieldByName(Grupo).AsString;
Edit4.Text := QryBusca.FieldByName(Marca).AsString;
if ComboBox5.ItemIndex = 0 then
MascEdit11.Text := FormatFloat(0.#0,,(QryBusca.FieldByName(PrecoAtacado).AsFloat))
else
MascEdit11.Text := FormatFloat(0.#0,,(QryBusca.FieldByName(PrecoVenda).AsFloat));
end
else
begin
ShowMessage(Produto não encontrado); --> aqui, se a busca não encontrar o Produto ele avisa.
MascEdit8.SetFocus;
exit;
end;
Gostei + 0
02/12/2008
Arnoldo Lima
Gostei + 0
03/12/2008
Rodrigo Mourão
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)