Código:
w_maximo : Integer;
Query1.SQL.Clear;
Query1.SQL.Add('select max(id_planti) from planti_corr');
Query1.Open;
w_maximo := query1.RecordCount + 1;
Query1.Close;
No sé qué estás haciendo, pero en este select, w_maximo siempre
valdrá 2.
Independientemente de lo que haga el select, al ser un "max",
devuelve un registro con el valor max de id_planti.
Luego le sumas 1 a recordcount y recordcount siempre es 1, un
registro.