Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Conexion a MySQL sin BDE ni ODBC (https://www.clubdelphi.com/foros/showthread.php?t=1092)

seduerey 03-06-2003 22:42:39

Conexion a MySQL sin BDE ni ODBC
 
He probado varias fórmulas para ello.

Estoy usando MySql 4.0, la libreria que incluye esta distribucion, y me da una excepcion cuando intento conectar al servidor de BBDD que he arrancado previamente, es decir, en el mysql_connect.

este es el código que he usado, se activa, como podeis ver, cuando pulsamos el boton(es una prueba muy tonta, lo se).

procedure TForm2.BitBtn1Click(Sender: TObject);
var
mysqlcon: TMySQL; // MySQL-connection structure
presults: pmysql_res; // Pointer to a results structure
begin
// Connect to the server
mysql_connect(@mysqlcon, 'localhost', 'login', 'passw');
if mysqlcon.net.last_errno <> 0 then begin
ShowMessage (Trim(mysqlcon.net.last_error));
exit;
end;
// Open the mysql database
if mysql_select_db(@mysqlcon, 'mysql') <> 0 then begin
mysql_close(@mysqlcon); // Disconnect
ShowMessage('Couldn''t open mysql database');
exit;
end;
presults:= nil;
try
// Send the query to the server and get the results
mysql_query(@mysqlcon, 'SELECT * FROM user');
presults := mysql_store_result(@mysqlcon);
if presults.row_count <> 1 then
ShowMessage('va a ser eso');
finally
mysql_free_result(presults); // Release memory
mysql_close(@mysqlcon); // Disconnect
end;
end;


Se que será lo más tonto de la historia, pero me salvaríais la vida (o casi)

roman 04-06-2003 00:16:16

Cita:

// Connect to the server
mysql_connect(@mysqlcon, 'localhost', 'login', 'passw');
La estructura mysqlcon no esta inicializada. Debes hacerlo con

mysql_init(nil)

Por otro lado no sé que tantos cambios hayan para la versión 4 pero hasta la versión 3.xx la forma correcta de obtener los errores es con las funciones mysql_errno() y mysql_error() en lugar de acceder directamente a la estructura net.

También es más fácil si declaras mysqlcon como PMYSQL en lugar de TMYSQL. En Delphi puedes omitir el operador de referencia "^". Esto es, si declaras

Código:

var
  mysqlcon: PMYSQL;

puedes poner mysqlcon.net en lugar de mysqlcon^.net

// Saludos

seduerey 04-06-2003 21:51:46



Ya he puesto el codigo que me has dicho y me da la excepcion de ahí arriba, o sea, la misma, pero una línea antes (tengo arrancado el servidor mysqld-opt.exe, que es el que me arranca normalmente para el PHP).

He usado la estructura net xq ya estaba desesperaito de la vida

Un saludo y gracias

roman 04-06-2003 22:22:37

¿Falla en mysql_init?

La función mysql_init no puede fallar

Dicho esto ahora me explico:

En principio lo único que mysql_init hace es asignar memoria para una estructura TMYSQL y devuelve un apuntador a dicha memoria, de manera que la única razón por la que puede fallar es por falta de memoria en cuyo caso la conexión será el menor de tus problemas :)

Como no creo que este sea el caso, la única razón que imagino es que la estructura TMYSQL no corresponda a la estructura que espera mysql_init.

Esto puede suceder si el archivo pascal que utilizas para acceder a libmysql.dll no corresponde a la versión de esta librería.

No sé qué archivo pascal uses para importar las funciones de libmysql.dll, quizá sea el de Matthias Fichtner que funciona hasta la versión 3.49. Dado que hubo muchos cambios en la versión 4 es posible que debas actualizar aunque desconozco dónde se puede adquirir la actualización.

// Saludos

seduerey 04-06-2003 22:47:27

No, si lo de que no falla, lo suponia, pero ya ves.

He usado la dll que venia con al distribucion de MySQL que me bajé anteayer, ya que la que tu me dices la tenía y daba el mismo fallo... si está visto que lo que no me pase a mi....

seduerey 04-06-2003 22:48:31

ah, 256 MB de RAM.... asi que eso no creo :(

@-Soft 05-06-2003 14:11:11

hola

disculpa mi pregunta, no has pensado en utilizar componentes nativos como el WinZeos que sirven para conectar tablas mysql con delphi.

gracias, buena suerte.

android_beat 06-06-2003 22:49:22

tengo una gran problema bueno 2 ya puedo conectarme con la libreria libmySQL.dll y mysql.pas y por loq ue e visto esta super rapido pero tengo un problema en esta declaracion

mysql_query(@mysqlcon, 'SELECT * FROM Usuarios Where Usuario="ccedulas"');

quiero que enlugar de teclear el Usuario que quiero que es ccedulas lo ponga yo en un campo y me aga el query

cundo me conectaba por medio de odbc lo hacia haci
Datos.Usuarios.SQL.Add('SELECT * FROM Usuarios WHERE Usuario='+ '''' + Usuario.Text + ''''+ ' AND Contrasena='+ '''' + Contrasena.Text + '''');


como puedo hacer para hacer lo mismo usando las librerias ya que intente acomodarlo pero no sale me marca un error con el pChar() que no son compatibles

bueno el otro problemas es que ya que los baje me ponga todos los registros encontrados en un Ttable

bueno espero y algien me pueda ayudar o que me diga como usar otra coneccion que no sea odbc por que si la ponco por odbc y no por medio de codigo o corba pues te puedes meter a las tablas mysql por medio de un query desde exel y eso como que no es muy seguro

bueno grax y me despido :rolleyes:

seduerey 07-06-2003 13:05:41

Hola, soy yo de nuevo. Ya consigo conectar, era un problema que arrastraba de otro modulo.

En cuanto a tu problema, android, puedes hacer lo siguiente....

pchar(concat(str1,....,strN));
//pchar te convierte la string en un Pchar.

era eso? sino pues ya dimelo

android_beat 09-06-2003 18:15:00

mira haci si jala

mysql_query(@mysqlcon, 'SELECT * FROM Usuarios Where Usuario="ccedulas" ');


pero haci no
lo que quiero es no poner yo el ccedulas sino uno desde un .text


y puese esto y no jala

mysql_query(@mysqlcon, 'SELECT * FROM Usuarios Where Usuario='+pchar(concat(usuario.text))+');

:mad: :confused: :confused: :confused: :confused:

roman 09-06-2003 18:42:53

Cita:

Posteado originalmente por android_beat
...y puese esto y no jala

mysql_query(@mysqlcon, 'SELECT * FROM Usuarios Where Usuario='+pchar(concat(usuario.text))+');

PChar debe abarcar toda la cadena:

Código PHP:

mysql_query(@mysqlconPChar('SELECT * FROM Usuarios WHERE Usuario = ' Usuario.Text ')')); 

Por cierto, aquí el concat no pinta nada.

Yo te recomendaría hacer una función que se encargue de una vez y para siempre del paso de pchar a string. Por ejemplo:

Código:

function MyQuery(Conn: PMYSQL; Sql: String);
begin
  Result := mysql_query(Conn, PChar(Sql));
end;

Tu consulta quedaría así:

Código PHP:

  my_query(@mysqlcon'SELECT * FROM Usuarios WHERE Usuario = ' Usuario.Text ')'); 

y así con cualquier otra consulta que hagas.

// Saludos

roman 09-06-2003 19:13:26

Una corrección: en el código anterior, Usuario.Text debe rodearse con las comillas que requiere la consulta. Una forma de hacer esto sin liarse con dobles comillas es con la función QuotedStr:

QuotedStr(Usuario.Text);

// Saludos


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

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