Ao migrar dados do Access para o SQL Server, existem algumas opções disponíveis, dependendo da versão do Access que está sendo usada. Com o Access 2000, você tem a opção de vincular as tabelas usando ODBC ou utilizar o novo arquivo de projeto do Access (.adp) com OLE-DB. Para versões anteriores do Access, a única opção é vincular as tabelas usando ODBC.
Se você optar por vincular as tabelas usando ODBC, seu código Access-VBA permanecerá em DAO (Data Access Objects), mas precisará ser adaptado para as tabelas vinculadas. Por outro lado, se você decidir usar o arquivo de projeto do Access, seu código DAO precisará ser modificado para usar ADO (ActiveX Data Objects).
Ao adaptar o código DAO Access para usar tabelas vinculadas do SQL Server, existem algumas diferenças de sintaxe que precisam ser abordadas. A tabela a seguir descreve a sintaxe do Access que não funcionará com tabelas vinculadas do SQL Server e fornece as modificações necessárias:
Sintaxe do Access (para modificar) | SQL Server |
---|---|
dbOpenTable | dbOpenDynaset, dbOpenDynamic ou dbOpenSnapshot |
Método Seek | Use uma consulta SELECT com uma condição WHERE no método OpenRecordset |
Propriedade Updatable | Pode ter um valor diferente com uma tabela SQL Server e uma tabela Access. Verifique se o seu SQL Server tem uma chave primária ou um índice único para poder atualizar os dados. |
A adaptação do código DAO Access para ADO requer o entendimento das diferenças entre os dois modelos de objetos. As tabelas a seguir descrevem os objetos e coleções equivalentes em DAO e ADO:
DAO (para Jet) | ADO |
---|---|
DBEngine | N/A |
Errors | Errors |
Workspaces | N/A |
Databases | Connections |
Users | N/A |
Groups | N/A |
Containers | N/A |
QueryDefs | Commands |
Recordsets | Recordsets |
Relation | N/A |
TableDefs | N/A |
Fields | Fields |
Parameters | Parameters |
Documents | N/A |
No que diz respeito aos objetos de banco de dados e conexão, as seguintes modificações precisam ser feitas para transformá-los em conexões ADO:
DAO (para Jet) | ADO |
---|---|
Dim Db As Database | Dim Cn as New ADODB.Connection |
Set Db = DBEngine(0)(0) | Set Cn = Application.CurrentProject.Connection |
Set Db = OpenDatabase(Name, Options, ReadOnly, Connection) | Cn.Open ConnectionString, IDUser, Password, Options |
Os recordsets são a base para ler dados de uma tabela, uma visualização, uma consulta ou um procedimento armazenado. Embora os objetos tenham o mesmo nome em ADO e DAO, existem diferenças significativas. A tabela a seguir descreve as diferenças de código:
DAO (para Jet) | ADO |
---|---|
Dim Rs as Recordset | Dim Rs as New ADODB.Recordset |
Set Rs = Db.OpenRecordset(Source, Type, Option, Locking) | Rs.Open Source, Connection, Type, Locking, Option |
Source: Nome da Tabela | Source: Nome da Tabela e opção adCmdTable |
Type: dbOpenTable (padrão) | Type: opção adCmdTable |
Locking: dbReadOnly | Locking: adLockReadOnly (padrão) |
O uso de QueryDefs no Access permite a reexecução de consultas e o uso de parâmetros. O equivalente em ADO é o objeto Command. Veja como fazer a transição de QueryDefs para Commands:
DAO (para Jet) | ADO |
---|---|
Dim Qd As QueryDef | Dim Cm as New ADODB.Command |
Set Qd = Db.QueryDefs(“MyQuery”) | Cm.CommandText = “SQL Query ou Stored Procedure” |
No próximo artigo, forneceremos exemplos de transformações de código para acelerar sua migração e melhorar o desempenho do seu aplicativo.