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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / C++Builñder - Drag & Drop hacia explorer en: 2 Julio 2012, 00:26 am
Hola, buenas tardes,

Tengo una aplicación ( con XE, aunque importa tanto como que tengo el patio mojado ) con un listado de archivos almacenados en un BLOB, cada uno de estos ítems deben poder extraerse de la base de datos y almacenarse en una carpeta del disco.

¿Como puedo hacer esto con drag & drop?

Supongo que debo capturar un mensaje del sistema y en ese momento avisarle que estoy por mandar una ruta, pero no encuentro nada similar a TWMDragFiles

Saludos
2  Programación / Programación C/C++ / Ayuda con error en conexión a MySQL remota en: 31 Mayo 2012, 21:38 pm
Hola,
Tengo una aplicación desarrollada en C++Builder XE y uso la libmysql.dll
Cuando inserto una imagen en un campo BLOB en la base de datos local (en la misma máquina que la aplicación) la inserción se realiza correctamente, pero cuando inserto en una base de datos remota (dentro de la LAN) mysql_stmt_execute me genera este error:
"Argumentos errados para mysql_stmt_execute"
¿Qué estoy haciendo mal?
Muchas gracias por cualquier ayuda,
Este es el código del procedimiento para insertar BLOBs

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);
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
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);
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
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);
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
return false;
}
else
{
mysql_autocommit(mysql, TRUE);
MYSQL_BIND bind[1];
MYSQL_STMT *stmt = mysql_stmt_init(mysql);
if(!stmt)
{
lcl_MySQL_Error = "No hay memoria suficiente: " + (AnsiString) mysql_error(mysql);
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
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));
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
return false;
}
memset(bind, 0, sizeof(bind));
bind[0].buffer_type = MYSQL_TYPE_BLOB;
bind[0].buffer  = (void*)param;
bind[0].length = &lngParam;
bind[0].is_null = 0;
/* Bind the buffers */
if(mysql_stmt_bind_param(stmt, bind))
{
lcl_MySQL_Error = "No se pudo enlazar el parámetro: " + AnsiString(mysql_stmt_error(stmt));
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
return false;
}
/* Supply the next piece of data */
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));
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
return false;
}
//###########################//
//##                       ##//
//##   ACA ESTA EL ERROR   ##//
//##                       ##//
//###########################//
/* Now, execute the query */
if (mysql_stmt_execute(stmt))
{
lcl_MySQL_Error = "No se pudo ejecutar la consulta : " + AnsiString(mysql_stmt_error(stmt));
RegError = "** " + lcl_MySQL_Error + " // " + AnsiString(__FILE__) + " // " + AnsiString(__FUNC__) + " Ln: " + IntToStr(__LINE__) + "\n";
return false;
}
ultimoID = mysql_insert_id(mysql);
mysql_stmt_close(stmt);
}
}
return true;
}
}
3  Programación / Programación C/C++ / Re: Error al insertar BLOB con libmysql.dll 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.
4  Programación / Programación C/C++ / Re: Error al insertar BLOB con libmysql.dll 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;
}
}
5  Programación / Programación C/C++ / 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.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines