Tenho recebido muitos emails solicitando informações de como fazer uma conexão a um banco de dados na internet usando uma aplicação Visual Basic. Não se trata aqui de usar ASP e ADO , mas sim criar uma aplicação VB que a partir de uma máquina local(Cliente) acesse um banco de dados que esta em outra máquina(servidor) usando o protocolo HTTP.
Vou tentar esclarecer a questão de forma simples e objetiva usando a implementação mais simples possível.
A maneira mais simples de implementar o Acesso Remoto aos Dados no cliente ( computador local) é usar um Data Source Object ( DSO ) especificamente criado para realizar esta tarefa. Temos diversas opções dentre as quais mencionamos:
Vamos nos ater a primeira opção mencionada : Remote Data Service - RDS.
O RDS é construido para um ambiente em que um aplicativo cliente solicita a um objeto que esta no servidor que retorne os dados desejados.
Podemos usar o RDS de duas formas :
Como funciona a tecnologia RDS ?
Funciona assim:
O RDS permite acessar um recordset remoto usando a ADO via HTTP , HTTPS ou DCOM de um computador cliente(local) . Se você for usar o protocolo HTTP/HTTPS o servidor deverá estar rodando o IIS ( Internet Information Server ) ou o PWS ( Personal Web Server ) . Nos demais casos o servidor deverá ter instalado os componentes RDS. O computador Cliente também precisa dos componentes RDS e a aplicação que gerencia todo o serviço pode ser escrita em Visual Basic , Java , VBA , VBScript , etc ( tem que suportar a manipulação de objetos COM ).
Esquematizando temos:
Esquema de um ambiente onde usamos o RDS | Fluxo de dados usando o RDS |
Usando o RDS em um programa Visual Basic
A coisa é mais simples do que parece , no entanto você deve ter certeza do seguinte:
Com todos os dados acimas conhecidos a coisa fica simples. Quer ver ??? Espie o código a seguir onde realizamos uma conexão com o banco de dados pubs do SQL Server 2000, tabela Authors .
Para realizar esta exemplo foi criado o DSN pubs. ( veja como criar o dsn neste link : Criando um DSN - Data Source Name ). O nome do servidor usado foi http://macoratti. (Você deve ajustar os dados conforme o seu caso)
1- Inicie um novo projeto no Visual Basic e no formulário padrão insira um botão de comando - Conexão RDS.
2- A seguir na seção General declarations do projeto insira o seguinte código para declarar as variáveis objeto usadas
Dim rs As Object 'Recordset Dim ds As Object 'RDS.DataSpace Dim df As Object 'RDSServer.DataFactory |
3- No evento Load do formulário padrão escreva o código para criar o objeto RDS
Private Sub Form_Load() Set ds = CreateObject("RDS.DataSpace") Set df = ds.CreateObject("RDSServer.DataFactory", "http://macorati") End Sub |
4- Agora no evento click do botão de comando inclua o código para acessar base de dados usando o dsn pubs:
Private Sub Command1_Click() 'retorna um recordset via HTTP. Dim strCn As Variant, strSQL As Variant strCn = "dsn=pubs;uid=sa;pwd=;" strSQL = "select * from authors" Set rs = df.Query(strCn, strSQL) Debug.Print rs(0) 'imprime na janela de depuração a linha o codigo do autor End Sub |
Simples não é mesmo !!!! Qualquer variação que ocorrer deverá ser na strings de seleção de dados e no dsn que você vai usar.
Vantagens e Desvantagens do RDS
Vantagens :
Desvantagens:
Pese tudo isto na balança e decida se vale ou não a pena usar o RDS para uma situação específica.
Usando RDS com ADO
O RDS está intimamente integrado com a ADO ( ActiveX Data Object) e está incluindo no MDAC - Microsoft Data Access Components.
Para obter o RDS Datafactory em um servidor HTTP usando ADO você não precisa usar o código RDS específico. Pode utilizar o provedor MS Remote para se conectar a uma base de dados remota. Basta você usar o método open com a string de conexão usando o provedor citado.
Abaixo temos algumas strings de conexão para as principais base de dados usadas atualmente:
Provider=MS Remote;Remote Provider=SQLOLEDB;Data Source=your_SQL_Server;Remote Server=http://seu_servidor;Initial Catalog=seu_banco_de_Dados;User Id=user_id;Password=password;
Provider=MS Remote;Remote Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\caminho_do_seu_MDB;Remote Server=http://seu_servidor
Provider=MS Remote;Remote Provider=MSDAORA;Data Source=your_Oracle_server;Remote Server=http://seu_servidor;User Id=user_id;Password=password
Vamos mostrar o código exemplo de como usar ADO para realizar uma conexão remota com o banco de dados pubs do SQL Server 2000 , tabela Authors usando o provedor MS Remote.
1- Inicie um novo projeto no VB e no formulário padrão insira um botão de comando - command1
2- Insira o controle MSFlexGrid - MSFlexGrid1 - no seu projeto para exibir os dados.
2- No evento click insira o codigo abaixo que irá se conectar com o banco de dados pubs , tabela authors do sql server 2000 via servidor http://macorati
Private Sub Command3_Click() Dim rs As New ADODB.Recordset strcon = "Provider=MS Remote;Remote Provider=SQLOLEDB;Data Source=MACORATI\MACORATTI;" _ & "Remote Server=http://macorati;Initial Catalog=pubs;User Id=sa;Password=;" rs.Open "Select * from Authors", strcon While Not rs.EOF MSFlexGrid1.AddItem rs(0) & vbTab & rs(1) rs.MoveNext Wend End Sub |
outro código , agora usando VBA para a mesma conexão :
Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Open "Provider=MS Remote;Remote Provider=MSDASQL;" & _ "Remote Server=http://macorati;" & _ "DSN=pubs;UID=sa;PWD=;" rs.CursorLocation = adUseClient rs.Open "SELECT * FROM Authors", cn |
Para que o 'complexo' código acima funcione a contento devemos ter o servidor configurado assim:
- O IIS rodando na porta 80
- O diretório virtual deve ter permissão de script e execução
- O diretorio program files\commom\system\msadc
precisa dar permissão de leitura para o usuário IIS.
- O diretorio virtual não deve filtrar IP's .
Obs: A
tecnologia SOAP veio
substituir com vantagens o RDS. Aguarde artigo sobre o protocolo
SOAP.
Leia também os artigos :
E até mais ver...
José Carlos Macoratti