Есть задача: из БД (Jet 4.0, MS SQL, MySQL) перегнать данные в Postgre. В качестве интерфейса используется ADO.

Как работает:

В Postgre выполняется запрос "SELECT * from какая_то_таблица;", затем создается запись путём вызова Append, поля заполняются из аналогичной таблицы в другой БД путём копирования значений каждого из полей.

После этого вызывается Post и производится попытка чтения ключевого поля (serial) (нужно для корректной отработки связей в других копируемых таблицах).



Проблема:

Вместо порядкового номера записи в таблице возвращается 0.

При последующих чтениях значения ключа возвращаются нормально.

Вызов Update не помогает.





Каким образом можно решить проблему? Или воспользоваться универсальным каким-нибудь конвертером? БД не очень сложная, 9 таблиц.



Решение пришло оттуда, откуда его, собственно, никто не ждал: в классе ADOQuery есть свойство RecNo, которое как раз возвращает номер записи, определяемый в поле с модификатором PRIMARY KEY. Однако в документации честно предупреждают, что не все СУБД его могут поддерживать.



Current music: DJ Pimenov (PPK) - Lve in Moscow (April 2002)