Kürzer (jedoch ungetestet)
Code: Alles auswählen
procedure TFPlz.Grid1TitleClick(Column: TColumn);
begin
    if dmplz.sqlPlz.State = dsbrowse then begin       
    	dmplz.sqlPlz.SortedFields := grid1.Columns.Items[column.Index].FieldName;
	If dmplz.sqlPlz.SortType = stDescending Then dmplz.sqlPlz.SortType := stAscending Else dmplz.sqlPlz.SortType := stDescending;
        dmplz.sqlPlz.First;
    end;
end;    
Erklärung: Deine zwei geschachtelten Case Of sind überflüssig.
In deinem äusseren Case Of prüfst du ob der Wert in SortedField derselbe ist wie der Feldname der Spalte. Wozu?
Im inneren Case Of setzt du nämlich jedesmal SortedField auf den Feldnamen der geclickten Spalte, egal in welchem Ast der Case Of's du bist
Bedeutet: 
dmplz.sqlPlz.SortedFields := grid1.Columns.Items[column.Index].FieldName; 
wird IMMER ausgeführt.
Dasselbe für die Umkehrung von SortType.
Bin mir nicht einmal sicher, ob der Code das macht, was du willst.
Du hast auf zweite Spalte geclickt, und sortierst aufsteigend. Du clickst nochmal drauf, und es sortiert absteigend.
Du clickst auf Spalte 4, und es sortiert AUFSTEIGEND, weil der letzte SortType absteigend war.
Denk nochmal darüber nach ob es das ist was du willst.
Könnte mir vorstellen, dass immer wenn zum ersten Mal auf eine Spalte geclickt wird, IMMER aufsteigend sortiert werden soll, egal welcher SortType vorher war.
EDIT: Und im Vergleich zum ersten Post setzt du jetzt im letzten Versuch nirgends das Tag (falls du das überhaupt brauchst).
Weil wenn ich deinen ersten Post lese, ist es eigentlich genau das, was ich oben im letzten Satz gemeint habe
Code: Alles auswählen
procedure TFPlz.Grid1TitleClick(Column: TColumn);
begin
    if dmplz.sqlPlz.State = dsbrowse then begin       
    	dmplz.sqlPlz.SortedFields := grid1.Columns.Items[column.Index].FieldName;
	if grid1.Columns.Items[column.Index].Tag=0 then begin
           dmplz.sqlPlz.SortType:=stDescending; 
           grid1.Columns.Items[column.Index].Tag:=1;           
     	end
     	else begin
           dmplz.sqlPlz.SortType:=stAscending; 
           grid1.Columns.Items[column.Index].Tag:=0;           
     	end;        
	dmplz.sqlPlz.First;
    end;
end;    
Könnte man wahrscheinlich noch weiter abkürzen mit einem
grid1.Columns.Items[column.Index].Tag:=BoolToInt(Not IntToBool(Integer(dmplz.sqlPlz.SortType))); (oder so ähnlich. Spinne nur gerade etwas herum)
so dass man nur das setzen des SortType innerhalb des If-Then-Else hat