![]() |
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) |
Cita:
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 // Saludos |
![]() 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 |
¿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 |
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.... |
ah, 256 MB de RAM.... asi que eso no creo :(
|
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. |
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: |
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 |
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: |
Cita:
Código PHP:
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); Código PHP:
// Saludos |
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 21:08:56. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi