Не знам за Delphi 2007, но направих същото с Delphi 7 и Oracle 8.
Ето неща, които направих:
- Задайте TAdoDataSet.CursorLocation според заявка:
- clUseClient ако заявката извлича записи за GUI и заявката е относително "проста" - без групиране или сума
- clUseServer ако заявката има някакъв вид агрегиране (сума, групиране, броене)
- Задайте TAdoDataSet.CursorType според заявка:
- ctForwardOnly за отчети, при които не е необходимо да превъртате назад през набора от данни - работи само с clUseServer
- ctStatic за GUI. Това е единственият режим, който работи с clUseClient
- Задайте TAdoDataSet.LockType според заявка:
- ltСамо за четене за всеки набор от данни, който не се използва за редактиране (решетки, отчети)
- Оптимистично когато записите се публикуват в базата данни непосредствено след промяната (напр. потребителски редактиращи данни във формуляра)
- ltBatchOptimistic когато промените голям брой записи. Това е за ситуации, в които извличате брой записи, след това извършвате някаква обработка върху тях и след това изпращате актуализации към базата данни в пакет. Това работи най-добре в комбинация с clUseClient и ctStatic.
- Според моя опит, доставчикът на Microsoft OLEDB за Oracle работи по-добре от доставчика на Oracle OleDb. Трябва да тествате това.
Редактиране: Проверете коментара на Фабрицио за възможни проблеми с петна. - Заменете TAdoQUery сTAdoDataSet . TAdoQuery е създаден за конвертиране на приложения от BDE в ADO, но препоръката на Borland/Codegear беше да се използва TAdoDataSet
- Проверете отново низа за връзка на Oracle, за да сте сигурни, че нямате мрежово забавяне. Колко време продължава да се свържете с Oracle? Колко време е TnsPing?