Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problemas con DSN remoto

Estas en el tema de Problemas con DSN remoto en el foro de Bases de Datos General en Foros del Web. Hola. Estoy intentando conectar una apicación a una base de datos remota oracle, que está en un servidor de nombre ERP, y la instancia a ...
  #1 (permalink)  
Antiguo 29/09/2003, 09:13
Avatar de [-H-]  
Fecha de Ingreso: marzo-2003
Mensajes: 75
Antigüedad: 21 años, 1 mes
Puntos: 1
Problemas con DSN remoto

Hola.
Estoy intentando conectar una apicación a una base de datos remota oracle, que está en un servidor de nombre ERP, y la instancia a la base de datos que me quiero conectar es "cti".
Bien, si pruebo la aplicación en el mismo servidor(win 2000 server), habiendo configurado un DSN en el cual el campo "service name" tengo puesto "cti", el programa funciona a la perfección, pero si me voy a un equipo remoto(win 2000), no me funciona bien, y sospecho que es por lo que pongo en el campo "servidor" en el que he probado a hacer de todo (//erp/cti,erp.cti,erp:cti,erp:1521:cti....) y nada no consigo establecer la conexión.
Qué tengo quer poner en ese campo?????
muchas gracias.

[-H-]
PD:no es problema de la red, pq si configuro un DSN para sql server si lo consigo hacxer funcionar (el asistente de configuración DSN es diferente...
  #2 (permalink)  
Antiguo 29/09/2003, 14:28
Avatar de saymon  
Fecha de Ingreso: septiembre-2003
Ubicación: Panama
Mensajes: 318
Antigüedad: 20 años, 8 meses
Puntos: 0
manda el código de conexion a la base de datos para ver si te ayudooooo.. (completo)
configurado de la máquina que está funcionando...
De esta forma se analiza mejor..


saludos
anibal
  #3 (permalink)  
Antiguo 30/09/2003, 02:24
Avatar de [-H-]  
Fecha de Ingreso: marzo-2003
Mensajes: 75
Antigüedad: 21 años, 1 mes
Puntos: 1
Vale, aki está el código:

Código:
 
/*----------conexionBD.h----*/
/* para la parte ODBC*/
#include <sql.h>
#include <sqlext.h>

/* printf etc */
#include <stdio.h>

/* variables globales para el entorno de la base de datos
y el HANDLE de conexión */
HENV henv; 
HDBC hdbc; 

/*Detalles del DSN*/
char *PM_DSN[20]; /*---> en mi caso el DSN lo pido como parametro*/
#define PM_DSN_USER "DEMO2000"
#define PM_DSN_PW "DEMO2000"

...
...
...




#include "conexionBD.h"

int abrirBD(void)
{
    int res = 0;
    RETCODE retcode; 
     /*preparamos el entorno*/
    if(SQLAllocEnv(&henv) == SQL_SUCCESS)
    {
         if(SQLAllocConnect(henv,&hdbc) == SQL_SUCCESS)
         {
              /* definimos un timeout de 5 seg. */ 
               SQLSetConnectOption(hdbc,SQL_LOGIN_TIMEOUT,5); 
            SQLSetConnectOption(hdbc,SQL_CURSOR_TYPE,SQL_CURSOR_STATIC);
           /*nos conectamos al origen de datos*/ 
            retcode = SQLConnect(hdbc,
                                        (unsigned char*)PM_DSN,SQL_NTS,
                                        (unsigned char*)PM_DSN_USER,SQL_NTS,
                                        (unsigned char*)PM_DSN_PW,SQL_NTS); 


            if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
           { 
                      res=1;
           }
         }
         else SQLFreeConnect(hdbc); 
     } 
     else SQLFreeEnv(henv); 
     return res;
}

void cerrarBD(void)
{
    SQLDisconnect(hdbc); 
     SQLFreeConnect(hdbc); 
     SQLFreeEnv(henv); 
}

int ejecutaBD(char *sql,HSTMT *hstmt)
{
    int res=0;
    RETCODE retcode;

    if(SQLAllocStmt(hdbc,hstmt) == SQL_SUCCESS) 
     { 
          retcode = SQLPrepare(*hstmt,(unsigned char*)sql,strlen(sql));
         if(retcode == SQL_SUCCESS)
         {
              retcode = SQLExecute(*hstmt);
           if(retcode == SQL_SUCCESS)
           {
                res=1;
           }
         }
    }
    return res;
}

void cerrarcursorBD(HSTMT hstmt)
{
    SQLFreeStmt(hstmt,SQL_DROP);
}
/*esta es la función que llamo desde mi programa principal, el DSN destino todavía no lo utilizo*/
void migrar_tablas(char *dsn_origen,char *dsn_destino){
	HSTMT fstmt;
	char consulta[400];
    char name[100];
	RETCODE retcode;

	strcpy(PM_DSN,dsn_origen);
	sprintf(consulta,"select table_name from sys.dba_tables where tablespace_name='SPYRODAT'");
    if(abrirBD())
    {     
          if(ejecutarBD(consulta,&fstmt))
         {      
              SQLBindCol(fstmt,1,SQL_C_CHAR,name,sizeof(name),NULL);
      
               retcode = SQLFetch(fstmt);     
               while(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
              {
                  //strcpy(resul,name); 
				  printf("%s\n",name);
                  retcode = SQLFetch(fstmt);
              }
              cerrarcursoBD(fstmt);
         }
    }
	else printf("error al conectar con la base de datos\n");
    cerrarBD();
}
Como ves, el codigo está en c puro y es un poco largo, de todos modos no creo q el fallo esté aki (ya te digo que desde lel mismo servidor funciona, pero desde una remota con oracle no, pero con sql serever si).
muchas gracias.

Última edición por [-H-]; 30/09/2003 a las 02:28
  #4 (permalink)  
Antiguo 01/10/2003, 10:29
Avatar de [-H-]  
Fecha de Ingreso: marzo-2003
Mensajes: 75
Antigüedad: 21 años, 1 mes
Puntos: 1
Solucionado

Parece ser que era problema del driver para Oracle de microsoft.
He probado a cambiar el driver ODBC (en la maquina remota usaba el Microsoft for Oracle), y he instalado el propio driver de Oracle para Oracle (el que me he dado cuenta que utilizaba en la máquina servidor), y ya he configurado el DSN debidamente y funciona.
Gracias de todos modos, y hasta otra ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:53.