Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2003
seduerey seduerey is offline
Miembro
 
Registrado: jun 2003
Posts: 60
Poder: 21
seduerey Va por buen camino
Unhappy 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)

Última edición por seduerey fecha: 03-06-2003 a las 22:46:01.
Responder Con Cita
  #2  
Antiguo 04-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 04-06-2003
seduerey seduerey is offline
Miembro
 
Registrado: jun 2003
Posts: 60
Poder: 21
seduerey Va por buen camino


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
Responder Con Cita
  #4  
Antiguo 04-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #5  
Antiguo 04-06-2003
seduerey seduerey is offline
Miembro
 
Registrado: jun 2003
Posts: 60
Poder: 21
seduerey Va por buen camino
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....
Responder Con Cita
  #6  
Antiguo 04-06-2003
seduerey seduerey is offline
Miembro
 
Registrado: jun 2003
Posts: 60
Poder: 21
seduerey Va por buen camino
ah, 256 MB de RAM.... asi que eso no creo
Responder Con Cita
  #7  
Antiguo 05-06-2003
Avatar de @-Soft
@-Soft @-Soft is offline
Miembro
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 200
Poder: 21
@-Soft Va por buen camino
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.
__________________
Ivan Lora

http://www.arrobasoft.da.ru

Valientes son aquellas personas que triunfan donde otros fracasan.
Bienaventurado los que nada esperan porque jamas seran defraudados.
Responder Con Cita
  #8  
Antiguo 06-06-2003
android_beat android_beat is offline
Miembro
 
Registrado: may 2003
Ubicación: morelia michoacan mexico
Posts: 40
Poder: 0
android_beat Va por buen camino
Angry

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
__________________
La programación llena mi vida como lo hace la música electrónica
Responder Con Cita
  #9  
Antiguo 07-06-2003
seduerey seduerey is offline
Miembro
 
Registrado: jun 2003
Posts: 60
Poder: 21
seduerey Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 09-06-2003
android_beat android_beat is offline
Miembro
 
Registrado: may 2003
Ubicación: morelia michoacan mexico
Posts: 40
Poder: 0
android_beat Va por buen camino
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))+');

__________________
La programación llena mi vida como lo hace la música electrónica
Responder Con Cita
  #11  
Antiguo 09-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #12  
Antiguo 09-06-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
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


La franja horaria es GMT +2. Ahora son las 09:10:32.


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