Transferir dados de um Edit para um banco de dados

Delphi

13/03/2012

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.
Eduardo Hoffmann

Eduardo Hoffmann

Curtidas 0

Respostas

Vinícius Belisário

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:
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

Vinícius Belisário

13/03/2012

ignora o </br>

não sie formatar no DevMedia
GOSTEI 0
Eduardo Hoffmann

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:

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

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

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 +/-?
GOSTEI 0
Glauber Lima

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.
GOSTEI 0
Eduardo Hoffmann

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
GOSTEI 0
Bruno Leandro

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
GOSTEI 0
Eduardo Hoffmann

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
GOSTEI 0
Bruno Leandro

Bruno Leandro

13/03/2012

se o edit1 tiver vazio pode ser problema tenta colocar, StrToIntDef(edit1.text,0)

GOSTEI 0
Eduardo Hoffmann

Eduardo Hoffmann

13/03/2012

Desculpe a ignorancia, sou novo no delphi, mas onde boto isso?
StrToIntDef(edit1.text,0)
GOSTEI 0
Vinícius Belisário

Vinícius Belisário

13/03/2012

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

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

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

Bruno Leandro

13/03/2012

uma solução seria no cadastro de produto ter o estoque minimo de cada produto
GOSTEI 0
Eduardo Hoffmann

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

Leonardo Xavier

13/03/2012

você ja resolveu seu problema?
GOSTEI 0
Eduardo Hoffmann

Eduardo Hoffmann

13/03/2012

Ainda não, não consegui fazer que ficasse para cada produto separadamente.
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

13/03/2012

Me passa rua rotina como esta hoje.
GOSTEI 0
Eduardo Hoffmann

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?
GOSTEI 0
Sebastião Oliveira

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;
GOSTEI 0
POSTAR