Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-05-2012
LucasBols LucasBols is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 10
Poder: 0
LucasBols Va por buen camino
Ayuda con error en conexión a MySQL remota

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;
	}
}


Responder Con Cita
  #2  
Antiguo 31-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No conozco bien mysql, pero cuando hablas de insertar en una BD local o remota, se supone que son distintas bases de datos, no?
Supongo que tendrás alguna configuración para elegir la base de datos o algo así?
Responder Con Cita
  #3  
Antiguo 31-05-2012
LucasBols LucasBols is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 10
Poder: 0
LucasBols Va por buen camino
No, la estructura de la base de datos local es identica a la remota, ambos motores son MySQL
Una en 127.0.0.1:3306 y la otra en 192.168.1.100:3306
Ambas con la misma configuración (my.ini copiado a Linux, la remota)
Tengo una tecer base de datos remota idéntica a las anteriores en Win 2008, genera el mismo error.

Cuando desarrolle esta aplicación, lo hice con el motor local, las pruebas las comencé en la local, y ahora la pase a la remota.
Responder Con Cita
  #4  
Antiguo 31-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por LucasBols Ver Mensaje
Cuando desarrolle esta aplicación, lo hice con el motor local, las pruebas las comencé en la local, y ahora la pase a la remota.
A ver si las bases de datos son distintas, se ha quedado olvidado algo por ahí
Responder Con Cita
  #5  
Antiguo 04-06-2012
LucasBols LucasBols is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 10
Poder: 0
LucasBols Va por buen camino
No creo,

La migración de la base de datos local a la remota lo hice con un dump y un restore

esta es la tabla (verificado, en las dos bd está igual):

Código SQL [-]
CREATE TABLE IF NOT EXISTS `imagen` (
  `idx_imagen` bigint(20) NOT NULL AUTO_INCREMENT,
  `idx_documento` bigint(20) NOT NULL,
  `imagen` longblob NOT NULL,
  `identificador` text NOT NULL,
  `nombre` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`idx_imagen`,`idx_documento`),
  UNIQUE KEY `idx_imagen_UNIQUE` (`idx_imagen`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Esta es la consulta de inseción:

Código SQL [-]
Insert Into imagen (idx_documento, imagen, identificador, nombre) Values (0, ?, "idarch_xxx", "imagen_XXX.jpg");

Gracioas por tu respuesta,

Saludos,

Última edición por LucasBols fecha: 04-06-2012 a las 14:47:37.
Responder Con Cita
  #6  
Antiguo 04-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola LucasBols.

Por favor cuando incluyas código en tus mensaje utiliza TAG's para darle más legibilidad. Esta imágen explica el uso:



Saludos y gracias por tu colaboración.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 04-06-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
No mencionas si en todos los casos la versión del motor es la misma, ya que aunque las estructuras sean idénticas las dll no son iguales en todas las versiones. Es decir, en todas funcionará si usas una dll "nueva" en versiones anteriores (a menos que descontinúen alguna función) pero no a la inversa.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 04-06-2012
LucasBols LucasBols is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 10
Poder: 0
LucasBols Va por buen camino
Hola,

Los motores son:
Linux 5.1.49
Windows 7 x86_64 5.5.8 (XAMPP)
Windows 2008 5.5.25

La libmysql.lib la generé con implib desde la dll

Las librerías con las que estoy probando van desde la 4.x.x hasta la 6.0.2

Estoy completamente desorientado, a tal punto que estoy probando de mandar las imagenes con una consulta estandard y la imagen en hexa

Gracias por la respuesta,
Saludos.

Última edición por LucasBols fecha: 04-06-2012 a las 18:48:57.
Responder Con Cita
  #9  
Antiguo 04-06-2012
LucasBols LucasBols is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 10
Poder: 0
LucasBols Va por buen camino
Noto que el mensaje de error comienza con mysqld y la función es mysql_stmt_execute

Cita:
Argumentos errados para mysqld_stmt_execute
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Conexión remota con Mysql voldemmor Conexión con bases de datos 14 23-11-2009 16:36:51
Conexion remota con MySQL golf2008 MySQL 12 21-01-2009 10:49:41
Conexion remota a mysql richy08 Conexión con bases de datos 3 07-01-2009 19:54:29
Conexion Remota a MySql lKinGl Conexión con bases de datos 2 24-11-2008 15:23:00
Conexion remota a mysql cahosoft MySQL 1 11-10-2004 10:37:41


La franja horaria es GMT +2. Ahora son las 00:29:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi