Utiliser les données d'une BDD MySQL dans une TableView

ElectrobitchElectrobitch Membre
23:17 modifié dans API AppKit #1
Bonjour,

Je pense que le titre est assez clair : j'aimerais mettre dans mon application Cocoa une TableView (ou autre si c'est impossible) qui listerait les données d'une base de données MySQL. Mais je ne sais pas trop comment m'y prendre... Jusque là , j'ai essayé deux frameworks permettant d'interagir avec MySQL : MCPKit et MySQLClasses. Le problème c'est que l'utilisation de MCPKit entraà®ne une erreur à  la compilation (cf. ici pour plus de détails) et le second semble bien fonctionner mais mon problème est en fait que je ne sais pas comment les utiliser avec MAMP pour effectuer mes tests en local (j'ai essayé avec un site que j'ai sur 1&1 mais l'accès est refusé; existe-t-il des hébergeurs qui l'acceptent ? si oui, quel critère permet de le savoir ?). Donc je viens vous poser une question qui se résumé à  ça : quel est le meilleur moyen, selon vous, de lister les données d'une table d'une BDD ? Est-ce faisable avec une WebView qui chargerait un script HTML contenant les requêtes SQL ?

Merci d'avance de votre aide et excusez ma noobitude, je débute :)

Réponses

  • CéroceCéroce Membre, Modérateur
    23:17 modifié #2
    dans 1244461221:

    Est-ce faisable avec une WebView qui chargerait un script HTML contenant les requêtes SQL ?


    Non, parce que le HTML n'exécute pas de requêtes. C'est un langage de description de pages. Il te faudra forcément passer par PHP ou autre.

    Je ne me suis jamais servi de Cocoa pour accéder à  une base mySQL, cependant, je l'ai déjà  fait en Java. Le serveur PHP / mySQL était pris en charge par MAMP sans difficulté particulière. À toi d'utiliser le débogueur pour faire du pas à  pas et voir où ça coince. Les seuls problèmes que j'avais eu était en rapport avec les autorisations sur la base.
  • ElectrobitchElectrobitch Membre
    juin 2009 modifié #3
    Oui, mais quand je parlais des webviews chargeant du HTML, je voulais bien entendu dire que cet HTML contenait le PHP exécutant les requêtes. Mais donc c'est pas possible avec une webview ? C'est vraiment dommage que la doc sur le sujet soit si maigre :(

    Pour ce qui est de MySQLClasses, le débogueur ne peut malheureusement pas m'aider puisqu'il n'y a aucune erreur, c'est juste que la condition que j'ai faite pour m'indiquer l'état de la connexion est négative.
  • CéroceCéroce Membre, Modérateur
    23:17 modifié #4
    Une Webview, c'est comme un navigateur web, ça affiche du HTML.
    Quand tu demandes à  consulter index.php, le script PHP s'exécute pour produire du HTML. Tu peux donc utiliser un script PHP pour produire une page HTML qui va t'afficher le contenu de la table, mais quel intérêt ? Ce n'est pas ainsi que tu vas remplir une NSTableView.

    Ta 1ère méthode est la bonne: attaquer la base de données mySQL.
    Le framework MYSQL donne accès aux messages d'erreur:

    <br />	MYSQLConnexion* connexion = [[MYSQLConnexion alloc] initConnexionToDatabase:@&quot;maBase&quot; host:nil user:@&quot;Toto&quot; password:@&quot;motDePasse&quot;];<br />	if(![connexion connected])<br />	{<br />		NSLog(@&quot;Erreur mySQL n°%i: %@&quot;, [connexion error], [connexion errString]);	<br />	}<br />
    



    À mon avis, tu as des problèmes d'autorisations sur la base (crée un utilisateur Toto et file-lui tous les droits).
  • ElectrobitchElectrobitch Membre
    23:17 modifié #5
    Merci de ta réponse.
    En ajoutant le message de l'erreur, j'obtiens ça :
    MySQL error: 2002 - Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    C'est exactement le même message d'erreur que j'avais avec l'autre framework, MCPKit. J'imagine donc que c'est un problème dû au fait que j'utilise MAMP non ?
  • CéroceCéroce Membre, Modérateur
    23:17 modifié #6
    Oui et non, il n'y a pas de raison. MAMP ou pas, c'est toujours ce bon vieux Apache derrière. C'est vrai que le message n'aide pas beaucoup.
    Il faut peut-être préciser le port (8889 avec MAMP). Je ne peux guère t'aider davantage, mais comme je te le disais, je l'ai fait en Java, ça doit marcher aussi bien. Il y a des spécificités du fait que tu sois en local, mais même un serveur distant est un cas spécifique où il faut mettre le bon nom d'hôte et les bonnes autorisations.

    Qu'est ce que tu passes en host ? À mon avis, il faut que tu passe "localhost:8889".
  • ElectrobitchElectrobitch Membre
    juin 2009 modifié #7
    Quand je mets "localhost" dans le paramètre host :
    MySQL error: 2002 - Can't connect to local MySQL server through socket '/tmp/mysql.sock'

    Et quand je mets "localhost:8889" :
    MySQL error: 2005 - Unknown MySQL Server Host 'localhost:8889'

    (et c'est bien ce port là )

    PS : que tu puisses m'aider ou pas, merci de tes réponses en tout cas ! ;)
  • muqaddarmuqaddar Administrateur
    23:17 modifié #8
    Essaie cela comme host :

    file:///Applications/MAMP/tmp/mysql/mysql.sock
  • ElectrobitchElectrobitch Membre
    23:17 modifié #9
    Pareil, unknow MySQL server host :(
  • CéroceCéroce Membre, Modérateur
    23:17 modifié #10
    et "mysql://localhost:8889" ?
  • laudemalaudema Membre
    23:17 modifié #11
    dans 1244549115:

    Pareil, unknow MySQL server host :(

    Il me semble qu'il y a une console dans le terminal avec tout Leopard. Sinon tu pourrais aussi installer la dernière version sur le site de MySQL et tu en auras une, avec une installation béton :-)
    http://dev.mysql.com/doc/refman/5.0/fr/mac-os-x-installation.html
    L'idée c'est d'être bon dans le terminal avant d'essayer Cocoa ..
  • macmaniaquemacmaniaque Membre
    23:17 modifié #12
    Bonjour,

    J'ai utiliser il y a quelque temps cette méthode et j'ai utiliser MAMP aussi pour les tests (plus facile pour les tests).

    Cela fait bien longtemps j'ai plus trop souvenir des méthodes, mais ce qui est sur c'est qu'il faut que tu utilise la méthode ou tu spécifie un socket (vers celui de MAMP) et non un host, car par défaut ton appli va chercher le mysql qui se trouve intégrer dans ton système et pas celui de MAMP.
Connectez-vous ou Inscrivez-vous pour répondre.