У нас есть приложение Visual C ++ 6, которое сохраняет данные в базе данных Access с использованием DAO. Классы базы данных были созданы с использованием ClassWizard, основываясь на CDaoRecordset
.
Нам нужно перейти с Access на SQL Server, потому что некоторые клиенты имеют огромные базы данных (1,5 ГБ +), на которых очень медленно запускаются отчеты (с использованием Crystal Reports и другого приложения).
Мы не слишком беспокоимся о производительности этого приложения VC ++ - оно загружает данные из регистраторов данных и помещает их в базу данных.
Я использовал «Microsoft SQL Server Migration Assistant 2008 for Access» для переноса моей базы данных из Access в SQL Server - затем он связал таблицы в исходной базе данных Access. Если я открою базу данных Access, то смогу просматривать данные в базе данных SQL Server.
Затем я попытался использовать эту базу данных с моим приложением и продолжаю сталкиваться с проблемами.
Я изменил все мои наборы записей на dbOpenDynaset
вместо dbOpenTable
. Я также изменил myrecordsetptr->open()
вызовы на myrecordsetptr->open(dbOpenDynaset, NULL, dbSeeChanges)
, чтобы не получать исключения.
Но ... Я застрял, получая исключение 3251 - «Операция не поддерживается для этого типа объекта» для одной из моих таблиц, когда я пытаюсь установить текущий индекс, используя myrecordsetptr->->SetCurrentIndex(_T("PrimaryKey"));
Есть ли какие-нибудь хитрости, чтобы заставить связанные таблицы работать без переписывания всего кода доступа к базе данных?
[ОБНОВЛЕНИЕ 17/7/09 - спасибо за советы - я изменю все ссылки Seek()
на FindFirst()
/ FindNext()
и обновлю их в зависимости от того, как я работаю]