Nessa semana tive a oportunidade de migrar uns sistemas que utilizavam o SQL Direct 2.x para a versão 4.x.
Só para deixar registrado, segue abaixo uma lista de “problemas” que encontrei:
- Propriedade Preservation
A propriedade Preservation foi removida dos componentes TSDQuery. Desta forma, os DFMs que declaravam ela tiverem que ser atualizados. Bastou abrir o form e o Delphi já identificou o erro exibindo a seguinte mensagem:

Como pode ser visto, basta clicar em Ignore para que o próprio Delphi remova as referências à propriedade Preservation;
- UpdateObject
Muitas rotinas de acesso ao banco de dados faziam o seguinte:
1 ordensServico.First;
2 while (not(ordensServico.Eof)) do
3 begin
4 if (...) then
5 ordensServico.Delete
6 else
7 ordensServico.Next;
8 end;
Depois da atualização, para utilizar o Delete precisei definir a propriedade UpdateObject da TSDQuery, caso contrário o seguinte problema ocorria:
Já que toda a criação de queries passa por uma rotina de uma classe base, a alteração foi simples:
1 class procedure TFuncoesClass.CriaQuery(var query: TSDQuery;
2 dataBase: TSDDatabase; useUpdateSQL: boolean);
3 begin
4 query := TSDQuery.Create(nil);
5 query.DatabaseName := dataBase.DatabaseName;
6 query.SessionName := dataBase.Session.SessionName;
7
8 if (useUpdateSQL) then
9 query.UpdateObject := TSDUpdateSQL.Create(nil);
10
11 query.Close;
12 query.SQL.Clear;
13 end;
A rotina antiga não tinha o parâmetro useUpdateSQL e, conseqüentemente, as linhas 8 e 9 também não.
Uma observação interessante a ser feita é que não é necessário definir nenhum comando SQL para o objeto TSDUpdateSQL. O simples fato de atribuí-lo à query já resolve o problema.
- Método TDBSession.GetTableFieldNames
O método GetTableFieldNames da classe TDBSession teve seu nome alterado para GetFieldNames. Isso gerou um erro de compilação. No entanto, foi corrigido facilmente, pois os parâmetros continuam os mesmos.
Concluindo, a atualização para a versão 4.x foi razoavelmente simples. Em 1 dia os sistemas já estavam rodando e executando todas as funções sem problema algum.
É isso aí! T+