Visual Basic - Enlazador DAO a ADO

Life is soft - evento anual de software empresarial
 
Vista:

Enlazador DAO a ADO

Publicado por GabrielDR (27 intervenciones) el 29/11/2005 18:12:23
Hay manera de crear una DLL que tome referencias DAO del lado del cliente y procese referencias ADO del lado del servidor.

es decir:
Cliente El cliente pasa referencias a datos DAO
| ^ db as new DAO.Database
V | libreria.REFDB=db
Libreria
| ^
V |
Servidor El servidor reconoce referencias ADO
property Let(DB as ADO)

¿Alguna IDEA?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Enlazador DAO a ADO

Publicado por Christian (208 intervenciones) el 30/11/2005 20:34:04
A que te referis con cliente y con servidor.

La aplicacion la podes hacer con varios formatos de conexion e incluso pueden trabajar dentro del mismo evento, funcion, clase, etc.

Solo tenes que hacer la conexion cada uno de ellos como corresponde y despues usar traductores para pasar de un tipo DAO a un tipo ADO.

La forma mas facil de hacer eso es usar la base de datos como intermediaria, ya que esta siempre hace la comversion a TSQL.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Me, no comprender. :-)

Publicado por GabrielDR (27 intervenciones) el 01/12/2005 18:40:29
cuando me refiero a cliente es una aplicación que consulta datos.
cuando me refiero a servidor es una aplicación que sirve los datos.

Lo que estoy buscando es la forma de hacer o usar el Traductor, ya que no me imagino como realizarla.

Lo que pasa es que tenemos una aplicación "cliente" ya compilada que originalmente se enlazaba a una DLL que era el servidor "DAO" y esta le proporcionaba datos y todos felices.

Ahora se creo otra DLL "servidor" basado en ADO, y resulta que el programa cliente ya no puede conectarse a este porque los tipos de datos de las propiedades no son iguales.

este es el codigo (mas o menos) del cliente y del servidor.
Antes DAO:

'1.-Cliente abre la base de datos.
dim db as dao.database
set db.open("archivo")
'2.- Cliente necesita datos, realiza la consulta, pasando como referencia la base de datos abierta al servidor.
SerdidorDAO.BaseReferencia=db
'3.- Cliente recibe la referencia de la DB y ejecuta la consulta y procesos pertinentes
dim xdb as DAO.Database
Public property LET BaseReferencia(DATAS as DAO.Database)
set xdb=DATA
call procesadatos()..
.....
..
end property
5.- En estos procesos la base de datos ha cambiado y por logica la Aplicacion "cliente" ya puede consultar la información "ACTUALIZADA"
set rs=db.openrecordset("select * from status=1")

Esto como comente antes, Felices y contentos.
Ahora viene la problemtica.

Despues ADO:
'1.-Cliente abre la base de datos.
dim db as dao.database
set db.open("archivo")
'2.- Cliente necesita datos, realiza la consulta, pasando como referencia la base de datos abierta al servidor. (la cual no pasa porque la referencia es de otro tipo)
SerdidorDAO.BaseReferencia=db
'3.- Cliente recibe la referencia de la DB (La cual es ADO y no la acepta).
dim xdb as ADODB.Database
Public property LET BaseReferencia(DATAS as ADODB.Database) 'Aqui marca un error de que no son compatibles.
set xdb=DATA
call procesadatos()..
.....
..
end property

Aclaro. este codigo no lo hice yo, solo estoy simulando lo que sucede, ya que las 2 aplicaciones "cliente" y "servidor" estan ya compiladas, ahora lo que a mi me toca hacer es el ENLAZADOR, de modo que yo reciba una referencia DAO del cliente y pueda enviar una referencia ADO al servidor.

¿Se podra?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Me, no comprender. :-)

Publicado por Esteban (1144 intervenciones) el 02/12/2005 22:32:18
Antes que todo, hay que entender que no hay que confundir fresas con moras, DAO y ADO son dos cosas total y absolutamente diferentes, además, desde un cliente puedes conectarte a una DLL de servidor, sin tener ningun tipo de datos relacionado con ADO o DAO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Solucion A DAO2ADO

Publicado por GabrielDR (27 intervenciones) el 25/01/2006 19:44:31
Despues de mucho tiempo, encontre la solucion de como enlazar objetos DAO a ADO, pasados como referencia aqui esta el LINK.

http://www.trigeminal.com/code/ado_to_dao.bas

La lógica es muy sencilla, extrae los parametros de conexion de ADO y crea una nueva conexion DAO. simple. Cargadisimo. pero funciona.

Realmente lo que yo queria era a la inversa, pero igual funciona.

Aqui esta todo el codigo por si se rompe el link.

Attribute VB_Name = "ADO_to_DAO"
'------------------------------------------
' ADO_to_DAO
'
' You can use this procedure to turn an ADO connection to a database into
' a DAO one. *Very* useful for making sure that you do not have to rewrite
' all your code when moving to an .ADP in Access 2000; instead, you can just
' use this proc to get a DAO Database object that points to the SQL Server
' database and use it to keep your existing code working while you can then
' move code to ADO later. How do you do this? Just pass in the Access 2000
' Application.CurrentProject.Connection object to the proc and use the DAO
' database object it returns.
'
' DaoDbFromAdoCon
' -con
' An ADO connection object, pointing to a Jet database, or a SQL Server
' database via the SQL Serevr OLE DB provider (or the Shape Provider).
' -[stUser]
' Optional, the username to use for the DAO database
' -[stPassword]
' Optional, the password to use for the DAO database
' -[fNewDBEngine]
' Optional, a flag that specifies whether to create a brand new DBEngine object
' or use the existing one. For SQL Server this can be important if you want to
' guarantee that cached logon information is not used for the server in the DAO
' connection. For Jet if you do NOT specify this param as True then it cannot
' change the .MDW file to be used by the new DAO database to be returned.
'
' Make sure to add references to ADO 2.1 and DAO 3.6 or the code will not compile.
'
' (c) 1999 Trigeminal Software, Inc. All Rights Reserved
'------------------------------------------
Option Compare Text
Option Explicit

Public Function DaoDbFromAdoCon(con As ADODB.Connection, Optional stUser As String, Optional stPassword As Variant, Optional fNewDBEngine As Boolean = False) As DAO.Database
Dim dbe As DAO.DBEngine
Dim db As DAO.Database
Dim stConnect As String
Dim stDatabase As String

If fNewDBEngine Then
' Create a new dbengine
Set dbe = New DAO.PrivDBEngine
Else
Set dbe = DBEngine
End If

If InStr(con.Provider, "Microsoft.Jet.OLEDB") > 0 Then
' This is a Jet database
If fNewDBEngine Then
dbe.IniPath = con.Properties("Jet OLEDB:Registry Path")
dbe.SystemDB = con.Properties("Jet OLEDB:System database")
If Len(stUser) = 0 Then
dbe.DefaultUser = con.Properties("User ID")
Else
dbe.DefaultUser = stUser
End If
If IsMissing(stPassword) Then
dbe.DefaultPassword = con.Properties("Password")
Else
dbe.DefaultPassword = stPassword
End If
End If
stDatabase = con.Properties("Data Source")
If Len(con.Properties("Jet OLEDB:Database Password")) > 0 Then
stConnect = stConnect & ";PWD=" & con.Properties("Jet OLEDB:Database Password")
End If
ElseIf (InStr(con.Provider, "MSDataShape") + InStr(con.Provider, "SQLOLEDB") > 0) Then
' This is a SQL server database, either directly or through the shape engine
stDatabase = ""
stConnect = "ODBC;"
stConnect = stConnect & "driver=" & "SQL Server" & ";"
stConnect = stConnect & "server=" & con.Properties("Data Source") & ";"
stConnect = stConnect & "database=" & con.Properties("Initial Catalog") & ";"
If con.Properties("Integrated Security") = "SSPI" Then
stConnect = stConnect & "Trusted_Connection=Yes;"
Else
If Len(stUser) = 0 Then
stConnect = stConnect & "UID=" & con.Properties("User ID") & ";"
Else
stConnect = stConnect & "UID=" & stUser & ";"
End If
If IsMissing(stPassword) Then
stConnect = stConnect & "PWD=" & con.Properties("Password") & ";"
Else
stConnect = stConnect & "PWD=" & stPassword & ";"
End If
End If
End If

Set db = dbe.OpenDatabase(stDatabase, False, False, stConnect)
Set dbe = Nothing

Set DaoDbFromAdoCon = db
Set db = Nothing
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:COMO SE ANEXA BASE DE DATOS CON VISUAL BASIC

Publicado por ANDREA AGUIRRE ESPICHAN (2 intervenciones) el 09/07/2006 00:29:36
PORFAVOR SI ME PUDIERAN OFRECER INFORMACION DE ESTOS TEMAS
CONTROL DATA
COMO ANEXAR BASE DE DATOS CON VISUAL BASIC
ADO
DAO
CONEXIONES OD BC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:COMO SE ANEXA BASE DE DATOS CON VISUAL BASIC

Publicado por ANDREA AGUIRRE ESPICHAN (2 intervenciones) el 09/07/2006 00:32:22
PORFAVOR SI ME PUDIERAN OFRECER INFORMACION DE ESTOS TEMAS
CONTROL DATA
COMO ANEXAR BASE DE DATOS CON VISUAL BASIC
ADO
DAO
CONEXIONES OD BC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar