Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se ao: Access 2013, Office 2013
Este tutorial ilustra o uso do modelo de programação RDS para consultar e atualizar uma fonte de dados. Primeiramente, ele descreve as etapas necessárias para realizar essa tarefa. Em seguida, o tutorial é repetido no Microsoft Visual Basic Scripting Edition e no Microsoft Visual J++, com o ADO for Windows Foundation Classes (ADO/WFC).
Este tutorial é codificado em diferentes linguagens por dois motivos:
A documentação do RDS assume os códigos do leitor no Visual Basic. Isso torna a documentação conveniente para programadores do Visual Basic, mas menos útil para os programadores que utilizam outras linguagens.
Se você não estiver certo quanto a um determinado recurso RDS e conhecer um pouco de outra linguagem, pode conseguir resolver sua questão para o mesmo recurso expresso em outra linguagem.
Esse tutorial é baseado no modelo de programação RDS. Ele discute cada etapa do modelo de programação individualmente. Além disso, ilustra cada etapa com um fragmento do código do Visual Basic.
O exemplo do código é repetido em outras linguagens com a discussão mínima. Cada etapa em um determinado tutorial de linguagem de programação está marcado com a etapa correspondente no modelo de programação e tutorial descritivo. Utilize o número da etapa para se referir à discussão no tutorial descritivo.
O modelo de programação RDS está indicado abaixo. Utilize-o como um roteiro conforme avança no tutorial.
Modelo de programação do RDS com objetos
Especifique o programa a ser chamado no servidor e obtenha uma maneira (proxy) de se referir a ele a partir do cliente.
Chame o programa do servidor. Transmita os parâmetros ao programa do servidor que identifica a fonte de dados e o comando a ser emitido.
O programa do servidor obtém um objeto Recordset da fonte de dados, geralmente usando o ADO. Opcionalmente, o objeto Recordset é processado no servidor.
O programa do servidor retorna o objeto Recordset final ao aplicativo cliente.
No cliente, o objeto Recordset é colocado opcionalmente em um formulário que pode ser facilmente usado por controle visuais.
As alterações ao objeto Recordset são enviadas de volta ao servidor e utilizadas para atualizar a fonte de dados.
Passo 1: Especificar um programa de servidor
No caso mais geral, use o objeto RDS.DataSpace do método CreateObject para especificar o programa do servidor padrão, RDSServer.DataFactory, ou seu próprio programa de servidor personalizado (objeto de negócios). Um programa de servidor é instanciado no servidor e uma referência ao programa do servidor, ou proxy, é retornada.
Este tutorial usa o programa do servidor padrão:
Sub RDSTutorial1()
Dim DS as New RDS.DataSpace
Dim DF as Object
Set DF = DS.CreateObject("RDSServer.DataFactory", "https://yourServer")
...
Passo 2: Invocar o programa de servidor
Ao chamar um método no proxy do cliente, o programa real no servidor executa o método. Nessa etapa, você executará uma consulta no servidor.
Parte A
Se você não não usou o RDSServer.DataFactory nesse tutorial, a maneira mais conveniente de executar essa etapa seria usar o objeto RDS.DataControl. O RDS.DataControl combina a etapa anterior da criação de um proxy, com essa etapa, emitindo a consulta.
Defina o RDS. Propriedade servidor de objetos DataControl para identificar onde o programa de servidor deve ser instanciado.
Defina a propriedade Ligar para especificar a cadeia de ligação para aceder à origem de dados.
Defina a propriedade SQL para especificar o texto do comando de consulta.
Emita o método Refresh para fazer com que o programa de servidor se ligue à origem de dados, obtenha as linhas especificadas pela consulta e devolva um objeto Conjunto de registos ao cliente.
Este tutorial não usa o RDS.DataControl, mas veja como seria se o fizesse:
Sub RDSTutorial2A()
Dim DC as New RDS.DataControl
DC.Server = "https://yourServer"
DC.Connect = "DSN=Pubs"
DC.SQL = "SELECT * FROM Authors"
DC.Refresh
...
Ele também não invoca RDS com objetos ADO, mas veja como seria se o fizesse:
Dim rs as New ADODB.Recordset
rs.Open "SELECT * FROM Authors","Provider=MS Remote;Data Source=Pubs;" & _
"Remote Server=https://yourServer;Remote Provider=SQLOLEDB;"
Parte B
O método geral para executar esta etapa é invocar o método Query do objetoRDSServer.DataFactory. Esse método assume uma cadeia de conexão, que é usada para se conectar a uma origem de dados e um texto de comando, que é usada para especificar as linhas a serem retornadas a partir da origem de dados.
Este tutorial usa o método Query do objeto DataFactory:
Sub RDSTutorial2B()
Dim DS as New RDS.DataSpace
Dim DF
Dim RS as ADODB.Recordset
Set DF = DS.CreateObject("RDSServer.DataFactory", "https://yourServer")
Set RS = DF.Query ("DSN=Pubs", "SELECT * FROM Authors")
...
Passo 3: o servidor obtém um Conjunto de Registos
O programa do servidor usa a sequência de conexão e o texto de comando para consultar a fonte de dados para as linhas desejadas. O ADO geralmente é usado para recuperar esse Recordset, embora outras interfaces de acesso a dados da Microsoft, como o OLE DB, podem ser usadas.
Um programa de servidor personalizado pode parecer com:
Public Function ServerProgram(cn as String, qry as String) as Object
Dim rs as New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open qry, cn
rs.ActiveConnection = Nothing
Set ServerProgram = rs
End Function
Passo 4: O servidor devolve o Conjunto de Registos
O RDS converte o objeto Recordset recuperado para um formato que pode ser enviado de volta ao cliente (ou seja, ele empacota o Recordset). O formato exato da conversão e como ele é gasto depende de o servidor estar na Internet ou na intranet, uma rede local ou é uma biblioteca de vínculos dinâmicos. Contudo, este detalhe não é crítico; o que importa é que o RDS envia o Recordset de volta ao cliente.
No lado cliente, um objeto Recordset é retornado e atribuído a uma variável local.
Sub RDSTutorial4()
Dim DS as New RDS.DataSpace
Dim RS as ADODB.Recordset
Dim DF as Object
Set DF = DS.CreateObject("RDSServer.DataFactory", "https://yourServer")
Set RS = DF.Query("DSN=Pubs", "SELECT * FROM Authors")
...
Passo 5: o DataControl torna-se utilizável
O objeto Recordset retornado está disponível para uso. Você pode examinar, navegar ou editá-lo como faria com qualquer outro Recordset. As possibilidades de uso do Recordset dependem do seu ambiente. O Visual Basic e o Visual C++ possuem controles visuais que podem utilizar um Recordset diretamente ou indiretamente com a ajuda de um controle de dados de ativação.
Por exemplo, se estiver a apresentar uma página Web na Internet Explorer, poderá querer apresentar os dados do objeto Conjunto de registos num controlo visual. Os controlos visuais numa página Web não conseguem aceder diretamente a um objeto Conjunto de registos . No entanto, podem acessar o objeto Recordset através do RDS.DataControl. O RDS.DataControl torna-se utilizável por um controle visual quando sua propriedade SourceRecordset for definida como o objeto Recordset.
O objeto de controle visual deve ter seu parâmetro DATASRC definido como RDS.DataControl e sua propriedade DATAFLD definida como um campo de objeto Recordset (coluna).
Nesse tutorial, defina a propriedade SourceRecordset:
Sub RDSTutorial5()
Dim DS as New RDS.DataSpace
Dim RS as ADODB.Recordset
Dim DC as New RDS.DataControl
Dim DF as Object
Set DF = DS.CreateObject("RDSServer.DataFactory", "https://yourServer")
Set RS = DF.Query ("DSN=Pubs", "SELECT * FROM Authors")
DC.SourceRecordset = RS ' Visual controls can now bind to DC.
...
Passo 6: as alterações são enviadas para o servidor
Se o objeto Recordset for editado, todas as alterações (ou seja, linhas que são incluídas, alteradas ou excluídas) poderão ser enviadas de volta ao servidor.
[!OBSERVAçãO] O comportamento padrão do RDS pode ser chamado implicitamente com os objetos ADO e o Microsoft OLE DB Remoting Provider. As consultas podem devolver Conjuntos de registos e os Conjuntos de registos editados podem atualizar a origem de dados. Esse tutorial não chama o RDS com objetos ADO, mas veja como seria se o fizesse:
Dim rs as New ADODB.Recordset
rs.Open "SELECT * FROM Authors","Provider=MS Remote;Data Source=Pubs;" & _
"Remote Server=https://yourServer;Remote Provider=SQLOLEDB;"
... ' Edit the Recordset.
rs.UpdateBatch ' The equivalent of SubmitChanges.
...
Parte A
Para esse caso assuma que você tenha usado apenas RDS.DataControl e que um objeto Recordset agora esteja associado ao RDS.DataControl. O método SubmitChanges atualiza a origem de dados com todas as alterações ao objeto Recordset se as propriedades Server e Connect ainda estiverem definidas.
Sub RDSTutorial6A()
Dim DC as New RDS.DataControl
Dim RS as ADODB.Recordset
DC.Server = "https://yourServer"
DC.Connect = "DSN=Pubs"
DC.SQL = "SELECT * FROM Authors"
DC.Refresh
...
Set RS = DC.Recordset
' Edit the Recordset.
...
DC.SubmitChanges
...
Parte B
Como alternativa, você poderia atualizar o servidor com o objeto RDSServer.DataFactory, especificando uma conexão e um objeto Recordset.
Sub RDSTutorial6B()
Dim DS As New RDS.DataSpace
Dim RS As ADODB.Recordset
Dim DC As New RDS.DataControl
Dim DF As Object
Dim blnStatus As Boolean
Set DF = DS.CreateObject("RDSServer.DataFactory", "https://yourServer")
Set RS = DF.Query ("DSN=Pubs", "SELECT * FROM Authors")
DC.SourceRecordset = RS ' Visual controls can now bind to DC.
' Edit the Recordset.
blnStatus = DF.SubmitChanges "DSN=Pubs", RS
End Sub
Apêndice A: Tutorial de RDS (VBScript)
Este é o tutorial de RDS, escrito no Microsoft Visual Basic Scripting Edition. Para obter uma descrição da finalidade deste tutorial, veja a introdução a este tópico.
Neste tutorial, RDS. DataControl e RDS. O DataSpace é criado no momento da conceção; ou seja, são definidos com etiquetas de objeto. Como alternativa, eles podem ser criados no momento da execução com o método Server.CreateObject.
Por exemplo, o objeto RDS.DataControl pode ser criado dessa forma:
Set DC = Server.CreateObject("RDS.DataControl")
<!-- RDS.DataControl -->
<OBJECT
ID="DC1" CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E33">
</OBJECT>
<!-- RDS.DataSpace -->
<OBJECT
ID="DS1" WIDTH=1 HEIGHT=1
CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">
</OBJECT>
<SCRIPT LANGUAGE="VBScript">
Sub RDSTutorial()
Dim DF1
Passo 1: Especificar um programa de servidor
O VBScript pode detetar o nome do servidor Web do IIS no qual está a ser executado ao aceder ao método VBScript Request.ServerVariables disponível para As Páginas do Active Server:
"https://<%=Request.ServerVariables("SERVER_NAME")%>"
No entanto, neste tutorial, utilize o servidor imaginário "yourServer".
Observação
[!OBSERVAçãO] Preste atenção nos tipos de dados dos argumentos ByRef. O VBScript não permite que você especifique o tipo de variável, então, você deve sempre transmitir uma Variant. Quando HTTP for utilizado, o RDS permitirá a transmissão de uma Variant para um método que espera uma non-Variant, se você chamá-lo com o método CreateObject do objeto RDS.DataSpace. Ao utilizar DCOM ou um servidor em execução, corresponda os tipos de parâmetros no cliente e no servidor; caso contrário, receberá um erro "Incompatibilidade de tipo".
Set DF1 = DS1.CreateObject("RDSServer.DataFactory", "https://yourServer")
Passo 2, Parte A: Invocar o programa de servidor com RDS. DataControl
Esse exemplo é meramente um comentário para demonstrar que o comportamento padrão do RDS.DataControl destina-se a executar a consulta especificada.
<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="DC1">
<PARAM NAME="SQL" VALUE="SELECT * FROM Authors">
<PARAM NAME="Connect" VALUE="DSN=Pubs;">
<PARAM NAME="Server" VALUE="https://yourServer/">
</OBJECT>
...
<SCRIPT LANGUAGE="VBScript">
Sub RDSTutorial2A()
Dim RS
DC1.Refresh
Set RS = DC1.Recordset
...
Avance para o passo seguinte.
Passo 4: O servidor devolve o Conjunto de Registos
Set RS = DF1.Query("DSN=Pubs;", "SELECT * FROM Authors")
Passo 5: o DataControl torna-se utilizável através de controlos visuais
' Assign the returned recordset to the DataControl.
DC1.SourceRecordset = RS
Passo 6, Parte A: as alterações são enviadas para o servidor com RDS. DataControl
Esse exemplo é meramente um comentário que demonstra como o RDS.DataControl executa as atualizações.
<OBJECT CLASSID="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID="DC1">
<PARAM NAME="SQL" VALUE="SELECT * FROM Authors">
<PARAM NAME="Connect" VALUE="DSN=Pubs;">
<PARAM NAME="Server" VALUE="https://yourServer/">
</OBJECT>
...
<SCRIPT LANGUAGE="VBScript">
Sub RDSTutorial6A()
Dim RS
DC1.Refresh
...
Set RS = DC1.Recordset
' Edit the Recordset object...
' The SERVER and CONNECT properties are already set from Step 2A.
Set DC1.SourceRecordset = RS
...
DC1.SubmitChanges
Passo 6, Parte B: as alterações são enviadas para o servidor com RDSServer.DataFactory
DF.SubmitChanges"DSN=Pubs", RS
End Sub
</SCRIPT>
</BODY>
</HTML>
Apêndice B: Tutorial de RDS (Visual J++)
O ADO/WFC não segue completamente o modelo de objeto RDS porque não implementa o objeto RDS.DataControl. O ADO/WFC apenas implementa a classe do lado do cliente, RDS.DataSpace.
A classe DataSpace implementa um método, CreateObject, que retorna um objeto ObjectProxy. A classe DataSpace também implementa a propriedade InternetTimeout.
A classe ObjectProxy implementa um método, call, que pode chamar qualquer objeto de negócios do lado do servidor.
import com.ms.wfc.data.*;
public class RDSTutorial
{
public void tutorial()
{
// Step 1: Specify a server program.
ObjectProxy obj =
DataSpace.createObject(
"RDSServer.DataFactory",
"https://YourServer");
// Step 2: Server returns a Recordset.
Recordset rs = (Recordset) obj.call(
"Query",
new Object[] {"DSN=Pubs;", "SELECT * FROM Authors"});
// Step 3: Changes are sent to the server.
... // Edit Recordset.
obj.call(
"SubmitChanges",
new Object[] {"DSN=Pubs;", rs});
return;
}
}