Transferir dados de um Edit para um banco de dados
Estou criando uma aplicação de avisar quando um produto estiver em falta no estoque, e botei um Edit+Checkbox para que a pessoa possa escolher se deseja a opção de informar, funcionara assim:
No DBGrid tem os produtos e uma Columns ESTOQUE_ATUAL, do lado tem um checkbox que quando vc ativa aparece um Edit, queria saber se tem como fazer com que o que foi escrito no Edit altere o que está no ESTOQUE_ATUAL do field selecionado. Abraços.
No DBGrid tem os produtos e uma Columns ESTOQUE_ATUAL, do lado tem um checkbox que quando vc ativa aparece um Edit, queria saber se tem como fazer com que o que foi escrito no Edit altere o que está no ESTOQUE_ATUAL do field selecionado. Abraços.
Eduardo Hoffmann
Curtidas 0
Respostas
Vinícius Belisário
13/03/2012
Tem sim cara, faça um Update na tabela pegando como parametro o valor do Edit...
Comando SQL:
mais ou menos assim...
Comando SQL:
UPDATE TABELA SET ESTOQUE_ATUAL = :PAR_ESTOQUE
Query1.ParamByName(PAR_ESTOQUE).AsInteger := StrToInt(Edit1.Text);
mais ou menos assim...
GOSTEI 0
Vinícius Belisário
13/03/2012
ignora o </br>
não sie formatar no DevMedia
não sie formatar no DevMedia
GOSTEI 0
Eduardo Hoffmann
13/03/2012
[img]http://img580.imageshack.us/img580/4051/estoque1.jpg[/img]
Seguinte, nessa DBGrid quando o Nº ali em ESTOQUE_ATUAL ficar menor que 10, o numero fica em vermelho, eu queria que desse para uma pessoa que não sabe mecher escolher qual vai ser o valor para que o numero ficasse em vermelho.
EX: Atualmente se eu modifico ali, boto o total de 8 no ESTOQUE_ATUAL o numero ficaria em vermelho.
Ai queria fazer com que o Edit1 mudasse o seguinte código para que em vez de ser padronizado a quantidade minima 10, ela possa escolher:
Seguinte, nessa DBGrid quando o Nº ali em ESTOQUE_ATUAL ficar menor que 10, o numero fica em vermelho, eu queria que desse para uma pessoa que não sabe mecher escolher qual vai ser o valor para que o numero ficasse em vermelho.
EX: Atualmente se eu modifico ali, boto o total de 8 no ESTOQUE_ATUAL o numero ficaria em vermelho.
Ai queria fazer com que o Edit1 mudasse o seguinte código para que em vez de ser padronizado a quantidade minima 10, ela possa escolher:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName = ESTOQUE_ATUAL) then
begin
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < 10 then
begin
DBGrid1.Canvas.Font.Color:= clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;GOSTEI 0
Vinícius Belisário
13/03/2012
ta dando erro no seu código, não ta pintando o número de vermelho, ou você não consegue clicar na celular e alterar o número?
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Tipo eu não to conseguindo fazer com o que é digitado no Edit1 ir para uma Field do DBGrid entendeu?
Eu ainda não consegui fazer um código para que o que está no Edit1 seja transferido para uma Field do DBgrid.
EX: Digito la no Edit1 20, queria que desse para escolher tipo o Mouse Genius para que quando o ESTOQUE_ATUAL chegasse a 20 ficasse em vermelho, entedeu +/-?
Eu ainda não consegui fazer um código para que o que está no Edit1 seja transferido para uma Field do DBgrid.
EX: Digito la no Edit1 20, queria que desse para escolher tipo o Mouse Genius para que quando o ESTOQUE_ATUAL chegasse a 20 ficasse em vermelho, entedeu +/-?
GOSTEI 0
Glauber Lima
13/03/2012
Quando vc estar fazendo a update no mando o estoque esta sendo alterado ?
Pelo o que estou vendo vc tem que fechar e abrir o componente de acesso para o DBgrid tenha uma visão atual do Banco de dados.
Pelo o que estou vendo vc tem que fechar e abrir o componente de acesso para o DBgrid tenha uma visão atual do Banco de dados.
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Issoooo ele altera o Field ESTOQUE_ATUAL, em vez de alterar o código:
[b]procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName = ESTOQUE_ATUAL) then
begin
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < 10 then
begin
DBGrid1.Canvas.Font.Color:= clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;[/b]
Queria que o edit alteresse o código value do código if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < [color=red]10[/color] then
[b]procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName = ESTOQUE_ATUAL) then
begin
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < 10 then
begin
DBGrid1.Canvas.Font.Color:= clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;[/b]
Queria que o edit alteresse o código value do código if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < [color=red]10[/color] then
GOSTEI 0
Bruno Leandro
13/03/2012
tenta substituir a linha
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < 10 then
por
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < strtoint(edit1.text) then
e no evento onchange do edit1 coloque DBGrid1.refresh
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < 10 then
por
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < strtoint(edit1.text) then
e no evento onchange do edit1 coloque DBGrid1.refresh
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Não deu certo, primeiro pede pra identificar o
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < strtoint(edit1.text) then
ai eu botei
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < strtoint(edit1.text) then
O programa roda, só que da debug e não da para mecher
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < strtoint(edit1.text) then
ai eu botei
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < strtoint(edit1.text) then
O programa roda, só que da debug e não da para mecher
GOSTEI 0
Bruno Leandro
13/03/2012
se o edit1 tiver vazio pode ser problema tenta colocar, StrToIntDef(edit1.text,0)
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Desculpe a ignorancia, sou novo no delphi, mas onde boto isso?
StrToIntDef(edit1.text,0)
StrToIntDef(edit1.text,0)
GOSTEI 0
Vinícius Belisário
13/03/2012
assim:
por assim:
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < strtoint(edit1.text) then
por assim:
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < StrToIntDef(edit1.text,0) then
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Vlw, deu certo, porém ele ta padronizando não está por ID, será que tem como ser por ID(cada produto um value)
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Reparei agora também que ele não está salvando, vamos supor, eu boto lá no Edit o valor 10, la no gbgrid o ESTOQUE_ATUAL está em 8, ai fica vermelho, só que se eu fechar e rodar de novo ele fica valor 8 porém sem estar com o alerta ativado, não fica em vermelho.
GOSTEI 0
Bruno Leandro
13/03/2012
uma solução seria no cadastro de produto ter o estoque minimo de cada produto
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Então criei um Field na minha tabele com ESTOQUE_MINIMO, como eu faria agora para que o Alerta de estoque funcionasse separadamente para cada produto?
GOSTEI 0
Leonardo Xavier
13/03/2012
você ja resolveu seu problema?
GOSTEI 0
Eduardo Hoffmann
13/03/2012
Ainda não, não consegui fazer que ficasse para cada produto separadamente.
GOSTEI 0
Leonardo Xavier
13/03/2012
Me passa rua rotina como esta hoje.
GOSTEI 0
Eduardo Hoffmann
13/03/2012
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName = ESTOQUE_ATUAL) then
begin
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < StrToIntDef(edit1.text,0) then
begin
DBGrid1.Canvas.Font.Color:= clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;
Está assim, tenho um DBGrid, com esse código acima, e dentro dele tem a tabela PRODUTOS com o field ESTOQUE_ATUAL, quando digito o valor em um Edit1, se valor do Edit1 > que valor do ESTOQUE_ATUAL, o valor fica em vermelho, só que isso fica em todos, e eu queria que ficasse por produto, será que tem como?
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName = ESTOQUE_ATUAL) then
begin
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < StrToIntDef(edit1.text,0) then
begin
DBGrid1.Canvas.Font.Color:= clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;
Está assim, tenho um DBGrid, com esse código acima, e dentro dele tem a tabela PRODUTOS com o field ESTOQUE_ATUAL, quando digito o valor em um Edit1, se valor do Edit1 > que valor do ESTOQUE_ATUAL, o valor fica em vermelho, só que isso fica em todos, e eu queria que ficasse por produto, será que tem como?
GOSTEI 0
Sebastião Oliveira
13/03/2012
se você já criou no banco o campo ESTOQUE_MINIMO tá fácil, altere onde você esta comparando com Edit pelo campo ESTOQUE_MINIMO. Assim tem que atentar para que no cadastro o usuário digite o valor do estoque mínimo, se caso ele não digitar nada que fica como default valor 0.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName = ESTOQUE_ATUAL) then
begin
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < IBTable1.FieldByName (ESTOQUE_MINIMO).Value then
begin
DBGrid1.Canvas.Font.Color:= clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName = ESTOQUE_ATUAL) then
begin
if IBTable1.FieldByName (ESTOQUE_ATUAL).Value < IBTable1.FieldByName (ESTOQUE_MINIMO).Value then
begin
DBGrid1.Canvas.Font.Color:= clRed;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;
GOSTEI 0