Объясняю в чём был прикол:
1. В конце цикла должно быть тоже самое что и перед ним т.е.
curPos := PosFrom('estimation>', HTML, EndPos);
EndPos := PosFrom('</a>', HTML, curPos);
end;
2. Даже если заполняешь только Title, нужно передавать значения во все поля
AddConnection(Copy(HTML, curPos, EndPos - curPos), '', '', '', '');
3. Надо следить чтобы не получилось бесконечного цикла. Если бы было
curPos := PosFrom('estimation>', HTML, curPos) + Length('estimation>');
то в
while (curPos > 0) AND (curPos < PosFrom('</table>', HTML, EndPos)) do begin
curPos всегда будет > 0 и если </table> дальше не встречается, то цикл будет работать вечно.
По этому правильно вот так:
curPos := PosFrom('estimation>', HTML, curPos);
EndPos := PosFrom('</a>', HTML, curPos);
while (curPos > 0) AND (curPos < PosFrom('</table>', HTML, EndPos)) do begin
curPos := curPos + Length('estimation>');