Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   No puedo conectar BD con MySQLDAC (https://www.clubdelphi.com/foros/showthread.php?t=89162)

aguml 07-10-2015 14:08:45

No puedo conectar BD con MySQLDAC
 
Hola amigos, estoy probando DAC para MySQL y lo primero que he tenido que hacer es instalar MySQL y ya eso se me ha hecho cuesta arriba porque me daba errores al instalarse y lo he tenido que instalar tres veces.
Una vez instalado mysql he instalado MySQLDAC y para probarlo añado un TmySQLDatabase y le pongo el UserName, UserPassword, Host, DatabaseName y cuando intento poner a true la propiedad Connected me tira un error. Asi está el componente configurado:

Código:

  object mySQLDatabase1: TmySQLDatabase
    DatabaseName = 'dbdemos'
    UserName = 'root'
    UserPassword = '45659345'
    Host = 'localhost'
    ConnectOptions = [coCompress]
    Params.Strings = (
      'Port=3306'
      'TIMEOUT=30'
      'DatabaseName=dbdemos'
      'Host=localhost'
      'PWD=45659345'
      'UID=root')
    DatasetOptions = []
    Left = 112
    Top = 64
  end

Y este es el error:
Cita:

Error: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR) Message: Unknown database 'dbdemos'
O sea que no encuentra la base de datos y estoy usando la que viene con los demos del mismo componente y la tengo en el mismo directorio donde tengo el proyecto actual. ¿que hago mal?

aguml 07-10-2015 16:35:46

Se me olvidó decir que al reiniciar el pc siempre me suelta dos mensajes el MySQL Notifier:
Primer mensaje:
Cita:

High Severity Error
Cannot open Service Control Manager on computer 'localhost'. This operation might require other privileges.
Segundo mensaje:
Cita:

High Severity Error
Object reference not set to an instance of an object.
Soy administrador asi que no se a que se refiere con que requiere otros privilegios.

roman 07-10-2015 17:45:50

No sé, algo me suena extraño aquí. dbdemos se parece más a la base de datos que viene de ejemplo con el BDE Paradox y, por otro lado, a diferencia de Paradox, las bases de datos en MySQL no se colocan físicamente en un directorio de la aplicación si no que todas viven en un directorio del servidor y los clientes no tienen acceso directo a ellas. Aún suponiendo que la base dbdemos es, como dices, un ejemplo de MySqlDac, raramente se instalan copiando directamente el archivo o archivos físicos. Más bien consisten en scripts con las sentencias CREATE, INSERT y UPDATE que debes ejecutar para recrear la base,

// Saludos

aguml 07-10-2015 19:44:18

Yo antes usaba SQLite y simplemente ponia la base de datos al lado del ejecutable y la dll y podia hacer lo que quisiera con ella conectandome a ella sin problemas.
Ahora quiero ver MySQL pero no tengo ni idea. ¿quieres decir que MySQL tiene que estar obligatoriamente en un servidor de internet? ¿No sirve para gestionar una base de datos que tengas en el mismo pc?

roman 07-10-2015 19:51:32

Sí que puedes. Pero aún estando instalada en tu propia pc, sigue siendo un servidor. De todas formas, y para no desviarte más, en tu mensaje original se ve que tu servidor está bien instalado y tienes acceso a él, es decir, puedes conectarte sin problemas. El error es simplemente que no existe esa base de datos en el servidor local.

Intenta conectarte sin especificar la base de datos (el parámetro DatabaseName) y manda una consulta como esta:

Código SQL [-]
show databases;

Eso debería devolverte la lista de las bases de datos que hay instaladas en tu servidor local.

// Saludos

aguml 07-10-2015 19:55:40

¿Donde pongo eso? en la consola me dice que no existe ese comando.
¿Donde se supone que está mi servidor local para poner ahi mi base de datos y que la encuentre?

aguml 07-10-2015 20:08:23

vale, despues de hacer varias pruebas he conseguido que me muestre lo que indicas:

Cita:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| test |
| world |
+--------------------+

6 rows in set (0.34 sec)
¿Donde se supone que estan esas bases de datos?

roman 07-10-2015 20:09:51

Abre una ventana de comandos (cmd.exe) y ejecuta:

Código:

C:> mysql -uroot -p
Si no puedes, entonces debes poner la ruta de mysql en el PATH. Una vez que tengas acceso al prompt de mysql:

Código:

mysql>
ahí escribes la consulta que te puse.

// Saludos

roman 07-10-2015 20:13:45

Ja, ja. Terminé de escribir después de tu nuevo mensaje.

Pues ahí es donde ves claramente que no hay una base dbdemos instalada.

Puedes usar herramientas como phpMyAdmin (web) o MySQL Workbench (propia de mysql y gratuita) para crear tus bases y tablas.

Por cierto, las tres primeras bases que te muestra, no las toques. sakila y world seguramente sí son demos y test está vacía y puedes jugar ahí.

Para ver qué tablas tiene una base, ejecuta la consulta

Código:

show tables;
asegurándote antes de tener la base deseada seleccionada.

// Saludos

aguml 07-10-2015 22:30:23

De momento hasta saber como trabajar con la BD que deseo estoy investigando un poco con una de las que aparece en la lista pero solo para hacer consultas. Tengo esto para hacer una consulta:
Código PHP:

if(EditName->Text.IsEmpty() && !EditId->Text.IsEmpty())
      
mySQLQuery1->SQL->Add(AnsiString().sprintf("SELECT * FROM actor WHERE actor_id LIKE '%%%s%'",EditId->Text));
   else if(
EditId->Text.IsEmpty() && !EditName->Text.IsEmpty())
      
mySQLQuery1->SQL->Add(AnsiString().sprintf("SELECT * FROM actor WHERE first_name LIKE '%%%s%%'",EditName->Text));
   else if(!
EditName->Text.IsEmpty() && !EditId->Text.IsEmpty())
      
mySQLQuery1->SQL->Add(AnsiString().sprintf("SELECT * FROM actor WHERE actor_id LIKE '%%%s%' AND first_name LIKE '%%%s%%'",EditId->Text,EditName->Text)); 

Se supone que si no hay nada escrito en el Edit del nombre pero si hay algo en el del Id busca por el id, si es al contrario busca por el nombre, y si hay algo escrito en ambos busca por ambos. En el tercero me falla ya que solo me da coincidencias correctas con el id pero no por el nombre. O sea que si fuese id=22334 y nombre=peter, si en el edit del nombre pongo "c" y en el del id pongo "22" me lo mostrará aunque la "c" no aparece en peter ¿como seria eso para que funcione correctamente?

aguml 07-10-2015 23:36:45

Vale, ya me di cuenta de mi error. Me había comido algunos signos de porcentaje.
Ahora otra cosa más. La idea es que en la consulta me salgan los resultados que se adecuan a esos parámetros de la consulta y que al hacer clic en uno de ellos se rellenen los tedits con los valores de las celdas de esa fila. Uso un dbgrid ¿alguien sabe como hacer eso? Lo he hecho pero con listboxs y esto es diferente y no veo como hacerlo. Lo único que tengo hasta ahora es que el dbgrid lo he puesto de solo lectura, que no pueda editar, y que seleccione la fila seleccionada.
Y otra cosa. La idea es que si tengo por ejemplo 20 caramelos en la base de datos y yo elijo esa línea e indico en un tedit que cojo 5 pues esos 5 se resten. ¿eso se puede hacer desde la mysqlquery o tengo que usar un mysqltable? ¿como seria eso? Hay un componente mysqlupdate ¿es para eso?


La franja horaria es GMT +2. Ahora son las 10:34:35.

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