Hola
Me he tomado el atrevimiento de modificar tu función de la forma como yo la escribiría.
Código Delphi
[-]
function TDM.GenerarId(Campo, NombreTabla, Condicion: string): Integer;
begin
with Query1 do begin
Close;
SQL.Clear;
if Condicion <> '' then
SQL.Add('SELECT Max('+Campo+') AS MAXIMO FROM '+NombreTabla+
' WHERE '+Condicion)
else SQL.Add('SELECT Max('+Campo+') AS MAXIMO FROM '+NombreTabla);
Open;
if RecordCount = 0 then
Result := 1
else Result := Fields[0].Value + 1;
Close;
end;
end;
Yo te recomiendo que hagas un trace dentro de esa función, tal vez hay algo no está bien en las variables que estas pasando.
Salud OS
Edito: He cambiado dos nombres que podrian tener efectos secundarios. TableName y KeyField.