Nie wiem o Delphi 2007, ale zrobiłem to samo z Delphi 7 i Oracle 8.
Oto rzeczy, które zrobiłem:
- Ustaw TAdoDataSet.CursorLocation zgodnie z zapytaniem:
- clUseClient jeśli zapytanie pobiera rekordy dla GUI, a zapytanie jest stosunkowo "proste" - bez grupowania lub sumowania
- clUseServer jeśli zapytanie ma jakąś agregację (suma, grupowanie, liczenie)
- Ustaw TAdoDataSet.CursorType zgodnie z zapytaniem:
- ctForwardOnly dla raportów, w których nie trzeba przewijać zestawu danych - działa tylko z clUseServer
- ctStatic dla GUI. To jest tylko tryb, który działa z clUseClient
- Ustaw TAdoDataSet.LockType zgodnie z zapytaniem:
- ltReadOnly dla każdego zbioru danych, który nie jest używany do edycji (siatki, raporty)
- ltOptymistyczny gdy rekordy są wysyłane do bazy danych natychmiast po zmianie (np. użytkownik edytujący dane w formularzu)
- ltBatchOptymistyczny gdy zmienisz dużą liczbę rekordów. Dotyczy to sytuacji, w których pobierasz liczbę rekordów, wykonujesz na nich pewne przetwarzanie, a następnie wysyłasz zbiorczo aktualizacje do bazy danych. Działa to najlepiej w połączeniu z clUseClient i ctStatic.
- Z mojego doświadczenia wynika, że dostawca Microsoft OLEDB dla Oracle działał lepiej niż dostawca Oracle OleDb. Powinieneś to przetestować.
Edytuj: Sprawdź komentarz Fabricio o możliwych problemach z blobami. - Zastąp TAdoQUEry z TAdoDataSet . TAdoQuery zostało stworzone do konwersji aplikacji z BDE do ADO, ale rekomendacją Borland/Codegear było użycie TAdoDataSet
- Ponownie sprawdź ciąg połączenia Oracle, aby upewnić się, że nie masz opóźnień w sieci. Jak długo trwa połączenie z Oracle? Jak długo trwa TnsPing?