ich würde jetzt nicht unbedingt die Breite ermitteln, sondern nur eine maximale Breite setzen...
Code:
// Im AfterOpen der
Query, Table, ...
procedure TForm1.DatenbankomponentennameAfterOpen(DataSet: TDataSet);
var
LColumn: TColumn;
begin
for LColumn in DBGrid1.Columns do
LColumn.Width := min(LColumn.Width, 30);
end;