Nevím o Delphi 2007, ale udělal jsem to samé s Delphi 7 a Oracle 8.
Zde jsou věci, které jsem udělal:
- Nastavte TAdoDataSet.CursorLocation podle dotazu:
- clUseClient pokud dotaz načte záznamy pro GUI a dotaz je relativně "jednoduchý" - žádné seskupování nebo součet
- clUseServer pokud dotaz má nějaký druh agregace (součet, seskupení, počítání)
- Nastavte TAdoDataSet.CursorType podle dotazu:
- ctForwardOnly pro sestavy, kde nepotřebujete procházet datovou sadou zpět – funguje pouze s clUseServer
- ctStatic pro GUI. Toto je pouze režim, který funguje s clUseClient
- Nastavte TAdoDataSet.LockType podle dotazu:
- ltReadOnly pro každou datovou sadu, která se nepoužívá k úpravám (mřížky, sestavy)
- ltOptimistický když jsou záznamy odesílány do databáze ihned po změně (např. uživatel editující data ve formuláři)
- ltBatchOptimistic při změně velkého počtu záznamů. To je pro situace, kdy načtete určitý počet záznamů, poté s nimi provedete nějaké zpracování a poté odešlete aktualizace do databáze v dávce. To funguje nejlépe v kombinaci s clUseClient a ctStatic.
- Podle mých zkušeností fungoval poskytovatel Microsoft OLEDB pro Oracle lépe než poskytovatel Oracle OleDb. Měl bys to otestovat.
Upravit: Zkontrolujte Fabriciův komentář o možných problémech s objekty blob. - Nahradit TAdoQUery pomocí TAdoDataSet . TAdoQuery byl vytvořen pro konverzi aplikací z BDE na ADO, ale doporučení Borland/Codegear bylo použít TAdoDataSet
- Znovu zkontrolujte připojovací řetězec Oracle, abyste se ujistili, že nemáte latenci sítě. Jak dlouho trvá připojení k Oracle? Jak dlouho trvá TnsPing?