RDS - Acesso a fonte de dados Remota usando Visual Basic


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:

  1. Remote Data Service Control - RDS
  2. JDBC Applet Control
  3. XML Data Source Control

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 :

  1. Usar o RDS para acessar os dados via Servidor usando um componente do próprio RDS
  2. Criar os seus próprios componentes e fazê-los funcionar com o RDS

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