IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

mysql.pas , mylibsql et MySQL 5.0 : Problème de création de Database


Sujet :

Delphi

  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut mysql.pas , mylibsql et MySQL 5.0 : Problème de création de Database
    Bonjour,

    J'ai parcouru un peu le forum, lu le tuto et cherché sur google comment utiliser le fichier mysql.pas mais je n'arrive pas à créer ma base de données. Je suis également le tuto situé ici.

    J'ai télécharger le fichier mysql.pas ici et normalement (sauf erreur de ma part, ça devrait être bon).

    J'ai poussé plus loin les recherche en utilisant Dependency Walker pour lire la dll libmySQL( donc pris dans le répertoire de MYSQL après installation de ce dernier).

    Voilà, je pense que toutes les infos sont là... Je ne poste pas de code car j'ai suivis pour le moment le tuto cité plus haut.

    Si quelqu'un peut m'éclaircir, merci

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    ça manque un peu de précision ton message, quel est le problème ?!

    ton programme plante avec une erreur ? il te retourne une erreur MySQL ?

    sinon, pour MySQL j'ai développé une unité qui se connecte directement sur le serveur sans passer par la DLL client Mais je n'ai pas encore testé sur un MySQL 5

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut tothpaul et merci de t'intéresser à mon cas

    Pour les infos complémentaires, le programme compile bien, j'arrive à me connecter à mysql pour contre, je n'arrive pas à créer un nouvelle bd (donc mysql_create_db). J'ai le message d'erreur ... (voir photo en bas de page ...)

    En fait, et là encore, sauf erreur de ma part, en explorant la dll libmysql, je ne vois à aucun moment l'instruction mysql_create_db...

    Sinon, pour ta source, comme c'est présenté dans le fichier readme, j'ai pas l'impression que l'on puisse créer une bd ... car tu mets cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MySQL.Login('user','pass','database');
    Voilà, et merci encore
    Images attachées Images attachées  

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    lol, c'est une instruction SQL qui permet de créer une DATABASE ! pas une fonction de la bibliothèque !

    dans MySQLClient, le paramètre Database est optionel, et de toute façon, le CREATE DATABASE peut se faire "depuis" une autre base.

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par tothpaul
    lol, c'est une instruction SQL qui permet de créer une DATABASE ! pas une fonction de la bibliothèque !
    Heu ... oui mais je saisi pas tout là

    Dans mysql.pas, on a bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_create_db: function(_mysql: PMYSQL; const DB: pChar): longint; stdcall;
    assign_proc(@mysql_create_db, 'mysql_create_db');
    Donc, si je ne me trompe pas, dans la dll, on devrait retrouver également le mysql_create_db ... non?

    EDIT:

    Je viens te tester ton source, est c'est niquel!
    Avec le code ci-dessous, je crée bien ma bd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.FormCreate(Sender: TObject);
    var
    i:integer;
    begin
    sql:=TMySQLClient.Create;
    sql.Open('127.0.0.1');
    sql.Login('root','xxx');
    sql.ExecSQL('CREATE DATABASE ero-sennin');
    sql.Free;
    end;
    Cependant, j'aimerai aussi passer par mysql.pas, histoire de cerner les 2, donc pour le moment je laisse le topic ouvert

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par ero-sennin
    Heu ... oui mais je saisi pas tout là

    Dans mysql.pas, on a bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_create_db: function(_mysql: PMYSQL; const DB: pChar): longint; stdcall;
    assign_proc(@mysql_create_db, 'mysql_create_db');
    Donc, si je ne me trompe pas, dans la dll, on devrait retrouver également le mysql_create_db ... non?
    En effet, j'ai regardé, il existe une commande "COM_CREATE_DB" qu'on retrouve d'ailleurs dans mon unité MySQLClient.pas.
    Mais de ce que je vois dans la doc, cette fonction est désapprouvée, et l'usage de la requête SQL est recommandé

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Cependant, j'ai une question à te poser avec ta méthode... Lorsque je souhaite créer mes tables, j'envoie directement le contenu du RichEdit ... et là c'est le drame.

    Pièce jointe 14773

    Ma requête est correcte, je l'ai testé directement sous MySQL ...

    Merci

    EDIT


    Par le mysql_query de l'unité mysql.pas, je suis parvenu à créer ma bd ...
    Je teste voir si en passant pas cette unité j'ai la même erreur

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par ero-sennin
    Cependant, j'ai une question à te poser avec ta méthode... Lorsque je souhaite créer mes tables, j'envoie directement le contenu du RichEdit ... et là c'est le drame.

    Pièce jointe 14773

    Ma requête est correcte, je l'ai testé directement sous MySQL ...

    Merci
    je suppose que tu voulais parler de phpMyAdmin

    l'exception est levée par mon objet suite à l'erreur retournée par MySQL.
    Et comme on le voit dans le message, tu envoies deux requêtes séparées par un ";", ce qui n'est pas correcte

    je ne sais pas si la DLL autorise son usage, mais mon objet (et le serveur MySQL) attend une seule requête sans ;
    Si tu veux executer plusieurs requêtes, il faut les exécuter les unes après les autres.

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Ok, ba je viens de faire en sorte que les requête s'exécute une par une, mais apparemment, ça ne fontionne pas...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if (not erreur) then
      begin
        MySQL:=TMySQLClient.Create;
        MySQL.Open('127.0.0.1');
        MySQL.Login(Trim(EditUserName.Text),Trim(EditMpd.Text));
        MySQL.ExecSQL('CREATE DATABASE IF NOT EXISTS '+Trim(EditNameBD.Text)+';');
        MySQL.Select(Trim(EditNameBD.Text));
        i:=0;
        requete:='';
        while i<=RichEditScriptTable.Lines.Count-1 do
        begin
        requete:=Trim(requete)+Trim(RichEditScriptTable.Lines.Strings[i]);
          if Pos(';',requete)<>0 then
          begin
            MySQL.ExecSQL(Trim(requete));
            requete:='';
          end
          else
          i:=i+1;
        end;
      end;
    Je ne vois pas mon erreur une fois de plus

    Merci d'avance tothpaul

    PS: je travaille toujours avec ton unité, je vais essayé de l'autre coté voir
    Je te tiens au courant des choses

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    bien essayé, mais il ne faut PAS de ; en fin de requête

    le ; est utilisé comme séparateur de requête, mais la requête n'en contient pas.

    Attention également, la simple recherche d'un ; n'est pas très subtile, que deviendrait la requête suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO MyTable (Champ) VALUES("le ; est un séparateur");
    INSERT INTO MyTable (Champ) VALUES("le ; ne doit pas être présent dans la requête");

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par tothpaul
    bien essayé, mais il ne faut PAS de ; en fin de requête

    le ; est utilisé comme séparateur de requête, mais la requête n'en contient pas.

    Attention également, la simple recherche d'un ; n'est pas très subtile, que deviendrait la requête suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO MyTable (Champ) VALUES("le ; est un séparateur");
    INSERT INTO MyTable (Champ) VALUES("le ; ne doit pas être présent dans la requête");
    Je ne suis pas trop d'accord avec toi sur le fait qu'une requête SQL ne doit pas contenir de ; pour dire que c'est la fin de celle ci.

    En ce qui concerne les ; pour les create table, normalement il n'y a jamais de ; ... mais en tout cas, je suis entièrement d'accord dans le cas d'un INSERT.

    Aussi, j'ai résolu mon problème ... et je suis un BOULET lol

    Le soucis venait d'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while i<=RichEditScriptTable.Lines.Count-1 do
        begin
        requete:=Trim(requete)+Trim(RichEditScriptTable.Lines.Strings[i]);
          if Pos(';',requete)<>0 then
          begin
            MySQL.ExecSQL(Trim(requete));
            requete:='';
          end
          else
          i:=i+1;
        end;
    Il ne faut pas que je mette de ELSE, puisque dans n'importe quel cas, il faut que je continue d'incrémenter i.

    En tout cas, un grand merci pour ton aide, et franchement super ton unité !
    Merci encore

    PS: De plus ta source vient d'être tester avec MySQL 5

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrement fichier excel dans une base mysql (pas csv)
    Par morph12345 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 27/03/2006, 10h01
  2. [Tomcat]Tomcat ne trouve pas les driver mysql
    Par Lash3r dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 06/01/2006, 01h12
  3. [Kylix 3] Je n'arrive pas à utiliser MySQL
    Par usebob dans le forum EDI
    Réponses: 4
    Dernier message: 15/04/2005, 10h18
  4. DBGrid + Mysql (mysql.pas)
    Par eoliaeolia dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/02/2004, 17h07
  5. Problème de création de table sous MySql
    Par ducamba dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2003, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo