Al ver la extensión DB parecen archivos paradox, en este caso, cuando se borra con delete, no se adelanta el puntero al registro activo, sino que decrece, por tanto, no debes usar
while not tabla.eof sino más bien
while not tabla.bof o incluso
while tabla.RecordCount>0
Otra forma más rapida sería con una consulta de borrado:
Código Delphi
[-]
const sqlBorrado = ' delete from %s where %s';
var Nombres :array[0..2] of string = ('NITEMTEX.DB','NITEMTER.DB','NITEMREP.DB');
var q:Tquery;
i:integer;
begin
q := Tquery.Create;
try
for i:= low(nombres) to high(nombres) do
begin
if q.Active then q.Close;
q.sql.Text := format(sqlBorrado,[Nombres[i], 'Nro_Orden= 32']);
showmessage(IntToStr(q.ExecSql) + ' Registros borrados de la tabla '+Nombres[i]);
end;
finally
FreeAndNil(q);
end;
Por supuesto, en el array de Nombres, las tablas irían puesta en orden inverso al que tú has redactado, precisamente para evitar el error de Master-Detail.
Sólo un detalle más, la variable Nombres no puede estar declarada en un procedimiento, ya que Delphi no deja inicializar variables en dicho lugar, debes ponerla como variable "global" del módulo.
Edito: Lo he escrito de memoria, si tienes algun problema comentalo.
Un saludo, y espero que todavía te sirva.