SOCI librería de SQL para C++.

Descarga >>

Instalación

Instrucciones >>

compilación

Básicamente creo un directorio para la compilación, y ejecuto cmake adentro indicándole dónde están los fuentes de SOCI:

>MKDIR build
>CD build
>cmake -G "Visual Studio 9 2008" ..\soci-3.1.0

Nótese que estoy en Windows y que quiero dejarlo como ejecutable para VS2008, a diferencia de la documentación.

Efectivamente termino con un SOCI.sln en el directorio, pero desde ya creo que no me servirá ya que en el log podemos ver

-- ODBC - SOCI backend for ODBC
-- WARNING:
-- Some required dependencies of ODBC backend not found:
-- 	ODBC
-- Skipping
-- SOCI_OBDC			= OFF

por lo que creo que me falta un driver ODBC.

Efectivamente compilando este proyecto VisualStudio obtenemos

  • soci_core_3_1.lib
  • soci_empty_3_1.lib

y nada de ODBC.

De hecho en la sección  SOCI ODBC >> se menciona el driver

The SOCI ODBC backend requires the ODBC client library.

lo curioso es que no te enlacen a cuál usar…
intentaré éste >> a pesar que es una DLL, siendo que a mí me serviría una librería estática…
ahí, en teoría, habría que descargar el instalador ENU\x86\sqlncli.msi, el cual debiera traer los drivers para ODBC y OLE DB… ugly.

Instalé, reinicié, y todo sigue igual. Así es que intentaré pasarle los parámetros explícitamente

cmake -G "Visual Studio 9 2008" ..\soci-3.1.0 -DWITH_ODBC=ON

no paha ná…

cmake -G "Visual Studio 9 2008" ..\soci-3.1.0 -DWITH_ODBC=ON -DODBC_LIBRARIES=C:\WINDOWS\system32

tampoco. A pesar que tengo unas dll odbc32gt.dll, odbcconf.dll, etc.

Al parece lo que sí está bien es el ODBC_INCLUDE_DIRECTORIES, ya que en C:\Program Files\Microsoft SDKs\Windows\v7.0\Include sí tengo un sql.h, que es donde lo está buscando SOCI

-- Looking for SOCI dependencies

-- ODBC:
-- WARNING:
-- ODBC not found, some libraries or features will be disabled.
-- See the documentation for ODBC or manually set these variables:
-- ODBC_INCLUDE_DIRECTORIES		= C:\Program Files\Microsoft SDKs\Windows\v7.0\Include
-- ODBC_LIBRARIES			= ODBC_LIBRARY-NOTFOUND

¿Será ésta >> la librería que me falta? Ajá, acá hay más indicaciones >> donde dice que las librerías cliente de ODBC se llaman sqlncli11.dll, sqlnclir11.rll o sea no son las que vimos más arriba. Pero ¡¿dónde se descarga?! parece que Microsoft todavía no se entera de la existencia de los hipervínculos… Hablan de un instalador sqlncli.msi, que viene dentro del CD de SQL Server… ¿será que simplemente no se descarga? ¡Pero si ése es el que intetamos hace un rato! De hecho en %SYSTEM_ROOT%\system32 tengo sqlncli10.dll… pero ni pasándoselo directo.
Puede ser que sea un driver para SQL Server 2012…

Éste sería el link de 2008 >>
Efectivamente en esta versión la librería se llama odbc32.lib… ¡y la tengo por el SDK en C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib! pero no hay caso

cmake -G "Visual Studio 9 2008" ..\soci-3.1.0\soci-3.1.0 -DODBC_LIBRARIES="C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib\odbc32.lib"

no funciona, ni ninguna de sus variantes (i.e. con -DWITH_ODBC, sin el nombre del archivo…)

Bien, finalmente en soci-3.1.0\cmake\modules se encuentra el archivo que define cómo CMake busca ODBC, es FindODBC.cmake.

Si lo abrimos, vemos que los directorios donde busca son varios (para Unix o Wintendo), entre los cuales

"C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib"

siendo que mi ODBC se encuentra en

"C:/Program Files/Microsoft SDKs/Windows/v7.0/Lib"

así es que con una pequeña edición funciona.

-- ODBC:
-- ODBC_INCLUDE_DIRECTORIES		= C:\Program Files\Microsoft SDKs\Windows\v7.0\Include
-- ODBC_LIBRARIES			= C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib

y al compilar

------ Operación Generar iniciada: proyecto: soci_odbc-static, configuración: Debug Win32 ------

Nótese que esto no es una buena práctica y su única razón reside en que el parámetro que supuestamente pued pasársele a CMake no funciona.

Uso y abuso

Hay que setear los directorios de inclusión adicionales – esto es, añadir los headers de SOCI al include path
en core\ se encuentra, por ej., soci.h y en backends\odbc soci-odbc.h

También hay que referenciar las librerías en el linker
y decirle donde encontrarlas añadiéndolas al build path
con esto, en teoría, podría intentar una conexión simple

#include "soci.h"
#include "soci-odbc.h"

using namespace soci;
int main(int argc, _TCHAR* argv[]){
session sql(odbc, "filedsn=c:\\my.dsn");//dsn?
return 0;
}

pero la informática es una disciplina muy lejana a las teorías… ¿la entretención del día?

c:\documents and settings\nn\desktop\soci-3.1.0\soci-3.1.0\backends\odbc\soci-odbc.h(269) : error C2664: 'SQLGetDiagRecW' : cannot convert parameter 4 from 'SQLCHAR [6]' to 'SQLWCHAR *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

lo cual es un error ¡en los headers de SOCI!

Al parecer el bug se debe al juego de caracteres y efectivamente – sin entender mucho la relación con la conversión entre tipos de datos – si lo seteamos a multibyte pasa
Ok. Ahora, ¿qué es ese .dsn? Según la parte ODBC de la documentación >> son los mismos que los de SQLDriverConnect de ODBC, pero el link que dan está roto. A ver éste >>. Entre otras cosas, dice

Establish a connection to a data source using a connection string constructed from the information in a .dsn file.

yeah.. tendré que hacer uno de ésos >>

Este sitio utiliza cookies.    Leer más
Privacidad