![]() |
Datenbank: mysql • Version: 5.x • Zugriff über: mysql odbc
mysql + stringgrid + farblich markieren
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:
dann die Anzeige im StringGrid
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;
Delphi-Quellcode:
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
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; |
Re: mysql + stringgrid + farblich markieren
Schau dir mal das OnDrawCell-Event des Grids an bzw. such mal im Forum. Hatten wir schon öfters.
|
Re: mysql + stringgrid + farblich markieren
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. |
Re: mysql + stringgrid + farblich markieren
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
Delphi-Quellcode:
zu.
Stringgrid.objects[0,Zeile]
|
Re: mysql + stringgrid + farblich markieren
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. |
Re: mysql + stringgrid + farblich markieren
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:
Im OnDrawCell Event kannst Du dann auf diese Objekte zugreifen, und entscheiden, in welcher Farbe du zeichnen möchtest.
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; |
Re: mysql + stringgrid + farblich markieren
Das Problem ist, dass FResult kein "FieldbyName" Property hat, da es sich hier nicht um ein Query handelt :cry:
|
Re: mysql + stringgrid + farblich markieren
Dann nimm halt FieldValue.
|
Re: mysql + stringgrid + farblich markieren
fieldvalue hat als parameter Integer
|
Re: mysql + stringgrid + farblich markieren
wenn ich es so mache , zeigt er mir leider keine Daten an :(
Delphi-Quellcode:
fildbyname muesste bei fresult fieldvaluebyname sein, da er in der klammer einen string erwartet und
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; so etwas wie .AsString nicht funktioniert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz