AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

im sql-query werte in rot darstellen

Ein Thema von tom_po · begonnen am 28. Mai 2006 · letzter Beitrag vom 30. Mai 2006
Antwort Antwort
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#1

im sql-query werte in rot darstellen

  Alt 28. Mai 2006, 09:55
ich hole aus meiner dbisam-tabelle "stockfabric" unter anderem Vorratszahlen und möchte alle Werte bis 100 (des field "stock") in rot in meiner applikation (dbisamgrid1 mit dbisamquery1) darstellen, wie binde ich dies ein?

Hier mein Code:

Delphi-Quellcode:
procedure TForm3.ToolButton3Click(Sender: TObject);
begin
DBISAMQuery1.SQL.Clear;
DBISAMQuery1.SQL.Add('select code as "Código",desc as "Descrição",maq as "Maquina destinada",stock as "Quant.Stock",date as "Último movimento" from stockfabric,fabric where nr = 1 and stockfabric.code=fabric.code order by code');
DBISAMQuery1.ExecSQL;
DBISAMQuery1.Edit;
dbnavigator1.Visible := false;
form3.Caption := 'Stock Agulhas';
end;
anbei noch ein bild der dbisam-tabelle
Miniaturansicht angehängter Grafiken
redletters_891.jpg  
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: im sql-query werte in rot darstellen

  Alt 28. Mai 2006, 10:17
Implementiere .OnDrawColumnCell
Markus Kinzler
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: im sql-query werte in rot darstellen

  Alt 28. Mai 2006, 10:43
habe es so jetzt ergänzt, funktioniert aber noch nicht:
Delphi-Quellcode:
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if ('stock' <= floattostr(100)) then
    begin
      canvas.Font.Style := canvas.Font.Style + [fsBold];
      canvas.Font.Color := clred;
    end;
end;
field "stock" ist vom data-type float
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: im sql-query werte in rot darstellen

  Alt 28. Mai 2006, 13:34
ich habe den Code jetzt so geändert, geht aber noch nicht...

Delphi-Quellcode:
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   DBISAMQuery1.SQL.Clear;
   DBISAMQuery1.SQL.Add('select * from stockfabric');
   DBISAMQuery1.ExecSQL;
  if dbisamquery1.FieldByName('stock').Asfloat <= 100 then
    begin
      dbisamdbgrid1.canvas.Font.Style := canvas.Font.Style + [fsBold];
      dbisamdbgrid1.canvas.Font.Color := clred;
    end;
    dbisamdbgrid1.Canvas.FillRect(Rect);
    dbisamdbgrid1.DrawTextBiDiModeFlags(dbisamdbgrid1.Canvas.Handle);
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: im sql-query werte in rot darstellen

  Alt 28. Mai 2006, 13:55
Noch ein Denkanstaß

Delphi-Quellcode:
var
   can: TCanvas;
begin
   can := (sender as TDBGrid).Canvas;
   if column.Field.FieldName = 'stockthen
   begin
    ...
   end;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: im sql-query werte in rot darstellen

  Alt 30. Mai 2006, 08:33
mein code sieht momentan so aus, geht aber noch nicht, angezeigte Zahlen im String "laufen durch".

Delphi-Quellcode:
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
 begin
   DBISAMQuery1.SQL.text := 'select * from stockfabric';
   DBISAMQuery1.Open;
  if dbisamquery1.FieldByName('stock').Asfloat = 100 then
    begin
      dbisamdbgrid1.Font.Style := canvas.Font.Style + [fsBold];
      dbisamdbgrid1.Font.Color := clred;
    end else dbisamDBGrid1.Font.Color := clBlack;
    dbisamdbgrid1.Canvas.FillRect(Rect);
    dbisamdbgrid1.DrawTextBiDiModeFlags(dbisamdbgrid1.Canvas.Handle);
 end;
mkinzler, wo soll ich deinen Denkanstoss einbauen?
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#7

Re: im sql-query werte in rot darstellen

  Alt 30. Mai 2006, 08:40
Das Event OnDrawColumnCell wird während des Zeichnen des Grids gefeuert. Da also nochmal eine Query zu machen, macht a) keinen Sinn und b) die Anwendung unendlich langsam.

  if ('stock' <= floattostr(100)) then Das hier kann gar nicht funtionieren da 'stock' immer ungleich '100' ist...

Den Denkanstoß musst du in das OnDrawColumnCell einbauen. Das Prinzip ist recht simpel. OnDrawColumnCell wird beim Zeichnen jeder Zelle aufgerufen. Du musst also erstmal prüfen ob die Spalte der Zelle, die gerade gezeichnet wird, deine 'Stock' Spalte ist. Wenn ja und der Wert des Feldes <= 100 dann setzt du die Farben des Canvas entsprechend deinen Wünschen also rot. Wenn nicht dann setzt du die Farbe wieder auf schwarz.
  Mit Zitat antworten Zitat
tom_po

Registriert seit: 5. Feb 2006
137 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: im sql-query werte in rot darstellen

  Alt 30. Mai 2006, 08:53
die daten werden nun wieder korrekt im dbisamgrid angezeigt, die zahlen kleiner 100 sind jedoch nicht in rot...

Delphi-Quellcode:
procedure TForm3.DBISAMDBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
   can: TCanvas;
begin
   can := (sender as TDBisamDBGrid).Canvas;
   if column.Field.FieldName = 'stockthen
 begin
   DBISAMQuery1.SQL.text := 'select * from stockfabric';
   DBISAMQuery1.Open;
   if dbisamquery1.FieldByName('stock').Asfloat < 100 then
    begin
      dbisamdbgrid1.Font.Style := canvas.Font.Style + [fsBold];
      dbisamdbgrid1.Font.Color := clred;
    end else dbisamDBGrid1.Font.Color := clBlack;
    dbisamdbgrid1.Canvas.FillRect(Rect);
    dbisamdbgrid1.DrawTextBiDiModeFlags(dbisamdbgrid1.Canvas.Handle);
 end;
end;
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

Re: im sql-query werte in rot darstellen

  Alt 30. Mai 2006, 09:00
Bevor hier das ganz zum 10000 mal wieder erzählt wird guck mal in der DP Suche Hier im Forum suchenDrawColumnCell
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#10

Re: im sql-query werte in rot darstellen

  Alt 30. Mai 2006, 09:02
Ok, dann erklär ich erstmal wieso die nicht rot sind

Der erste Datensatz den deine Query zurückgibt hat ein Stock > 100. So einfach ist das. Du fragst jedesmal neu die Datenbank an und schaust immer nur den ersten Datensatz an. Mit anderen Worten: Du prüfst jedesmal den gleichen Wert gegen 100.

Und wie schon im letzten Beitrag geschrieben: Im OnDrawColumnCell KEINE Query. Das macht das Programm nur extrem langsam.

Die Lösung findest du mit dem Link im letzten Beitrag
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz