AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi mysql + stringgrid + farblich markieren
Thema durchsuchen
Ansicht
Themen-Optionen

mysql + stringgrid + farblich markieren

Ein Thema von bl3nder · begonnen am 29. Aug 2006 · letzter Beitrag vom 30. Aug 2006
Antwort Antwort
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#1

mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 10:47
Datenbank: mysql • Version: 5.x • Zugriff über: mysql odbc
Hoi
Ich habe eine mysql Datenbank , wo PCs, Monitore und Dockingstations gespeichert sind.
Ich benutze nur die mysql odbcs , kein zeos oder so.
Ich habe im private von TForm1
fmysql: Tmysqlclient und
Fresult: TmysqlResult
Bisher habe ich die Anzeige der wichtigsten Daten ueber folgende Prozeduren hinbekommen
Zuerst lasse ich mir einen entsprechenden sql befehl geben.
Delphi-Quellcode:
procedure TForm1.mysqlqry ( q : string );
begin


if (q = '') then begin
  q := ' SELECT r.inventar_Nr,r.netzwerkname,a.benutzer ,';
  q := q + ' a.benutzer_alt, a.raum , r.bemerkungen ,m.inventar_Nr, d.inventar_Nr, r.statusID';
  q := q + ' from arbeitsplatz a inner join rechner r ';
  q := q + ' on a.rechnerid = r.rechnerid ';
  q := q + ' left join monitor m ';
  q := q + ' on a.monitorid = m.monitorid ';
  q := q + ' left join dockingstation d ';
  q := q + ' on r.dockingstationid = d.dockingstationid ';
  q := q + ' WHERE "1=1" ';
  end;

FResult := FMysql.query(q, true, ex);
ShowInGrid;


end;
dann die Anzeige im StringGrid

Delphi-Quellcode:
procedure TForm1.ShowInGrid;
var i,j: integer;


begin
if FMySql.Connected then begin

  if assigned(FResult) then begin // <-- Falls eine SQL Abfrage vorliegt


          Grid.RowCount := FResult.RowsCount+1; // <-- ZeilenAnzahl
          Grid.ColCount := FResult.FieldsCount; // <-- SpaltenAnzahl

          FResult.First;


           for i:=0 to FResult.RowsCount-1 do begin // <-- Zeilen durchlaufen
              for j:=0 to FResult.FieldsCount-1 do // <-- Spalten durchlaufen
                    Grid.Cells[j,i+1] := FResult.FieldValue(j);


              FResult.Next;
          Statusbar1.Panels[0].Text := IntToStr(Grid.RowCount) + ' Einträge';
          end;
  end
  else
    ShowMessage('Keine SQL-Abfrage !');

end
else
  ShowMessage('Not Connected');

end;
Nun moechte ich erreichen, dass er mir statt einer weiteren Spalte fuer "r.StatusID"-Werten die Zeilen abhaengig von der r.StatusID farblich markiert. Da ich aber zu FResult nichts gescheites gefunden habe, dachte ich mir ich frag mal, ob jemand weiß ich das am besten hinkrieg
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 10:52
Schau dir mal das OnDrawCell-Event des Grids an bzw. such mal im Forum. Hatten wir schon öfters.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#3

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 11:15
wie ich eine Zeile farblich markiere ist schon irgendwie klar.
Nur will ich ja,dass meine Spalte mit "r.StatusID" verschwindet und sich gleichzeitig aber als Farbe bemerklich macht.

=> Ich muss meine ganze Stringgridanzeige umschmeißen, was ich nicht weiß ichs machen soll.
Denn ich gebe nur die Spalten im Stringgrid aus, die ich auch im mysql qry Browser erhalte.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 11:27
Du kommst nicht drumrum, deinen StatusID irgendwie mit im Grid zu speichern. Du musst die Information ja nicht anzeigen, aber du brauchst sie.

Erstell Dir für jeden Record ein Objekt und weist dieses der Eigenschaft
Stringgrid.objects[0,Zeile] zu.
  Mit Zitat antworten Zitat
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#5

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 11:34
ja ich dachte mir schon , dass ich da nicht drumrum kaeme, aber bisher ist mein Code ja eher auf "alles anzeigen" geschrieben.
Nun muss ich jede Spalte einzeln reinschreiben, damit ich die Wahl hab, was ich anzeigen will und was nicht.

was ich mit dem grid.object machen soll, verstehe ich noch nicht ganz. Und welche records meinst du denn ?
Sry bin noch Anfaenger.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 11:42
Dein Grid hat die Eigenschaft Cells[x,y], also ein 2D Array, mit dem Du ja in jede Zelle was reinschreiben kannst.
Und zusätzlich dazu gibts noch das Array Objects[x,y]. Du kannst also jeder Zelle noch ein Objekt zuweisen. Und in dieses Objekt kannst du beliebige Informationen reinschreiben, da es jedes beliebige Objekt sein darf.

Irgendwie durchläufst Du ja deine Query zeilenweise und weist den Inhalt der Zelle zu.. Mach zusätzlich noch eine Objektzuweisung:

Delphi-Quellcode:
type
  TmyObj = class
  public
     StatusID : integer ;
  end ;

...


procedure TForm1.ShowInGrid;
var i,j: integer;


begin
if FMySql.Connected then begin

  if assigned(FResult) then begin // <-- Falls eine SQL Abfrage vorliegt


          Grid.RowCount := FResult.RowsCount+1; // <-- ZeilenAnzahl
          Grid.ColCount := FResult.FieldsCount; // <-- SpaltenAnzahl

          FResult.First;


           for i:=0 to FResult.RowsCount-1 do begin // <-- Zeilen durchlaufen
              for j:=0 to FResult.FieldsCount-1 do // <-- Spalten durchlaufen
                    Grid.Cells[j,i+1] := FResult.FieldValue(j);

              // hier ergänzen
              myObj := TmyObj.create ;
              myObj.StatusID := FResult.FieldByName('StatusID').AsInteger ;
              Grid.Objects[0,i+1] := myObj ;

              FResult.Next;
          Statusbar1.Panels[0].Text := IntToStr(Grid.RowCount) + ' Einträge';
          end;
  end
  else
    ShowMessage('Keine SQL-Abfrage !');

end
else
  ShowMessage('Not Connected');

end;
Im OnDrawCell Event kannst Du dann auf diese Objekte zugreifen, und entscheiden, in welcher Farbe du zeichnen möchtest.
  Mit Zitat antworten Zitat
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#7

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 11:50
Das Problem ist, dass FResult kein "FieldbyName" Property hat, da es sich hier nicht um ein Query handelt
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 11:55
Dann nimm halt FieldValue.
  Mit Zitat antworten Zitat
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#9

Re: mysql + stringgrid + farblich markieren

  Alt 29. Aug 2006, 11:57
fieldvalue hat als parameter Integer
  Mit Zitat antworten Zitat
bl3nder

Registriert seit: 18. Aug 2006
89 Beiträge
 
#10

Re: mysql + stringgrid + farblich markieren

  Alt 30. Aug 2006, 12:52
wenn ich es so mache , zeigt er mir leider keine Daten an

Delphi-Quellcode:
procedure TForm1.ShowInGrid;

  var i,j: integer;
  markierung : tcolor;

  begin
  if FMySql.Connected then begin

    if assigned(FResult) then begin // <-- Falls eine SQL Abfrage vorliegt


            Grid.RowCount := FResult.RowsCount+1; // <-- ZeilenAnzahl
            Grid.ColCount := FResult.FieldsCount; // <-- SpaltenAnzahl

            FResult.First;

        Grid.RowCount := Grid.RowCount + 1;
            Grid.Cells[0,Grid.RowCount-2] := Fresult.FieldValueByName('Inventar_Nr');
            Grid.Cells[1,Grid.RowCount-2] := Fresult.FieldValueByName('NetzwerkName');
            Grid.Cells[2,Grid.RowCount-2] := Fresult.FieldValueByName('Benutzer');
            Grid.Cells[3,Grid.RowCount-2] := Fresult.FieldValueByName('Benutzer_alt');
            Grid.Cells[4,Grid.RowCount-2] := Fresult.FieldValueByName('Raum');
            Grid.Cells[5,Grid.RowCount-2] := Fresult.FieldValueByName('Bemerkungen');

            FResult.Next;

            Statusbar1.Panels[0].Text := IntToStr(Grid.RowCount) + ' Einträge';
    end
    else
      ShowMessage('Keine SQL-Abfrage !');

  end
  else
    ShowMessage('Not Connected');

  end;
fildbyname muesste bei fresult fieldvaluebyname sein, da er in der klammer einen string erwartet und
so etwas wie .AsString nicht funktioniert
  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 04:51 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