Intégration du framework SMySQL dans XCode

TMXTMX Membre
Salut à tous,

Je suis nouveau dans la programmation Cocoa sur MacOS X et je souhaite faire une appli qui gère mes DVD en utilisant le SGBD MySQL.
J'aimerais faire cette appli en utilisant le framework SMySQL, mais malheureusement lorsque j'intègre le framework SMySQL_static, l'appli refuse de compiler. XCode génère un message d'erreur mais ce message ne concerne pas mon appli. Visiblement il concerne le framework lui-même puisque lorsque je l'enlève, l'appli compile très bien.

J'ai essayé sans succès de me connecter à ma BDD en n'intégrant pas le framework, bien que l'appli compile très bien sans sa présence. J'ai utilisé l'exemple fournit sur le site de SMySQL dans l'objet MCPConnection.

Quelqu'un aurait il une idée pour se connecter à MySQL en utilisant Coca ou y aurait-il une solution pour se connecter via l'API C livrée avec MySQL ?

Je n'en peux plus, mon appli est bloquée et ne peux avancer tant que cette question de MySQL ne sera pas reglée.

Aidez moi SVP.  :'( Je vous remercie

TMX

Réponses

  • muqaddarmuqaddar Administrateur
    15:33 modifié #2
    Je ne pourrai pas t'aider pour ton problème en tant que débutant, par contre, je me pose cette question :
    une BDD SQL pour gérer une petite DVDthèque personnelle, n'est-ce pas démesuré ?
  • TMXTMX Membre
    15:33 modifié #3
    Je te remercie de ta réponse rapide.

    Malheureusement, j'ai bien besoin d'une BDD puisque possédant plus de 900 Films en DVD et un nombre assez important de série.

    J'avais fait une application similaire en Java utilisant une passerelle en C avec JNI malheureusement Java utilise bcp trop de ressource mémoire. C'est pour ca que j'ai décidé de la refaire en Cocoa. L'application précédente tournait sous Linux mais depuis je suis passé sur MacOS X.

    C'est pour ca que j'aimerais bien avoir une réponse à mon intérrogation. Dire que c'est le dernier point qu'il me reste à regler avant de pouvoir finir mon appli et que je ne peux me connecter à cette foutue BDD. J'ai déjà réglé le point de la lecture de la config de la BDD en XML, il me reste juste ce point.
  • muqaddarmuqaddar Administrateur
    15:33 modifié #4
    Ah oui, 900 films quand même, c'est pas mal... mais c'est pas énorme non plus.
    Un simple fichier XML qui sert de sauvegarde ne suffit pas ?
    Par exemple, le fichier XML de ma bibliothèque iTunes fait 5 Mo pour 4000 enregistrements (x 10 champs / titre).
    Pour la recherche et la rapidité, bein, si tu as arrives à faire un truc comme celui d'iTunes, c'est immédiat.

    J'espère que les autres pourront t'aider demain si tu passes par mySQL. ;-)
    Bon courage.
  • TMXTMX Membre
    15:33 modifié #5
    J'ai pensé à un fichier XML, seulement je ne veux pas seulement sauvegarder mes films mais faire une sorte d'encyclopédie c'est à dire pouvoir savoir quels films ont été réalisés par telle personne ou quel acteur a joué dans tel film ou bien encore avoir la liste des films des années 80 que je possède.

    Comme tu vois, c'est vraiment un gros projet qui me tiens vraiment à coeur.

    J'ai, par ailleurs, un autre projet encore plus gros celui-là : XSound (prononcé Cross-Sound) qui est un intégré consacré comme son nom l'indique, au son. Dans cet intégré, il y a un sampler (XSampler), un tracker (XTracker) et un séquenceur (XSequencer). D'autres outils viendront peut etre plus tard. Si je n'arrive pas à faire VideoManager 2, je me lancerai sur XSampler.
  • Jean-MatthieuJean-Matthieu Membre
    15:33 modifié #6
    Hello,

    Je m'en sers dans PureFTPd Manager; donc en principe tu devrais pouvoir reprendre le bundle (/Application/PureFTPd Manager.app/Contents/Frameworks/SMySQL.framework) et l'integrer a ton projet.

    N'oublie pas de le copie dans ton .app (ajoute un phase de copie pour cela)
    Et puis apres, roulez jeunesse ;-)

    #import <SMySQL/SMySQL.h>

    @implementation MySQLUserManager
    - (void) doQuickConnectDisconnect
    {
    MCPConnection *mySQLConnection;
    mySQLConnection = [[MCPConnection alloc] initToHost:host
    † † † † † † † † † † † † † † † † † † † † † † † withLogin:login password:password
    † † † † † † † † † † † † † † † † † † † † † † † usingPort:[port intValue]];
    [mySQLConnection close];
    }

    @end

    http://cocoanut.net/pureftpd
  • TMXTMX Membre
    15:33 modifié #7
    Salut Jean-Mathieu,

    J'ai essayé de compilé ton projet mais il me provoque des erreurs de compil au niveau du framework SMySQL.
    Quelle version de MySQL utilises tu ?
    Quelle version de SMySQL utilises tu ? Est-ce la version static, la version dynamique ou la version bundle ?

    ???

    Je suis circonspect. Je me demande si je ne vais pas devoir abandonner l'idée d'utiliser MySQL et utiliser de simples fichiers XML.
  • TMXTMX Membre
    15:33 modifié #8
    J'ai essayé d'utiliser l'API C de MySQL mais en executant le programme, j'obtiens le message d'erreur suivant :

    ZeroLink: unknown symbol '_mysql_init'
    VideoManager2 has exited due to signal 6 (SIGABRT).

    J'essaie de compiler avec l'option "-lmysqlclient"  mais rien n'y fait.

    Quelqu'un aurait il une idée ?
  • garekgarek Membre
    15:33 modifié #9
    En suivant pas à pas ce document cela marche impec.
    En fait, le framework a treois version.
    Je te conseille la troisième.

    http://www.forbiddenbyte.co.uk/cocoa/mysql-cocoa_bundling_in_xcode.pdf

    HTH

    A+



  • TMXTMX Membre
    15:33 modifié #10
    Super ça marche !  8)

    Merci à  tous pour votre précieuse aide. Mon projet peut enfin avancer à  pleine vitesse.
    Si j'ai besoin d'autre aide, je n'hésiterai pas à  faire appel à  vous.

    Cocoa-ment votre
    TMX
  • 15:33 modifié #11
    Salut,

    le framework SmySQL est pas mal, mais comment fait on pour stocker dans une base mySQL des données autres que du texte ou des entiers, par exemple un Blob qui serait le récepteur d'une instance de NSImage.

    exemple :
    - (IBAction)goNow:(id)sender
    {
    NSImage *anImage=[NSImage alloc];
    NSString *thePath=[[NSBundle mainBundle] pathForResource:@192.jpg ofType:nil];
    [anImage initWithContentsOfFile:thePath];
    [thePicture setImage:anImage];
    NSString *theQuery=@insert into stock (ID_ID,Jaquette) values (0,anImage);
    theRes = [connection queryString:@insert into stock (ID_ID,Jaquette) values (0,];anImage)"];
    [anImage release];
    }

    cela ne fonctionne pas.

    Quelqu'un a t il une idée??

    Merci
  • BruBru Membre
    juillet 2004 modifié #12
    Je ne connais pas le framework SmySQL, mais je suppose que le type mysql blob correspond à  un NSData de cocoa...
    Donc il suffit que tu récupère la "représentation" de ton image par :
    <br />    NSData *blob_data;<br />    blob_data =[anImage TIFFRepresentation];<br />
    


    Ensuite, tu "insert" ce NSData dans la colonne de type blob dans ta table.

    Pour récupérer l'image après un "select", tu récupères le blob sous forme de NSData puis tu fais :
    <br />    NSImage *anImage;<br />    anImage=[[NSImage alloc] initWithData:blob_data];<br />
    


    Je ne sais pas si ça va marcher... De toute façon, il est temps pour moi de tester ce framework, alors je te tiens au courant.

    .
Connectez-vous ou Inscrivez-vous pour répondre.