El "While True", sólo lo utilizaría si es estrictamente necesario, y en este caso no lo es, creo que así te quedaría más claro, y evitarías tener que usar un break.
Código Delphi
[-]
while i < ListaPalabras.Count-1 do
begin
CodEqMzVal := Geo.RetornaCodigoEqMzVal(QGeoVarios,temp,Ciudad);
if CodEqMzVal <> '' then
begin
CodEqMzValOk := CodEqMzVal;
CodMzNivOk := Geo.RetornaNivelYNomMzVal(QGeoVarios,CodEqMzValOk,Ciudad,NomMzVal);
NivelOk := Geo.RetornaNivelMzNiv(QGeoVarios,CodMzNivOk,Ciudad,NombreNivel,SiTabla);
iok := i;
end;
i := i+1;
if i < ListaPalabras.Count-1 then
temp := temp + ' ' + ListaPalabras[i];
end;