¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo averiguar el valor de Text Size en la configuración del DSN utilizando ODBC

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 1 Vistas
0
Cargando...

Hola amigos,

Estoy utilizando el controlador ODBC (el marco sobre la API ODBC) para conectar y leer datos del servidor de base de datos ASE en Windows.

Tengo algunas preguntas sobre el controlador ODBC de ASE. ¿Podrían guiarme, por favor?

1) ASE tiene una opción de base de datos llamada "textsize" que establece el límite en la cantidad de datos que podemos recuperar en una declaración SELECT.

Esta opción se puede configurar tanto en la configuración del DSN (Avanzado->Campo de texto Textsize) como mediante "set textsize " para una sesión.

--- Mientras escaneo BLOBs (tipos de datos de imagen), quiero aumentar este límite a 512 MB en mi aplicación. Sin embargo, no quiero anular el límite si el usuario tiene el campo Text Size en la configuración del DSN.

* ¿Cómo podemos (programáticamente) averiguar el valor de Text Size establecido en la configuración del DSN?

--- ¿Es posible hacerlo utilizando alguna función ODBC?

2) ¿Cuál es el límite máximo en los datos devueltos por la llamada a la función SQLGetData a la vez?

--- ¿Podemos determinar el tamaño de los datos almacenados en una columna, especialmente en las columnas BLOB (o imagen) utilizando la API ODBC?

¿O necesitamos ejecutar la consulta "select datalength(NombreColumna) from nombretabla"?

3) ¿Cuál es el Administrador de controladores ODBC más estable y confiable para los sistemas operativos Unix y Linux? ¿Es unixODBC?

Muchas gracias de antemano por sus aclaraciones y tiempo.

Saludos cordiales

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Gracias Paul.

Esto no está relacionado con SQLGetData. De hecho, SQLGetData funciona bien para mí.

Estoy teniendo este problema al ejecutar una consulta y acceder a los buffers vinculados de la siguiente manera (código pseudo):

// Establecer el atributo de la declaración para leer por columna, número de filas, cursor estático y puntero de estado:

/*struct StmtAttrs

{

SQLINTEGER attr;

SQLPOINTER valptr;

SQLINTEGER len;

};*/

SQLHSTMT& stmt = m_stmtHdl.m_hdl;

StmtAttrs parms[5] = \

{{SQL_ATTR_ROW_BIND_TYPE, SQL_BIND_BY_COLUMN, 0},

{SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_STATIC, 0},

{SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)limit, 0},

{SQL_ATTR_ROW_STATUS_PTR, &m_rowStatus[0], 0},

{SQL_ATTR_ROWS_FETCHED_PTR, &m_rowsFetched, 0}};

uint32_t i = 0;

SQLINTEGER errcode;

for (; i < 5; ++i)

{

bool ret = sqlSetStmtAttr(stmt, parms[i].attr, parms[i].valptr, parms[i].len);

// código de manejo de errores

}

// Vincular los buffers de entrada para el número de columnas usando SQLBindCol:

// Preparar la consulta usando SQLPrepare

// Por ejemplo: select top 2039 numpk,convert(binary(256),ablob) from myccinfo.dbo.bigdata NOLOCK order by numpk asc ;

// Ejecutar la consulta con SQLExecute(stmt);

// Obtener los datos usando SQLFetchScroll(stmt, SQL_FETCH_NEXT, 0);

// Iterar a través de cada columna y el buffer vinculado para leer los datos

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Hola Ganesh!

¿Cómo estás haciendo esto con las llamadas ODBC?

¿Está utilizando SQLGetData()? Tenemos una solución que saldrá en 15.7 SP100 (debería ser esta semana o la próxima) CR 727861: Controlador ODBC de Sybase: la API SQLGetData() no recupera todos los datos de la columna si se pasa la longitud del búfer como 0.

No sé si esto se ajusta a tu problema, pero proporciona los detalles de la API y puedo echar un vistazo. El problema que mencioné tenía un problema donde se pasaba la longitud como 0, pero el indicador debía devolver los bytes leídos, y luego la llamada se repetía hasta que el búfer que contenía los datos se vaciaba.

El tipo de datos utilizado en SQLGetData era SQL_C_BINARY y estábamos viendo errores como "[Sybase][Controlador ODBC]Datos de cadena truncados a la derecha (32007)".

¡Saludos!

-Paul

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Tengo otra pregunta específica sobre el controlador ODBC de Sybase.

Estoy usando " select convert(binary(512), <columname>) from tablename " consulta para obtener los primeros 512 bytes de columnas BLOB (imagen, binarias).

Según http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/block... , " La longitud máxima permitida para expresiones de caracteres y binarias es de 64K . ".

Sin embargo, solo puedo usar esto para longitudes de hasta 128 bytes. Si intento usar 256 o 512, el controlador ODBC devuelve un valor de indicador NULL.

¿Son 128 bytes el valor predeterminado para leer usando convert()? ¿Cómo podemos leer 512 bytes? Gracias

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Ganesh,

Para unixODBC, según la documentación del SDK 15.7 (Guía del usuario del controlador ODBC de Adaptive Server Enterprise de Sybase)

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc20116.1570/html/aseodbc/aseodbc5.htm

Para Linux, normalmente se puede usar el unixODBC distribuido con Red Hat y SuSE. He utilizado las versiones 2.2.11, 2.2.14 y también 2.3.1 y todas parecen funcionar correctamente. (Instalo múltiples versiones de unixODBC según lo que los clientes estén utilizando para casos específicos).

Para UNIX, puedes usar el Administrador de controladores ODBC de Sybase iAnywhere incluido con la instalación del controlador o la versión de unixODBC recomendada es la 2.2.14 si deseas instalar la tuya propia.

Definitivamente verifica la nota sobre el SQLLEN de 4 bytes vs. 8 bytes. Desde la ESD#4 de la versión 15.7 hemos incluido tanto el controlador ODBC SQLLEN de 4 bytes como el de 8 bytes, dependiendo de tus necesidades individuales.

En Red Hat 6 y versiones posteriores, el Administrador de controladores unixODBC utiliza el SQLLEN de 8 bytes. Esto sería con la versión 2.2.14 y superiores.

Espero que esto sea útil,

Saludos,

-Paul

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?