![]() |
Dbgrid Titel leer
Hallo Delphi Gemeinde,
Ich lese eine Access Datenbank via FDConnection, FDQuery und Datasource aus und geben die Daten an eine Dbgrid. Die Datenbankfelder werden schön als Dbgrid Titel angezeigt und die jeweiligen Daten darunter. Nun möchte ich bei DBGrid1TitleClick das jeweilige Datenbankfeld (Titel der Column) via Column.FieldName auslesen, jedoch sind die alle Titel leer = „“. Ich habe zum Test eine andere Dbgrid mit manuellen Columns erstellt und die lassen sich via Column.FieldName auslesen. Auch Column.Title.Caption ist leer! Frage: Warum kann ich das nicht auslesen, wenn die Daten via FD-Tools kommen? Danke! Gruß, Alexander |
AW: Dbgrid Titel leer
Zitat:
|
AW: Dbgrid Titel leer
Nutze die Daten des Feldes diekt und nicht die Daten der Columns im DBGrid. Die Daten da sind nur vorhanden, wenn du die Columns manuell erstellst. Jede Col hat aber einen Verweis auf das DB-Feld, über das du die Feldbezeichnung bekommst.
Delphi-Quellcode:
DBGrid1.Columns[1].Field.FieldName; // oder DisplayName, wenn du dem Feld einen andere Bezeichnung gegeben hast.
|
AW: Dbgrid Titel leer
da bekomme ich einen Fehler: Argument außerhalb des Bereichs.
Denke er kommt mit den Daten von der DB irgenwie durcheinander. Auch wenn ich die Anzahl der Spalten abfrage = 1 |
AW: Dbgrid Titel leer
OK, habe leider die DBGrid Komponente selber schon Ewigkeiten nicht mehr genutzt. Versuche es mal so:
Delphi-Quellcode:
DBGrid.Fields[x].FieldName
PS. Lies dir doch bitte auch mal die Hilfe zum DBGrid durch. Da ist das beschrieben, dass man das per Fields machen muss und nicht über Columns. Fields[0] wäre die erste Spalte, Fields[1] die 2. usw. |
AW: Dbgrid Titel leer
wenn ich das abfrage: DBGrid1.Fields[1].FieldName;
Bekomme ich auch ne Fehlermeldung: Zugriffsverletzung, etc... Und falls dies funktionieren wird, x ist ja immer eine vorher festgelegte Zahl. Wie bekomme ich heraus in welcher Spalte ich den Titel angeklickt habe. Sprich ist X = 1 oder 15? |
AW: Dbgrid Titel leer
Zitat:
|
AW: Dbgrid Titel leer
das ist alles korrekt, wenn die Columns manuell erstellt wurden. Sobald die von einer DB kommt, ist dies nicht mehr so.
Bei mir ist jede Spalte -1 und kein Text im Titel |
AW: Dbgrid Titel leer
Zeig' bitte mal den Quelltext, sonst müssen wir hier bis auf weiteres raten, was eventuell falsch sein könnte.
Mit Quelltext sieht man (mit ein bisserl Glück) das Problem sofort. |
AW: Dbgrid Titel leer
Zitat:
Code:
Und - schwupps! - sind alle Spalten da und können wie o.a. angesprochen werden.
DBGrid1.Columns.State := csDefault;
|
AW: Dbgrid Titel leer
hmmm, ich habe herumprobiert und es wird immer besser, ich geb gleich auf:
Jetzt kan ich die Titel der Spalten sehen aber nur die 1., 5.6.7.8., etc. Bei der 2.3.4. ist der Index immer -1 und ich bekomme keinen Wert. Was ist jetzt dass denn? |
AW: Dbgrid Titel leer
Zitat:
|
AW: Dbgrid Titel leer
Ich habe eine Access DB und dort mehrere Felder, die ich aber nicht alle in der DBgrid anzeigen möchte. Die Felder die ich ausblende werden woanders angezeigt.
Ziel ist es mit Column.fieldname den order by sql Befehl flexibel zu machen. Klicke ich auf Nr kommt der Titel. Art, Baureihe, Epoche und Hersteller gehen nicht. Da ist der Column.Index = -1 Ab Anzahl geht es wieder. Ich habe auch schon alle Fields mit dem visible = false auskommentiert, dann sehe ich alle Felder, habe aber das Gleiche Problem. Also ist es das Visible=false nicht. Im edit1.text Feld lasse ich mir den Titel der jeweiligen Spalte nur Anzeigen, zwecks Kontrolle. Hier der Quell-Text: procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin FDConnection1.Params.Database:= ProgPath+'database.mdb'; FDConnection1.Params.DriverID:='MSAcc' ; FDConnection1.Connected:=true; FDQuery1.SQL.Clear; FDQuery1.SQL.Add('select Nr, Art, Baureihe, Epoche, Hersteller, Anzahl, Preis, Rocrail, CS3, Eingemessen, Bild, Motor, Dekoder, Artikelnummer, URL, Zusatzinfo, Protokol, Adresse, Dateien, Kaufdatum from TabLoks '); //FDQuery1.SQL.Add('order by Epoche'); FDQuery1.Active:=true; FDQuery1.first; DBGrid1.Columns.State := csDefault; dbgrid1.Columns[5].Visible:=false; dbgrid1.Columns[6].Visible:=false; dbgrid1.Columns[7].Visible:=false; dbgrid1.Columns[8].Visible:=false; dbgrid1.Columns[9].Visible:=false; dbgrid1.Columns[10].Visible:=false; dbgrid1.Columns[14].Visible:=false; dbgrid1.Columns[15].Visible:=false; dbgrid1.Columns[16].Visible:=false; dbgrid1.Columns[17].Visible:=false; dbgrid1.Columns[18].Visible:=false; dbgrid1.Columns[19].Visible:=false; dbgrid1.Columns[0].Width:=150; dbgrid1.Columns[1].Width:=150; dbgrid1.Columns[2].Width:=150; dbgrid1.Columns[3].Width:=150; dbgrid1.Columns[4].Width:=150; dbgrid1.Columns[5].Width:=150; dbgrid1.Columns[11].Width:=150; dbgrid1.Columns[12].Width:=150; dbgrid1.Columns[13].Width:=150; edit1.Text:=Column.FieldName; end; |
AW: Dbgrid Titel leer
Das ist definitiv zu viel Code in dem TitleClick Event, der eigentlich nur einmal aufgerufen werden muss. Mach die Abfrage an anderer Stelle und ändere im TitleClick lediglich die Sortierung.
Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin FDQuery1.IndexFieldNames := Column.FieldName; end; |
AW: Dbgrid Titel leer
super! Und wie kann ich die Sortierreihenfolge ändern? A-Z und Z-A? ode 1-9 oder 9-1?
|
AW: Dbgrid Titel leer
Hallo EG045947,
Du kannst Deinen Quellcode etwas übersichtlicher formatieren, wenn Du das Delphi-Symbol (= gelber Helm mit dem roten Kamm) vom Menü direkt über dem Editorfenster benutzt. Alternaiv dazu kannst Du den Quellcode zwischen [DELPHI] und [/DELPHI] setzten. Das geht übrigens auch nachträglich, wenn Du Deinen ersten Beitrag editierst. Damit hilfst Du zugleich künftigen Interessenten, die aus Deinem Fall etwas lernen wollen. Dann ist es auch für uns einfacher, Dir gezielt zu helfen. :-D Gruß, Andreas |
AW: Dbgrid Titel leer
Zitat:
Delphi-Quellcode:
dahinter.
+ ':D'
Delphi-Quellcode:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin FDQuery1.IndexFieldNames := Column.FieldName + ':D'; end; |
AW: Dbgrid Titel leer
Super! es geht! Und so was von einfach!
|
AW: Dbgrid Titel leer
leider wird nun die Sortierung nicht so schön durchgeführt.
Er zählt jetzt: 1, 10, 12,2, 20, etc. Gibt es einen Parameter für eine komplette Sortierung? 1,2,3,4,5,6, etc. Abcd... |
AW: Dbgrid Titel leer
Sag nicht, dass der FeldTyp sowas wie string ist.
Für eine Stringsortierung, ist das vollkommen richtig so. Willst du es numerisch sortiert haben, dann müsstes du z.B. einen Integer als Typen für den Vergleich haben. Aber da du nicht die nötigen Infos rausrückst, kann dir niemand genauer helfen. :zwinker: |
AW: Dbgrid Titel leer
Hmm..
Als kleiner Hinweis: Beim z.B. MS SQL-Server gibt es Collations welche bei VarChar Columns angegeben werden können (beim Create Table oder auch beim Select). Über diese Angabe wird der RecordSet (Datenmenge) sortiert zurück gegeben. Vielleicht ist hier nur eine ungünstige Einstellung gemacht worden.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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