RDS - Usando o Remote Data Services do ADO


RDS - Remote Data Services ( Serviços de dados Remotos) é uma tecnologia Microsoft para acesso a dados remotos que permite criar aplicações para banco de dados na Internet. Ë através do RDS que podemos obter conjuntos de registros ADO a partir de um servidor Web via HTTP.

Fluxo RDS

A tecnologia RDS é usada para trazer recordsets ADO desconectados de um servidor Web para visualização em um Navegador - Internet Explorer . A partir do momento que o recordset ADO desconectado estiver no "Cache" da máquina do cliente ,  podemos criar , atualizar e excluir dados neste recordset, sendo que todas as alterações serão "bufferizadas" localmente na máquina do cliente. A seguir podemos submeter o recordset ADO desconectado de volta ao Servidor Web para verificação e , se for o caso , armazenar as informações passadas no banco de dados através de comandos SQL.

Para transportar o recordset ADO desconecado do cliente para o servidor podemos usar o protocolo HTTP/HTTPS ou o protocolo DCOM. Você informa ao RDS qual protocolo usar através da configuração da propriedade nome do servidor do RSD Data Control ou do RDS Data Space. Se voce informar como nome do servidor (server name) "http://NomedoServidorWeb" , o RDS utilizará o protocolo HTTP. Se você definir o nome do servidor como "NomedoServidorWeb" o RSD utilizará o protocolo DCOM. 

Usando o RSD DataControl 

Você poderá recuperar um objeto Recordset ADO na Internet usando o objeto RDS DataControl ; ele tem a capacidade de retornar os objetos Recordsets ADO desconectados para qualquer cliente HTTP. A forma mais simples de fazer isto é executar uma consulta a partir de um servidor WEB usando o objeto RDS DataControl. Vamos ao trabalho:

  1. Crie um novo projeto no VB ( standard EXE ).
  2. Faça a referência ao RDS e a ADO  no menu Project References.
  3. Insira no formulário padrão uma caixa de texto um botão de comando e um controle listbox como abaixo:
  1. A seguir insira o seguinte código no formulário:
Option Explicit

Private rdc As RDS.DataControl

Private Sub CmdObter_Click()

Screen.MousePointer = vbHourglass

Set rdc = New RDS.DataControl

rdc.SQL = "select * from tblCustomer where state = 'IN'"
rdc.ExecuteOptions = adcExecAsync
rdc.Connect = "DSN=teste_rdc;"
rdc.Server = "http://macorati/"
rdc.Refresh


While rdc.ReadyState = adcReadyStateLoaded
'ocupado
  DoEvents
Wend

Do Until rdc.Recordset.EOF
  With rdc.Recordset
      list1.AddItem .Fields("FirstName") & " " & .Fields("LastName")
     .MoveNext
  End With
Loop

Set rdc = Nothing

Screen.MousePointer = vbNormal

End Sub

Aqui estamos nos conectando ao banco de dados Biblio_97.mdb - tabela Publishers - ( uma cópia do arquivo biblio.mdb) via DSN(clique no link para ler o artigo a respeito)  (criado previamente em minha máquina. ( Voce pode alterar esses valores a vontade)

O nome do servidor - você deve ter pelo menos o Personal Web Server instalado - é o nome do seu servidor definido durante a instalação.

RDS - Data Control e ASP

Podemos usar o RDS Data Control para vincular o resultado de consultas a um ou mais controles visuais ( grid, textbox , combobox , etc...) . Antes devemos esclarecer alguns detalhes, vamos a eles...

Para incorporar um controle ActiveX dentro de uma página Web, precisamos usar o conjunto de tags <OBJECT> ... </OBJECT>. O que vai identificar o objeto ActiveX é o seu CLASSID alfanumérico - um nome longo e dificílimo de memorizar .

 Uma ferramenta da Microsoft que facilita a copia do nome CLASSID é a ACTIVEX CONTROL LISTER FOR HTML que exibe todos os controles registrados em sua máquina. Para obter o código HTML que irá inserir o controle clique com o botão direito do mouse sobre o controle e selecione copiar e a seguir cole o conteúdo da área de transferência no código fonte HTML.

A seguir temos um exemplo do código fonte gerado para o controle Label do VB.

<OBJECT
ID="Label Object"
CLASSID="CLSID:99B42120-6EC7-11CF-A6C7-00AA00A47DD2"
WIDTH=80
HEIGHT=30>
</OBJECT>

Lindo !!! nào é mesmo ???

O CLASSID identifica exclusivamente um objeto. Existe ainda um parâmetro adicional chamado CODEBASE que indica onde no servidor a classe pode ser encontrada se não estiver registrada localmente.

Quando o navegador encontra a referência do controle ActiveX , ele usa o CLASSID para verificar o registro da máquina local e checar se o controle esta registrado localmente. 

Voltando ao RDS , para criar uma instância de um controle em ASP , podemos usar a seguinte tag OBJECT:

OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID=ADC>

<PARAM NAME="SQL" VALUE="Select * from Authors">

<PARAM NAME="SERVER" VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">

<PARAM NAME="CONNECT" VALUE="DSN=Teste;UID=;PWD=;">

</OBJECT>

Aqui o RDS Data Control(identificado pela classid) utiliza um RDS Data Factory para obter um Recordset ADO desconectado com base em um comando SQL. (Ao usar o RDS Data Control , tanto o RDS Data Factory como o RDS Data Space são criados automaticamente).

Vejamos os parâmetros associados com a tag <OBJECT>

Parâmetro Descrição
CLASSID Um número de 128 bits que identifica o tipo de objeto embutido ao sistema.Este identificador é mantido no registro da máquina local .
CODEBASE Define a localização do arquivo do objeto que esta sendo chamado se ele não estiver na máquina cliente.
ID Defines a document-wide identifier for the embedded object.
DATASRC Identifica a fonte de dados usada para se conectar ao controle.
WIDTH and HEIGHT Determina as dimensões do controle em pixels

Obtendo o RDS  e usando o RDS Data Control com ASP

O RDS faz parte do Microsoft’s Data Access Components (MDAC). Você pode conseguir a última versão no site da Microsoft em : http://www.microsoft.com/data

A maneira mais fácil de usar o RDS é usar um RDS Data Control. Vejamos abaixo um código que mostra como usar o RDS Data Control que obtém os dados da tabela Authors do banco de dados Biblio.mdb e os exibe em um controle vinculado - Um grid da Sheridan.

<%@ LANGUAGE="VBSCRIPT" %>

<HTML>

<HEAD>

<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">

<TITLE>Exemplo de uso do RDS Data Control</TITLE>

</HEAD>

<BODY>

<!-- RDS.Data Control -->

<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"

ID=ADC HEIGHT=1 WIDTH=1>

</OBJECT>

<strong>Usando o RDS Data Control</strong>

<P>

<!-- Controle Grid da Sheridan -->

<OBJECT CLASSID="CLSID:AC05DC80-7DF1-11d0-839E-00A024A94B3A"

CODEBASE="http://<%=Request.ServerVariables("SERVER_NAME")%>/MSADC/Samples/ssdatb32.cab"

ID="GRID"

DATASRC="#ADC"

WIDTH=750 HEIGHT=200>

<PARAM NAME="AllowAddNew" VALUE="TRUE">

<PARAM NAME="AllowUpdate" VALUE="TRUE">

<PARAM NAME="AllowDelete" VALUE="TRUE">

<PARAM NAME="ForeColorEven" VALUE="0">

<PARAM NAME="BackColorOdd" VALUE="-2147483643">

<PARAM NAME="BackColor" VALUE="-2147483643">

</OBJECT>

</P>

<INPUT TYPE=BUTTON NAME="LoadAll" VALUE="Carregar Todos">

<INPUT TYPE=BUTTON NAME="Cancel" VALUE="Cancelar">

<INPUT TYPE=BUTTON NAME="Save" VALUE="Salvar">

<BR><BR>

<INPUT TYPE=BUTTON NAME="MoveFirst" VALUE="Primeiro">

<INPUT TYPE=BUTTON NAME="MovePrev" VALUE="Anterior">

<INPUT TYPE=BUTTON NAME="MoveNext" VALUE="Proximo">

<INPUT TYPE=BUTTON NAME="MoveLast" VALUE="Último">

<SCRIPT LANGUAGE="VBScript">

SUB LoadAll_OnClick

ADC.Server = "http://<%=Request.ServerVariables("SERVER_NAME")%>"

ADC.Connect = "DSN=biblio;uid=;pwd=;"

ADC.SQL = "Select * from Authors"

ADC.Refresh

Grid.Rebind

End Sub


SUB MoveFirst_OnClick

On Error Resume Next

ADC.Recordset.MoveFirst

END SUB


SUB MoveNext_OnClick

On Error Resume Next

ADC.Recordset.MoveNext

IF ERR.Number <> 0 THEN

ADC.Recordset.MoveLast

END IF

END SUB


SUB MovePrev_OnClick

On Error Resume Next

ADC.Recordset.MovePrevious

IF ERR.Number <> 0 THEN

ADC.Recordset.MoveFirst

END IF

END SUB


SUB MoveLast_OnClick

On Error Resume Next

ADC.Recordset.MoveLast

END SUB


SUB Save_OnClick

ADC.SubmitChanges

ADC.Refresh

Grid.Rebind

End Sub


SUB Cancel_OnClick

ADC.CancelUpdate

ADC.Refresh

Grid.Rebind

End Sub

</SCRIPT>

</BODY>

</HTML> 

Aqui estamos nos conectando ao banco de dados Biblio_97.mdb - tabela Authors - ( uma cópia do arquivo biblio.mdb) via DSN(clique no link para ler o artigo a respeito)  (criado previamente em minha máquina. ( Voce pode alterar esses valores a vontade)

E, vamos ficando por aqui... :-)