elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al insertar BLOB con libmysql.dll
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al insertar BLOB con libmysql.dll  (Leído 1,940 veces)
LucasBols

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Error al insertar BLOB con libmysql.dll
« en: 29 Mayo 2012, 22:10 pm »

Hola, buenas tardes,

Tengo una aplicación en C++Builder con cuatro módulos ejecutables, de los cuales, 3 insertan imagenes en campos BLOB

Los 3 módulos utilizan la misma clase para inserción, 2 de los módulos nunca han generado ningún mensaje de error, pero el tercero, genera mensajes diversos en cientas condiciones que no puedo determinar ni reproducir.

En este laboratorio tengo 3 máquinas (XP, Windows 7 y Windows 8) donde he probado este tercer módulo y no genera ningún error, sin embargo, en algunas de las máquinas de mis clientes, ese tercer módulo genera errores.

Los primeros errores fueron en máquinas XP, el error fue este:

"can't send long data for non-string/non-binary data types"

Después de verificar que el procedimiento no tuviera errores, actualicé la libmysql.dll a la 5.5.24, a partir de ese momento, el error cambió a:

"No se pudo insertar el parámetro: Lost connection to MySQL server during query"

Verifiqué las clases que realizan la inserción, las puse a prueba en mis 3 máquinas y en ningún momento saltó el error.

Los motores de mis clientes están en Linux y en Windows, en ambos ocasionalmente salta el error.

¿Alguien tiene alguna solución o alguna sugerencia de por donde encarar el problema? Estoy completamente perdido, y lo peor es que no puedo reproducir el fallo.

Saludos y gracias por anticipado.


En línea

LucasBols

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Error al insertar BLOB con libmysql.dll
« Respuesta #1 en: 30 Mayo 2012, 21:03 pm »

Estuve haciendo algunas modificaciones al my.ini, le agregué esto en la sección [mysqld]:

max_allowed_packet=32M
wait_timeout=288000
skip-name-resolve

y el mensaje de error cambió, ahora dice:

"Argumentos errados para mysqld_stmt_execute"

Les copio el código del procedimiento de inserción de BLOB:

Código:
bool TBaseDeDatos::AlmacenarBLOB(AnsiString cons, const char *param,
unsigned long lngParam) {
lcl_MySQL_Error = "";
lcl_NumFilas = 0;
lcl_CodError = 0;
mysql = mysql_init(NULL);
my_bool reconnect = 1;

if (!mysql) {
lcl_MySQL_Error = "No se pudo inicializar la base de datos: " +
(AnsiString) mysql_error(mysql);
return false;
}
else {
mysql_options(mysql, MYSQL_OPT_COMPRESS, 0);
mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect);
mysql->reconnect = 1;

if (!mysql_real_connect(mysql, prihost.c_str(), priusr.c_str(),
pripass.c_str(), prinombd.c_str(), PuertoMYSQL, NULL, 0)) {
lcl_MySQL_Error = "No se pudo conectar a la base de datos: " +
(AnsiString) mysql_error(mysql);
return false;
}
else {
if (mysql_select_db(mysql, prinombd.c_str())) {
lcl_MySQL_Error = "No se pudo abrir la base de datos: " +
(AnsiString) mysql_error(mysql);
return false;
}
else {

MYSQL_BIND bind[1];
unsigned long length;
st_mysql_stmt *stmt = mysql_stmt_init(mysql);

if (!stmt) {
lcl_MySQL_Error = "No hay memoria suficiente: " +
(AnsiString) mysql_error(mysql);
return false;
}

if (mysql_stmt_prepare(stmt, cons.c_str(),
StrLen(cons.c_str()))) {
lcl_MySQL_Error = "No se pudo preparar la consulta: " +
AnsiString(mysql_stmt_error(stmt));
return false;
}

memset(bind, 0, sizeof(bind));
bind[0].buffer_type = MYSQL_TYPE_BLOB;
bind[0].buffer = (char*)param;
bind[0].length = &length;
bind[0].is_null = 0;
mysql_ping(mysql);

if (mysql_stmt_bind_param(stmt, bind)) {
lcl_MySQL_Error = "No se pudo enlazar el parámetro: " +
AnsiString(mysql_stmt_error(stmt));
return false;
}

if (mysql_stmt_send_long_data(stmt, 0, (const char *)param,
lngParam)) {
lcl_MySQL_Error = "No se pudo insertar el parámetro: " +
AnsiString(mysql_stmt_error(stmt));
return false;
}

if (mysql_stmt_execute(stmt)) {
lcl_MySQL_Error = "No se pudo ejecutar la consulta: " +
AnsiString(mysql_stmt_error(stmt));
return false;
}
ultimoID = mysql_insert_id(mysql);
}
}
return true;
}
}


En línea

LucasBols

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Error al insertar BLOB con libmysql.dll
« Respuesta #2 en: 31 Mayo 2012, 18:58 pm »

El mensaje no se presenta solamente en Windows XP, sino que se presenta cuando intento acceder a MySQL ubicado en un servidor de la red o remoto.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error insertar sub en virtual dub « 1 2 3 »
Multimedia
soytiti 26 7,897 Último mensaje 25 Octubre 2004, 02:54 am
por mbruch
me da un error al insertar un subtitulo en un avi
Multimedia
serpuc 7 2,482 Último mensaje 24 Septiembre 2005, 14:03 pm
por Songoku
Error al insertar CD
Software
mabe 1 2,963 Último mensaje 10 Abril 2007, 19:40 pm
por ‭lipman
Error en al insertar
PHP
jagltoro 6 2,492 Último mensaje 8 Abril 2012, 20:14 pm
por jagltoro
error al insertar en la base de datos
.NET (C#, VB.NET, ASP)
andaluz 6 5,279 Último mensaje 26 Mayo 2012, 16:09 pm
por HdM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines