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;