Tenemos una aplicación Velneo que accede a una base de datos Firebird sin ningún problema, pero ahora necesitamos que Velneo acceda a una base de datos de SQL Server 2019 y no conseguimos que funcione la conexión. Es la primera vez que trabajamos con bases de datos SQL y desconocemos su funcionamiento y requisitos (aunque sí conocemos la 4 instrucciones SQL que necesitamos).
Hemos hecho las pruebas en dos ordenadores diferentes, y en ambos casos, tanto Velneo (versión 24) como la base de datos SQL se encuentran en el mismo ordenador.
Utilizamos la instrucción BD:Crear manejador con:
Driver de base de datos externa: SQLite versión 3
DSN: Driver=SQL Server;Server=LAPTOP-86FKU183\BDPSOFTWARE;DATABASE=Bdp-Net_NetHos_30;Trusted_Connection=Yes;
Al utilizar la instrucción BD:Conectar, en uno de los ordenadores nos devuelve el error: Out of memory Error al abrir la base de datos. En el otro, nos da la conexión como correcta, pero luego no se ejecutan bien las instrucciones BD:SQL y siempre nos devuelve -1 como número de filas afectadas.
En la instrucción BD:Crear manejador utilizamos SQLite versión 3 y Driver=SQL Server ya que es la combinación con la que avanzamos un poco. También hemos probado añadiendo los parámetros UID y PWD en el DSN sin éxito.
En ambos ordenadores también hemos utilizado el Importador SQL del vDevelop y, en ambos casos, se crea la solución con todas las tablas y campos correctos, pero al querer importar nos da el error: No se ha podido abrir la base de datos. [Microsoft][ODBC SQL Server Driver][DBNETLIB]No existe el servidor SQL Server o se ha denegado el acceso al mismo. [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). QODBC3: No es posible establecer una conexión
También hemos utilizado el Microsoft SQL Server Management Studio y podemos ver las tablas y editar los registros.
Agradeceríamos alguna idea de donde puede estar el problema, o algún contacto con alguien que pueda ayudarnos. Muchas gracias.
Es probable que el problema esté en el driver de base de datos externa SQLite. Habría que probar con el driver ODBC.
No tengo experiencia previa conectando velneo a bases de datos SQL, pero en otras plataformas he necesitado un driver distinto para cada DB: MySQL, MS SQL Server y Oracle.
Me resulta extraño que digas que no tenéis experiencia con bases de datos SQL si estáis trabajando con Firebird, que si no me equivoco es una Base de datos SQL y con conexión a Velneo mediante ODBC.
Por lo tanto, lo único que debes hacer es usar los mismos comandos de Bases de datos externas que usas con Firebird, sustituyendo la cadena de conexión a SQL Server.
Suponiendo que tenéis bien instalado el gestor ODBC de Windows y el driver SQL Server para ODBC, que viene por defecto en cualquier equipo Windows. Que habéis hecho pruebas de conexión desde el gestor ODBC usadno algún DSN de Test. Que sabéis el funcionamiento de los comandos de Bases de datos externas de Velneo.
El comando BD: Crear manejador es el siguiente:
El comando BD: Conectar no necesita Usuario y contraseña si la conexión es de Confianza.
La variable local OK_CONEXION siempre devuelve 0, la pones a 1 manualmente dentro del subproceso del comando BD: Conectar.
La variable local OK_MENSAJE contendrá el mensaje devuelto por el gestor ODBC en caso de error.
El comando BD:SQL siempre retorna -1 en el número de filas afectadas ODBC_NUM_FILAS, por lo tanto no sirve de mucho.
Como ves, más sencillo imposible y prácticamente igual que acceder a Firebird.
Al final he conseguido que funcione, pero no acabo de entender el porqué.
Lo estaba haciendo tal como dice Paco.
Utilizaba la configuración del DSN sólo para ver si había conexión con la base de datos Sql, y luego intentaba poner los datos de conexión en la instrucción DB:Crear manejador: “DRIVER=SQL Server;Server=LAPTOP-86FKU183\BDPSOFTWARE;DATABASE=Bdp-Net_NetHos_30;Trusted_Connection=Yes;”
La manera que he conseguido que funcione es creando un DSN de sistema y luego utilizarlo en la instrucción DB:Crear manejador: “DSN=BDP;DRIVER=SQL Server;DATABASE=Bdp-Net_NetHos_30”
Ya digo que no entiendo el porqué fallaba, pero al menos así funciona. (Si sabéis el porqué, agradecería saber el motivo).
Me alegro que lo hayas conseguido, aunque usar el DSN no es lo más práctico cuando pones la aplicación en producción.
Debes usar la cadena de conexión.
Al introducirla como fórmula debes respetar la sintaxis correcta.
Debes usar un doble back slash para escapar el back slash del Server.
Tienes razón, era la doble barra. Funciona tal como dices.
Con tu permiso voy a abusar un poco más de tu ayuda.
Puedo leer registros, modificarlos y borrarlos, pero no me deja añadir registros. Utilizo la instrucción:
“INSERT INTO clientes (Codigo,Alias,Direccion) VALUES (100,‘Jordi’,‘Figueres’)”
También he probado si el campo Codigo por si era automático, pero sin éxito.
¿Se te ocurre que hago mal?.