Não sei sobre o Delphi 2007, mas fiz a mesma coisa com o Delphi 7 e o Oracle 8.
Aqui estão as coisas que eu fiz:
- Definir TAdoDataSet.CursorLocation de acordo com a consulta:
- clUseClient se a consulta buscar registros para GUI e a consulta for relativamente "simples" - sem agrupamento ou soma
- clUseServer se a consulta tiver algum tipo de agregação (soma, agrupamento, contagem)
- Definir TAdoDataSet.CursorType de acordo com a consulta:
- ctForwardOnly para relatórios em que você não precisa rolar para trás no conjunto de dados - funciona apenas com clUseServer
- ctEstático para GUI. Este é o único modo que funciona com clUseClient
- Definir TAdoDataSet.LockType de acordo com a consulta:
- ltReadOnly para cada conjunto de dados que não é usado para edição (grades, relatórios)
- ltOtimista quando os registros são postados no banco de dados imediatamente após a alteração (por exemplo, usuário editando dados no formulário)
- ltBatchOptimistic quando você altera um grande número de registros. Isso é para situações em que você busca um número de registros, faz algum processamento neles e envia atualizações para o banco de dados em lote. Isso funciona melhor combinado com clUseClient e ctStatic.
- Na minha experiência, o provedor Microsoft OLEDB para Oracle funcionou melhor que o provedor Oracle OleDb. Você deveria testar isso.
Editar: Confira o comentário do Fabricio sobre possíveis problemas de blob. - Substituir TAdoQuery com TAdoDataSet . O TAdoQuery foi criado para conversão de aplicativos de BDE para ADO, mas a recomendação da Borland/Codegear era usar o TAdoDataSet
- Verifique novamente a string de conexão do Oracle para ter certeza de que você não tem latência de rede. Quanto tempo dura para se conectar ao Oracle? Quanto tempo dura o TnsPing?