Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Violación al ejecutar Query con MySQL (https://www.clubdelphi.com/foros/showthread.php?t=79291)

Angel.Matilla 22-06-2012 11:19:37

Violación al ejecutar Query con MySQL
 
Vamos por partes. Tengo instalado MySQL Server 5.5 con el driver ODBC 5.1 y una conexión a la base de datos mediante TDatabase y TSession.

1. A pesar de estar definidos en los parámetros usuario y clave de la base de datos y estar puesto LoginPrompt a false siempre que empiezo la ejecución me pide ambos datos. No me importa porque es una aplicación que sólo voy a usar yo en local, pero me sorprende que lo haga. La conexión la hago así:
Código:

dAsociacion->Connected = false;
dAsociacion->Params->Clear();
dAsociacion->Params->Add("DATABASE NAME=asociacion");
dAsociacion->Params->Add("ODBC DSN=Asociacion_SQL");
dAsociacion->Params->Add("OPEN MODE=READ/WRITE");
dAsociacion->Params->Add("BATCH COUNT=200");
dAsociacion->Params->Add("LANGDRIVER=");
dAsociacion->Params->Add("MAX ROWS=-1");
dAsociacion->Params->Add("SCHEMA CACHE DIR=");
dAsociacion->Params->Add("SCHEMA CACHE SIZE=8");
dAsociacion->Params->Add("SCHEMA CACHE TIME=-1");
dAsociacion->Params->Add("SQLPASSTHRU MODE=SHARED AUTOCOMMIT");
dAsociacion->Params->Add("SQLQRYMODE=");
dAsociacion->Params->Add("ENABLE SCHEMA CACHE=FALSE");
dAsociacion->Params->Add("ENABLE BCD=FALSE");
dAsociacion->Params->Add("ROWSET SIZE=20");
dAsociacion->Params->Add("BLOBS TO CACHE=64");
dAsociacion->Params->Add("BLOB SIZE=32");
dAsociacion->Params->Add("USER NAME=root");
dAsociacion->Params->Add("PASSWORD=toledo");

sAsociacion->PrivateDir = ExtractFilePath(Application->ExeName);
sAsociacion->ConfigMode = cmSession;
sAsociacion->NetFileDir = ExtractFilePath(Application->ExeName) + "NetFile";

try
{
    sAsociacion->Active    = true;
    dAsociacion->Connected = true;
    sAsociacion->OpenDatabase(dAsociacion->DatabaseName);
}
catch(...)
{
}

donde dAsociacion es el TDatabase y sAsociacion es el TSession.

2. Tengo este TQuery:
Código:

SELECT num_socio, AES_DECRYPT(apellidos, 'Ju86Lfgsje340qW') apellidos, AES_DECRYPT(nombre, 'Ju86Lfgsje340qW') nombre, login_socio, activado FROM inscripciones WHERE activado = 'A' ORDER BY apellidos, nombre, num_socio
se ejecuta sin errores (al hacer el Open es cuando me pide usuario y clave de la base de datos). Con ese query quiero cargar un TListView de la siguiente forma:
Código:

for (; !Query->Eof; Query->Next())
{
    pItem = Lista->Items->Add();
    pItem->Caption = Query->FieldByName("apellidos")->AsString + ", " + Query->FieldByName("nombre")->AsString;
    pItem->SubItems->Add(Query->FieldByName("login_socio")->AsString);
    pItem->SubItems->Add(Query->FieldByName("num_socio")->AsInteger);
    pItem->SubItems->Add(Query->FieldByName("activado")->AsString);
}

Es un código que jamás me ha dado problemas, pero en este caso una vez que ha cargado el primer registro y hago el segundo Add me da este error:
Cita:

Acces violation at address xxxx in module IDOBC32.DLL
siempre en el segundo Add y de ahí no pasa. Le he dado mil vueltas y no entiendo por qué me da ese error.

Por si acaso he probado cambiando el TListView por un TDBGrid y funciona casi bien; y digo casi bien porque en las dos primeras columnas (apellidos y nombre) en vez de el contenido de las mismas aparece el litereal (VARBYTES).

3. Otra cosa: En el query hago que viaje el valor de la clave de encriptación de los datos porque no he conseguido reemplazarla por una variable de MySQL. Según el manual debería ser $Clave, pero le da lo mismo. ¿Por qué puede ser? No me gustaría tener que ponerla a capón.

kapcomx 22-06-2012 18:49:05

usuario y clave
 
Cita:

Empezado por Angel.Matilla (Mensaje 435831)
1. A pesar de estar definidos en los parámetros usuario y clave de la base de datos y estar puesto LoginPrompt a false siempre que empiezo la ejecución me pide ambos datos.

ke tal Angel a mi me pasaba los mismo en una conexion a mysql con con dbexpress en XE2, le puse al sqlconnection la propiedad loginprompt en false y listo..

penosamente no te puedo ayudar mucho con tu problema ya que practicamente no he utilizado el ADO, siempre he trabajado Mysql con Zeos, no se que Delphi tengas tal vez si lo intentas con zeos te valla mejor

Saludos...:cool:

Angel.Matilla 24-06-2012 10:19:20

Gracias por la respuesta, pero si lees el principio de mi mensaje indico que LoginPrompt está a false y lo que estoy usando son TDatabase, TSession y TQuery de la paleta DataAcces y ni TADO; los componentes Zeos no he sido capaz de instalarlos ni a tiros.

Lo úncio que se me ha olvidado es que uso C++ Builder 5.


La franja horaria es GMT +2. Ahora son las 22:08:51.

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