Erro com a formatação e o Banco de Dados
Caros amigos, estou enfrentando o seguinte problema:
Tenho de um formulário de vendas um gatilho que formata o texto do meu DBGrid de acordo com os seguintes critérios:
Quando a data de vencimento está longe de vencer, o texto do DBGrid aparece com aparência normal (preto), quando falta um dia para vencer as fontes mudam para a cor verde, quando está no dia do vencimento as fontes ficam azul e quando passa da data de vencimento, as fontes ficam vermelhas. E os nomes ´Atualizado´ e ´Pendências´ aparecem nos campos respectivos.
Acontece que o código que utilizei para conseguir tais resultado gera um erro muito chato, onde a Query fica louca e começa e criar e salvar vários registros em branco e, só pára se o form for fechado. Mas os registros em branco permanecem.
Tirei o código do meu sistema e ele roda normalmente. Acontece que não posso deixá-lo de fora, pois é uma exigência de meu cliente.
Se alguém puder me ajudar, dar uma olhada no código e dizer-me onde está o erro, ficarei eternamente agradecida.
Obs: Acredito que seja uma coisa bem simples, mas, que pelo fato de eu já estar de cabeça quente com o sistema, não estou conseguindo enxergar.
(O código foi colocado no Evento OnDrawColumnCell do DBGrid, estou trabalhando com Paradox e Query - Delphi 3 - Client/Server).
procedure TFormVendas_.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
S: String;
R: TRect;
begin
if (dm_.QryVendasVencimento.Value = StrToDateTime(DateToStr(Now+1)))then
begin
with DBGrid1.Canvas do
begin
Font.Color := clGreen;
if (dm_.QryVendasSituacao.Text ´Atualizado´) then
begin
dm_.QryVendas.Edit;
dm_.QryVendasSituacao.Text := ´Atualizado´;
dm_.QryVendasValorPend.Clear;
dm_.QryVendasValorAtual.Value := dm_.QryVendasValor.Value;
dm_.QryVendas.Post;
end;
FillRect(Rect);
S := Column.Field.AsString;
R := Rect;
DrawText(Handle, PChar(S), Length(S), R, DT_LEFT or DT_LEFT);
end;
end;
if (dm_.QryVendasVencimento.Value < StrToDateTime(DateToStr(Now)))then
begin
with DBGrid1.Canvas do
begin
Font.Color := clRed;
if (dm_.QryVendasSituacao.Text ´Pendências´) then
begin
dm_.QryVendas.Edit;
dm_.QryVendasSituacao.Text := ´Pendências´;
dm_.QryVendasValorAtual.Clear;
dm_.QryVendasValorPend.Value := dm_.QryVendasValor.Value;
dm_.QryVendas.Post;
end;
FillRect(Rect);
S := Column.Field.AsString;
R := Rect;
DrawText(Handle, PChar(S), Length(S), R, DT_LEFT or DT_LEFT);
end;
end;
if (dm_.QryVendasVencimento.Value = StrToDateTime(DateToStr(Now)))then
begin
with DBGrid1.Canvas do
begin
Font.Color := clBlue;
if (dm_.QryVendasSituacao.Text ´Atualizado´) then
begin
dm_.QryVendas.Edit;
dm_.QryVendasSituacao.Text := ´Atualizado´;
dm_.QryVendasValorPend.Clear;
dm_.QryVendasValorAtual.Value := dm_.QryVendasValor.Value;
dm_.QryVendas.Post;
end;
FillRect(Rect);
S := Column.Field.AsString;
R := Rect;
DrawText(Handle, PChar(S), Length(S), R, DT_LEFT or DT_LEFT);
end;
end;
end;
Tenho de um formulário de vendas um gatilho que formata o texto do meu DBGrid de acordo com os seguintes critérios:
Quando a data de vencimento está longe de vencer, o texto do DBGrid aparece com aparência normal (preto), quando falta um dia para vencer as fontes mudam para a cor verde, quando está no dia do vencimento as fontes ficam azul e quando passa da data de vencimento, as fontes ficam vermelhas. E os nomes ´Atualizado´ e ´Pendências´ aparecem nos campos respectivos.
Acontece que o código que utilizei para conseguir tais resultado gera um erro muito chato, onde a Query fica louca e começa e criar e salvar vários registros em branco e, só pára se o form for fechado. Mas os registros em branco permanecem.
Tirei o código do meu sistema e ele roda normalmente. Acontece que não posso deixá-lo de fora, pois é uma exigência de meu cliente.
Se alguém puder me ajudar, dar uma olhada no código e dizer-me onde está o erro, ficarei eternamente agradecida.
Obs: Acredito que seja uma coisa bem simples, mas, que pelo fato de eu já estar de cabeça quente com o sistema, não estou conseguindo enxergar.
(O código foi colocado no Evento OnDrawColumnCell do DBGrid, estou trabalhando com Paradox e Query - Delphi 3 - Client/Server).
procedure TFormVendas_.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
S: String;
R: TRect;
begin
if (dm_.QryVendasVencimento.Value = StrToDateTime(DateToStr(Now+1)))then
begin
with DBGrid1.Canvas do
begin
Font.Color := clGreen;
if (dm_.QryVendasSituacao.Text ´Atualizado´) then
begin
dm_.QryVendas.Edit;
dm_.QryVendasSituacao.Text := ´Atualizado´;
dm_.QryVendasValorPend.Clear;
dm_.QryVendasValorAtual.Value := dm_.QryVendasValor.Value;
dm_.QryVendas.Post;
end;
FillRect(Rect);
S := Column.Field.AsString;
R := Rect;
DrawText(Handle, PChar(S), Length(S), R, DT_LEFT or DT_LEFT);
end;
end;
if (dm_.QryVendasVencimento.Value < StrToDateTime(DateToStr(Now)))then
begin
with DBGrid1.Canvas do
begin
Font.Color := clRed;
if (dm_.QryVendasSituacao.Text ´Pendências´) then
begin
dm_.QryVendas.Edit;
dm_.QryVendasSituacao.Text := ´Pendências´;
dm_.QryVendasValorAtual.Clear;
dm_.QryVendasValorPend.Value := dm_.QryVendasValor.Value;
dm_.QryVendas.Post;
end;
FillRect(Rect);
S := Column.Field.AsString;
R := Rect;
DrawText(Handle, PChar(S), Length(S), R, DT_LEFT or DT_LEFT);
end;
end;
if (dm_.QryVendasVencimento.Value = StrToDateTime(DateToStr(Now)))then
begin
with DBGrid1.Canvas do
begin
Font.Color := clBlue;
if (dm_.QryVendasSituacao.Text ´Atualizado´) then
begin
dm_.QryVendas.Edit;
dm_.QryVendasSituacao.Text := ´Atualizado´;
dm_.QryVendasValorPend.Clear;
dm_.QryVendasValorAtual.Value := dm_.QryVendasValor.Value;
dm_.QryVendas.Post;
end;
FillRect(Rect);
S := Column.Field.AsString;
R := Rect;
DrawText(Handle, PChar(S), Length(S), R, DT_LEFT or DT_LEFT);
end;
end;
end;
Anjinho Loiro
Curtidas 0
Respostas
Edilcimar
26/02/2005
procure por cor dbgrid errada que eu escrevi, lá mostra um exemplo sobre isto
GOSTEI 0
Anjinho Loiro
26/02/2005
SOBE
GOSTEI 0