Migração Access / SQL Server . Prepare-se.


Para uns vai demorar mais para outros demorar menos , mas , em se tratando de aplicações comerciais o ambiente cliente/servidor está cada vez mais próximo da realidade de muitas empresas. Não é a toa que a Microsoft vem reduzindo a cada dia a distância que separa o Access do SQL Server . O Access 2000 trouxe ferramentas que tornam a migração Access - SQL Server menos traumática.

Ao migrar seus dados do Access para o SQL Server,  com o Access 2000 você tem duas opções . Nas versões anteriores só lhe restava uma opção - usar ODBC para vincular as tabelas do SQL Server ao seu banco de dados Access. Com o Access 2000 , além da solução já citada você pode tirar proveito do Access Project (.adp) usando OLE DB. Enquanto que na primeira opção o código VBA permanece no formato DAO necessitando uma adaptação  na segunda opção você precisa modificar o código para o formato ADO.

O Access Project (.adp)

Vamos falar um pouco sobre este novo personagem ou melhor vamos passar a palavra para a Microsoft :

"Um projeto do Microsoft Access (.adp) é um novo tipo de arquivo do Access que fornece acesso eficaz e em modo nativo a um banco de dados do Microsoft SQL Server através da arquitetura de componente OLE DB. Utilizando um projeto do Access, você pode criar um aplicativo cliente/servidor tão facilmente quanto um aplicativo de servidor de arquivos. Esse aplicativo cliente/servidor pode ser uma solução tradicional baseada em formulários e relatórios, uma solução baseada na Web usando páginas de acesso a dados ou uma combinação das duas."

Trabalhar com um projeto do Access é muito semelhante a trabalhar com um banco de dados do Access. O processo de criação de formulários, relatórios, páginas de acesso a dados, macros e módulos é praticamente o mesmo usado para criar um banco de dados do Access.

Uma vez que você se conecta a um banco de dados do SQL Server, pode exibir, criar, modificar e excluir tabelas, modos de exibição, procedimentos armazenados e diagramas de banco de dados usando o Microsoft SQL Server Design Tools, as mesmas ferramentas de estrutura usadas no Microsoft Visual Interdev e no Microsoft Visual Basic. Embora a interface de usuário para trabalhar com esses objetos de banco de dados seja diferente dos objetos de banco de dados equivalentes no banco de dados do Access, ela também é bastante amigável. Um projeto do Access também contém vários dos assistentes de um banco de dados do Access como, por exemplo, o Assistente de formulário, o Assistente de relatório e o Assistente de página, que você pode usar para criar com rapidez um protótipo ou aplicativo simples.

As suas principais características são:

O que é o MSDE?

Ainda com a palavra a Microsoft:

MSDE é uma nova tecnologia que fornece armazenamento de dados local compatível com o Microsoft SQL Server 7.0. Você também pode usar o MSDE como uma solução de armazenamento de dados remota. Pense no MSDE como um mecanismo de dados cliente/servidor alternativo ao mecanismo de banco de dados do Microsoft Jet do servidor de arquivos. O MSDE é executado no Microsoft Windows NT 4.0 ou posterior e no Windows 95 ou posterior. É estruturado e otimizado para uso em sistemas computacionais menores como, por exemplo, um computador de usuário único ou um servidor de grupo de trabalho pequeno.

Uma vez que o MSDE se baseia no mesmo mecanismo de dados do SQL Server, a maioria dos projetos do Microsoft Access ou dos aplicativos cliente/servidor é executada em versões inalteradas. Entretanto, diferente do SQL Server 7.0, o MSDE possui um limite de tamanho de banco de dados de 2 gigabytes, não oferece suporte Symmetrical Multiprocessing (SMP) no Windows 95 ou posterior, e, quando usa replicação Transacional, não pode ser um editor de replicação (embora possa agir como um assinante de replicação).

Adaptando o código DAO para usar com tabelas vinculadas do SQL Server

A seguir temos a sintaxe usada no Access e que precisa ser modificada para funcionar com as tabelas vinculadas no SQL Server:

Access (sintaxe a modificar)

SQL Server

dbOpenTable

dbOpenDynaset, dbOpenDynamic ou dbOpenSnapshot

Seek, method

Use uma consulta SELECT com uma condição WHERE no método  OpenRecordset

Updatable, property

Verifique se o seu SQL Server possui uma chave primária ou índice único para estar apto a atualizar os dados.

Adaptando o código DAO para o ADO.

O modelo do objeto DAO é diferente do modelo do objeto ADO . Vejamos a seguir a equivalência , quando existir,  entre os objetos e coleções dos dois modelos :

DAO ( 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

Banco de dados e Conexão

A seguir as modificações que você deve realizar nos objetos de referência a banco de dados para transformá-los em conexões ADO.

DAO  (Jet)

ADO

Dim Db As Database

Dim Cn as New ADODB.Connection

-Set Db = DBEngine(0)(0)
-Set Db = OpenDatabase(Name, Options, ReadOnly, Connection)

-Set cn = Application.CurrentProject.Connection
-Cn.Open ConnectionString, IDUser, Password, Options

O objeto Recordset

Os recordsets são fundamentais para acessar dados de uma tabela, uma visão , uma consulta ou um procedimento armazenado. O comportamento deste objeto é muito diferente quando usado via DAO se comparado com a ADO. Vejamos a seguir as diferenças de código existentes: (Lembre-se que os valores padrões para abertura de um recordset são muito diferentes entre a DAO e ADO )

DAO (for 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 :
Table Name
Query Name
SQL query
Proc. Name and dbSQLPassThrough option

Source :
Table Name and adCmdTable option
View Name and adCmdTable option
SQL Query
Stored Procedure Name

Type :
dbOpenTable (default)
dbOpenDynaset
dbOpenSnapshot
dbOpenForwardOnly
N/A

Type :
adCmdTable option
adOpenKeySet
adOpenStatic
adOpenForwardOnly (default)
adOpenDynamic

Locking :
dbReadOnly
dbPessimistic (default)
dbOptimistic
N/A

Locking :
adLockReadOnly (default)
adLockPessimistic
adLockOptimistic
adLockBatchOptimistic

Opções :
dbAppendOnly
dbSQLPassThrough
dbSeeChanges
dbDenyWrite
dbDenyRead
dbForwardOnly
dbReadOnly
dbInconsistent
dbConsistent
Type different than dbOpenTable
dbOpenTable Type
dbOpenTable Type
dbSQLPassThrough with Stored Proc.
N/A
N/A
N/A
N/A
N/A

Opções:
N/A
by default with SQL Pass Through
N/A
Connection object mode to adModeShareDenyWrite
Connection object mode to adModeShareDenyRead
adForwardOnly Type
Connection object mode to adModeRead
N/A
N/A
adCmdText
adCmdTable
adCmdTableDirect
adCmdStoredProc
adCmdUnknown
adCmdFile
adAsyncExecute
adAsyncFetch
adAsyncFetchNonBlocking

Propriedades:
AbsolutePosition
BOF, EOF
Bookmark
Bookmarkable
DateCreated, DateUpdated
Filter
Index
LastModified
LockEdits
Name
NoMatch
PercentPosition
RecordCount
Restartable
Sort
Transactions
Type
Updatable
ValidationRule
ValidationText

Propriedades:
AbsolutePosition
BOF, EOF
Bookmark
ADO Recordset are always Bookmarkable
N/A
Filter
Index
N/A
LockType
N/A
EOF
To calculate (AbsolutePosition/RecordCount)
RecordCount
ADO Recordset are always Restartable
Sort
Transactions Property of Connection Object
CursorType
Updatable Property of Connection Object
N/A
N/A

Métodos:
AddNew
Cancel
CancelUpdate
Clone
Close
CopyQueryDef
Delete
Edit
FindFirst, FindLast, FindNext, FindPreviou
GetRows
Move
MoveFirst, MoveLast, FindNext, FindPrevious
NextRecordset
OpenRecordset
Requery
Seek
Update

Métodos :
AddNew
Cancel
CancelUpdate
Clone
Set Rs = Nothing
N/A
Delete
A Recordset é atualizável se a conexão permitir
Seek with option (adSeekFirstEQ, adSeekLastEQ...)
N/A
Move
MoveFirst, MoveLast, FindNext, FindPrevious
NextRecordset
Open
Requery, Resync
Seek
Update

Os objetos Command e QueryDef

Enquanto a DAO utiliza o objeto QueryDefs a ADO usa o objeto Command. Vejamos a seguir como adaptar o código para estes casos;

DAO (for Jet)

ADO

Dim Qd As QueryDef

Dim Cm as New ADODB.Command

Set Qd = Db.QueryDefs("MyQuery")

Cm.CommandText = "SQL Query or Stored Procedure"

Propriedade:
Connect
DateCreated, DateUpdated
LogMessages
Name
RecordsAffected
Replicable
ReturnsRecord
SQL
Type
Updatable

Propriedade:
ActiveConnection
N/A
N/A
Name
N/A
N/A
Some values of CommandType
CommandText
CommandType
Updatable Property of Connection Object

Método :
Cancel
Close
CreateProperty
Execute
OpenRecordset

Método :
Cancel
Set Cm = Nothing
N/A
Execute
Open Method of a Recordset Object

Dim Pa as Parameter

Dim Pa as New ADODB.Parameter

Qd.Parameters(Name) = value

Set Pa = Cm.CreateParameter (Name, Type, Direction)
Pa.Value = value

Ou

Cm.Parameters.Refresh
Cm.Parameters(1).Value = value

Property:
Direction
Name
Type
Value

Property:
Direction
Name
Type
Value

Diferenças Estruturais de dados

Os arquivos de banco de dados do access 97/2000 possuem seis tipos de objetos: tabelas, consultas, formulários, relatórios, macros e módulos. ( O Access 2000 possui o objeto Páginas ). Um banco de dados  SQL Server possui : tabelas,  visões (View) , procedimentos armazenados (stored procedure), defaults, rules e tipos definidos pelo  usuário. Abaixo uma tabela comparativa da equivalência entre os objetos dos dois banco de dados:

Access

SQL Server

Table

Table

Index

Index

Query

View ou Stored Procedure

Form, Report

N/A

Macro, Module

Stored Procedure

N/A

Trigger

N/A

Default, Rules

Tabelas - Access e SQL Server

Ao utilizar o Assistente de Migração para migrar as tabelas do Access para o SQL Server ocorrem algumas alterações. Para compreendê-las você precisa ententer as diferenças entre as tabelas nos dois ambientes. Vejamos a seguir estas diferenças

Structures

Access

SQL Server

Field name

From 1 to 64 characters

From 1 to 128 characters

 

Characters . ! ` [ and ] não são permitidos

Todos os caracteres Unicode sao permitidos

Data Types

Text

Varchar, nvarchar

 

Memo

Text, ntext

 

Byte

Tinyint

 

Integer

Smallint

 

Long Integer

Int

 

Simple

Real

 

Double

Float

 

Replication ID

Varbinary, uniqueidentifier

 

Decimal

Numeric, decimal

 

Date/Time

Datetime, smalldatetime

 

Money

Money

 

AutoNumber

Int (Identity)

 

Yes/No

Bit

 

OLE Object

Image

 

Hyperlink

Text, ntext

Description

Standard in the table structure

With Microsoft Repository

Field properties

Field Size

Length

 

Format

CHECK constraint, RULE

 

Input Mask

N/A

 

Caption

N/A

 

Default value

DEFAULT Constraint, DEFAULT

 

Validation Rule

CHECK constraint, RULE

 

Validation Text

N/A

 

Required

Allow Nulls

 

Allow Zero Length

CHECK constraint, RULE

 

Indexed

Creating an index

 

Unicode Compression

N/A

 

Decimal places

N/A

 

Precision

Precision

 

Scale

Scale

 

N/A

Identity Seed

 

N/A

Identity Increment

Relations

Apply Referential Integrity

FOREIGN KEY constraint

 

Cascading update

Trigger (or SQL 2000)

 

Cascading delete

Trigger (or SQL 2000)

 

Graphical relationships

Database diagram

Consultas

Embora o assistente de migração do Access 2000 tente transformar as consultas em Visões ou Procedimentos armazenados quando você migra para um arquivo de projeto do Microsoft Access (.adp) As consultas permanecem inalteradas. Vejamos a seguir a correspondência no SQL Server das consultas do Access:

Access

SQL Server

Select query without parameter

View or stored procedure

Select query with parameter

Stored procedure

Crosstable query

View

Update query

Stored procedure

Insert query

Stored procedure

Delete query

Stored procedure

Create table query

Stored procedure

Union query

View

SQL Pass-through query

View or Stored procedure

DDL query

Stored procedure

O grande problema na migração das consultas é devido as funções VBA usadas. Uma função VBA não pode ser usada em consultas do SQL Server. Se uma função VBA for utilizada em um Select você deve deixá-la no Access. Se a função VBA for usada em uma cláusula Where você deverá transformá-la em Transact-SQL.

Hasta la vista , ...;-)


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti