Access - ejemplos de opendatabase usando postgres como backend

 
Vista:

ejemplos de opendatabase usando postgres como backend

Publicado por ddepaz (15 intervenciones) el 02/02/2017 02:04:14
Saludos a todos los colegas, de la manera mas atenta solicito si alguien conoce algun sitio o link en el cual pueda encontrar y analizar ejemplos de access 2013 utilizando postgres como backend via conexion ODBC, especificamente el uso del metodo OpenDatabase.

Mas exactamente la siguiente situacion:

para crear un set de registros y recorrer una tabla de access hago lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dim mbase as DAO.databases
dim mtabla as DAO.recordset
 
set mbase = Currentdb()
 
set mtabla = mbase.OpenRecordset("SELECT nombre FROM CLIENTES")
 
while not mtabla.EOF
 
msgbox "Nombre de cliente: " & mtabla!nombre
mtabla.MOVENEXT
 
wend
 
mtabla.close
mbase.close


Esto mismo necesito hacer pero recorriendo una tabla de la base de datos postgres via ODBC, si alguien pudiera apoyarme con una idea o un pequeño ejemplo se los agradecere muchisimo.

Buen dia.
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
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

ejemplos de opendatabase usando postgres como backend

Publicado por Manuel (171 intervenciones) el 02/02/2017 19:17:25
Si tienes instalado el driver ODBC de Postgree en Windows..., pues lo que necesitas es la cadena de conexión, que es:
1
"Driver={PostgreSQL ANSI};Server=" & rutaServidorPostgreSQL & ";Database=nombreBD;UID=" & usuario & ";PWD=" & contraseña


Pero si tienes configurada una DSN, pues puedes ir a lo más fácil todavía:
1
2
3
4
5
6
7
8
9
10
Dim miBD As DAO.Database, miConsulta As QueryDef, miRecordset As DAO.Recordset
Set miBD = CurrentDb()
Set miConsulta = miBD.CreateQueryDef("")
miConsulta.Connect = "ODBC;UID=usuario;PWD=contraseña;DSN=LaDSNqueDefiniste; DATABASE=laBaseDeDatos;SERVER=direccionIPservidor;PORT=5432"
miConsulta.SQL = "SELECT nombre FROM clientes"
miConsulta.ReturnsRecords = True
Set miRecordset = miConsulta.OpenRecordset()
miRecordset.MoveFirst
while not miRecordset.EOF
...

Que como ves cambia muy poco de como se hace con la base de datos activa (el código que tu tienes).

Espero que te sirva
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

ejemplos de opendatabase usando postgres como backend

Publicado por ddepaz (15 intervenciones) el 03/02/2017 06:22:11
Muchas Gracias manuel por el codigo que me enviaste, te cuento que ya lo coloque en mi proyecto y reemplaze en la linea miConsulta.connect con los datos correspondientes a mi sistema, al momento de correr el codigo me da el error:

3146 ODBC: fallo la llamada

esto me lo da exactamente al ejecutar la linea que dice:

Set miRecordset = miConsulta.OpenRecordset()

Tendras alguna idea del porque me estara fallando? Te cuento que modifique la linea miConsulta.Connect y unicamente la deje de esta forma:

miConsulta.Connect = "ODBC;"

y lo que provoco aqui es que al ejecutar el codigo en este punto obligo a windows a que me muestre la ventana de origenes de datos ODBC, entonces lo selecciono de la ventana y presiono ACEPTAR, pero igualmente me da el mismo mensaje de error.

Bueno amigo si puede darme una luz de que podra estar sucediendo te lo agradecere nuevamente.

Te pregunto, en la linea que se invoca el OpenRecordset(), no debera llevar algun parametro dentro de los parentesis?

Estamos en contacto y de antemano agradezco tu tiempo y atencion.
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
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

ejemplos de opendatabase usando postgres como backend

Publicado por Manuel (171 intervenciones) el 03/02/2017 10:59:17
OpenRecordset puede llevar 3 parámetros, aunque todos opcionales:
type: el tipo de recordset, aquí los mismos valores que cualquier otro recordset en DAO, por ejemplo dbOpenDynaset
options: aquí lo de los permisos y similares, por ejemplo dbDenyWrite
lockedit: aquí por ejemplo para ODBCDirect un valor típico es dbOptimisticBatch

eso sí, algunas opciones ya no funcionan en Access 2013 en adelante para ODBCDirect (y antes funcionaban perfectamente en Access), por ejemplo dbOptimistValue está prohibido en workplaces ODBCDirect, en donde en lugar de DAO, pues tendrías que recurrir a ADO si lo necesitas así.

Si solo vas a leer datos, pues en type, pues yo pondría dbOpenSnapshot .

Por cierto, cuidado con la sentencia SQL, recuerda que tiene que ser compatible con PostgreSQL, que ahí creo que es obligatorio terminar en ";" por ejemplo.

Después, algo que aprendes pronto al trabajar con Access y orígenes de datos ODBC, pues que si hay varios recordset creados, puede fallar uno, porque la conexión aun está ocupada con una llamada anterior de otro recordset. Pero no creo que sea tu caso.

hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

ejemplos de opendatabase usando postgres como backend

Publicado por Manuel (171 intervenciones) el 03/02/2017 12:57:33
Me acordé de un detalle, hay 4 formas de conectarse vía ODBC a PostgreSQL:
La conexión estándar:
1
2
Driver={PostgreSQL};Server=direccionIP;Port=5432;Database=BDconcreta;
Uid=usuario;Pwd=contraseña;
La conexión ANSI:
1
2
Driver={PostgreSQL ANSI};Server=direccionIP;Port=5432;Database=BDconcreta;
Uid=nombreusuario;Pwd=contraseña;
Unicode, igual que la anterior, pero en donde pone ANSI, poner UNICODE
La SSL: igual que la ANSI, pero con un parámetro más obligatorio:
1
sslmode=require;

Aunque si no te dio error al conectar, sino al crear el recordset, creo que tal como tienes sirve.

Por otro lado, no solo se puede hacía vía DAO, sino también con ADO y conectar directamente a la DSN (que estará bien porque la habrás probado), por ejemplo sería algo más estilo:

1
2
3
4
5
6
7
Dim micnn As ADODB.connection
Dim micmd As ADODB.Command
micnn.Open "DSN=laDSNconfigurada;Database=baseBD;Uid=usuario;Pwd=contraseña;"
micmd.ActiveConnection = micnn
micmd.CommandType = ADODB.CommandTypeEnum.adCmdText
micmd.CommandText = "SELECT nombre..."
...

Espero que algo de esto te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

ejemplos de opendatabase usando postgres como backend

Publicado por Daniel (15 intervenciones) el 09/02/2017 02:23:43
Hola Manuel, muchas gracias por tu ayuda, me sirvio muchisimo el codigo que me enviaste y finalmente logre conectarme a postgres via odbc desde access, nuevamente gracias y en lo que pueda ayudarte estoy a tus ordenes.

Saludos y buen dia.
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