Есть задача: из БД (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)