Для начала попробуйте читать результат более правильно.
> -- Цитата:
> TYPE Table...rows: INTEGER	rows >= 0Количество строк, которые вернул самый последний запрос. Если фактический драйвер базы данных не может возвращать количество строк к запросу, rows устанавливается в MAX(INTEGER).
Прочитайте про значения table.res после выполнения Exec и Read. Вот приблизит. шаблон, который исп-т эти значения:
## Код:
```
table.Exec("SELECT * FROM table");
IF table.res # 0 THEN
  Log.String("При вып. запроса произошла ошибка")
ELSE  (* table.res = 0 *)
  row := 0; table.Read(row, data);  (* прочитать первую строку *)
  WHILE table.res IN {0, SqlDB.converted} DO
    (* Данные считались в data 1 к 1 или с преобразованиями типов *)
    (* Обработать данные в data *)
    INC(row); table.Read(row, data)  (* прочитать следующую строку *)
  END;
  (* ~(table.res IN (0, SqlDB.converted)) *)
  IF table.res = SqlDB.noData THEN
    (* строки в таблице-результате кончились, т.е. все прочиталось *)
  ELSE  (* table.res # SqlDB.noData *)
    Log.String("Возникла ошибка при считывании результата запроса")
  END
END
```
