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

Bases de données Delphi Discussion :

E2018 Type Record, Object ou Class requis


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut E2018 Type Record, Object ou Class requis
    Bien le bonjour compagnons !

    Alors voila, je viens de commencer la programmation en Delphi pour le sujet de mon stage et je dois accéder à une Base de données mySQL.

    J'ai donc suivi le tuto disponible ici

    mais j'ai l'erreur suivante "E2018 Type Record, Object ou Class requis"
    pour la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    begin
        myRES := mysql_list_tables(mySQLConnection, nil);
        if myRES <> nil then begin
            for i := 0 to myRES.row_count-1 do begin
                myROW := mysql_fetch_row(myRES);
                for j := 0 to mysql_num_fields(myRES) - 1 do begin
                    aStr := myROW^[j];
                    ListBox1.Items.Add(aStr);
                end;
            end;
            mysql_free_result(myRES);
        end;
    end;
    Dans un 2me temps, pour ne pas faire un second post, quelqu'un aurait-il un bon tuto qui m'explique comment faire mes requêtes SQL en delphi ? (select, update, ...) je veux dire la façon dont créer mes procédures pour remplir le sqlQuery etc...

    Enfin ceci est secondaire, ma première erreur est plus importante

    En vous remerciannnt

    Skrins

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par Skrins Voir le message
    mais j'ai l'erreur suivante "E2018 Type Record, Object ou Class requis"
    A citer du code, il faudrait aussi citer le type de la variable en question.

    Je découvre donc que myRES : PMYSQL_RES;. le préfixe P m'indique déjà (par convention de nommage) qu'il s'agit d'un pointeur (sur une structure en l'occurrence).

    Il faut donc dans le code déréférencer le pointeur, pour qu'il renvoie la valeur stockée à l'adresse mémoire contenue dans le pointeur.

    En écrivant for i := 0 to myRES^.row_count-1 do begin, cela devrait compiler.

    Pour plus de détails, voir l'aide de Delphi sur les pointeurs et leur utilisation.
    Philippe.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour !

    Tout d'abord merci d'avoir pris le temps de vous pencher sur mon problèmes

    J'ai donc remplacé la ligne que vous avez citée, mais l'erreur persiste.

    Voici ma fiche en entière si ca peut aider

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    unit bdConnect;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Bde.DBTables, Vcl.Grids, Vcl.DBGrids,
      Data.DB, Data.DBXMySQL, Data.FMTBcd, Vcl.ExtCtrls, Vcl.DBCtrls,
      Datasnap.DBClient,mysql, Datasnap.Provider, Data.SqlExpr, DBXDataExpressMetaDataProvider, iniFiles, strUtils,
      Vcl.StdCtrls;
     
    type
      TForm13 = class(TForm)
        DBGrid1: TDBGrid;
        SQLConnection1: TSQLConnection;
        SQLDataSet1: TSQLDataSet;
        DataSetProvider1: TDataSetProvider;
        ClientDataSet1: TClientDataSet;
        DataSource1: TDataSource;
        DBNavigator1: TDBNavigator;
        Query1: TQuery;
        ListBox1: TListBox;
        Button1: TButton;
     
        procedure sqlConnect;
        procedure sqlClose;
        procedure bdCon;
        procedure affTable;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
         mysql: PMysql;
         req: String;
      end;
     
    var
      Form13: TForm13;
     
    implementation
     
    CONST
    dbname='hrTest1';
     
    {$R *.dfm}
     
    var
      mySQLConnection : PMYSQL;
      myRow : PMYSQL_ROW;
      myRES : PMYSQL_RES;
      aStr: String;
      i,j : cardinal;
     
      //init la sqlConn
    procedure sqlConnect;
    begin
      mySQLConnection := mysql_init(nil);
    end;
     
    //fermeture de la connexion
    procedure sqlClose;
    begin
      mysql_close(mySQLConnection);
    end;
     
    //connexion a la BD
    procedure bdCon;
    begin
        if mysql_real_connect(mySQLConnection, 'localhost', 'fp', 'pass', 'hrTest1', 0, nil, 0) <> nil then begin
           //connvµect reussie
        end else begin
          //echec connect
        end;
    end;
     
    //afficher les tables de la BD
    procedure affTable;
    begin
      myRES := mysql_list_tables(mySQLConnection,nil);
      if myRES <> nil then begin
            for i := 0 to myRES^.row_count-1 do begin
                myROW := mysql_fetch_row(myRES);
                for j := 0 to mysql_num_fields(myRES) - 1 do begin
                    aStr := myROW^[j];
                    ListBox1.Items.Add(aStr);
                end;
            end;
        mysql_free_result(myRES);
      end;
    end;
    //function ajout(req:String):boolean;
    //Query1.SQL.Clear;
    //Query1.SQL.Add(req);
    //Query1.ExecSQL; //Execute la requête
    //end;
     
    //function update(req:String):boolean;
    //Query1.SQL.Clear;
    //Query1.SQL.Add(req);
    //Query1.ExecSQL
    //end;
     
     
     
    procedure TForm13.Button1Click(Sender: TObject);
    begin
    affTable
    end;
     
    end.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pourtant c'est un copier coller de Utilisation de l'API mySQL avec Delphi

    As-tu la bonne version de mysql.pas ?
    Retire ces dépendances à DataSnap et DBExpress

    myRES^.row_count ou myRES.row_count les deux formes compilent et fonctionnent, Delphi fait un déréférencement implicite des pointeurs de structure si l'on active Syntaxe étendue (Delphi) ce qui est le cas par défaut !

    Etrange, toutes ces variables globales !
    Fait un peu de nettoyage, et passe le plus que possible de variable en locale et mySQLConnection comme membre privé de TForm13

    tu utilises un i global pour un for, cela doit provoquer une erreur : La variable de contrôle de boucle FOR doit être une variable locale simple

    affTable est déclaré comme méthode de TForm13 dans la partie interface mais pas dans implementation procedure TForm13.affTable;
    sqlConnect et toutes tes méthodes sont mal déclarées, tu dois avoir tellement d'erreur que le compilateur délire !

    Avant de t'attaquer à l'API MySQL riche en pointeur et absolument pas compatible avec le TDBGrid, je te conseille la lecture de cours de programmation Delphi & Pascal - Le Guide Delphi par Frédéric Beaulieu dont XII-C-2-b. Ajout de méthodes et de variables

    J'ai écrit il y a de nombreuses années un méthode TepcMySQLAssistantPassThrough.InternalExecuteSQL conçu pour remplir un TClientDataSet

    D'ailleurs, TForm13, DBGrid1, SQLConnection1... si j'étais ton prof, tu aurais droit à des points négatifs pour un nommage peu pertinent et donc difficilement maintenable, un peu plus de rigueur suffirait pour corriger ton erreur !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse, je vais me pencher sur ca

    Pour ce qui est du nom des variables etc, ceci est un test en fait. Mettant seulement les pieds en Delphi, j'ai essayé pas mal de façons différentes pour arriver à un résultat et je n'ai pas tout enlevé (ni pris le temps de les nommer d'une autre façon puisqu'elles étaient vouées à être supprimées )

    Je repasserai dire si le problème a été résolu après avoir suivi les liens de votre réponse.

    Bonne fin de journée !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour bonjour,

    Voila après relecture du tutoriel j'ai un peu modifier ma classe, mais l'erreur est toujours présente


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    unit bdConnect;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Bde.DBTables, Vcl.Grids, Vcl.DBGrids,
      Data.DB, Data.DBXMySQL, Data.FMTBcd, Vcl.ExtCtrls, Vcl.DBCtrls,
       iniFiles, strUtils,mysql,
      Vcl.StdCtrls, Datasnap.DBClient, Datasnap.Provider, Data.SqlExpr;
    
    type
      TForm13 = class(TForm)
        DBGrid1: TDBGrid;
        SQLConnection1: TSQLConnection;
        SQLDataSet1: TSQLDataSet;
        DataSetProvider1: TDataSetProvider;
        ClientDataSet1: TClientDataSet;
        DataSource1: TDataSource;
        DBNavigator1: TDBNavigator;
        Query1: TQuery;
        ListBox1: TListBox;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
    
      private
        { Déclarations privées }
          mySQLConnection : PMYSQL;
          myRow : PMYSQL_ROW;
          myRES : PMYSQL_RES;
          aStr: String;
    
    
    
      public
        { Déclarations publiques }
    
        mysql: PMysql;
        req: String;
        procedure sqlConnect;
        procedure sqlClose;
        procedure bdCon;
        procedure affTable;
      end;
    
    var
      Form13: TForm13;
    
    implementation
    
    CONST
    dbname='hrTest1';
    
    {$R *.dfm}
    
    //var
      //mySQLConnection : PMYSQL;
      //myRow : PMYSQL_ROW;
      //myRES : PMYSQL_RES;
      //aStr: String;
      //i,j : cardinal;
    
      //init la sqlConn
    procedure TForm13.sqlConnect;
    begin
      mySQLConnection := mysql_init(nil);
    end;
    
    //fermeture de la connexion
    procedure TForm13.sqlClose;
    begin
      mysql_close(mySQLConnection);
    end;
    
    //connexion a la BD
    procedure TForm13.bdCon;
    begin
        if mysql_real_connect(mySQLConnection, 'localhost', 'fp', 'pass', 'hrTest1', 0, nil, 0) <> nil then begin
           //connvµect reussie
        end else begin
          //echec connect
        end;
    end;
    
    //afficher les tables de la BD
    procedure TForm13.affTable;
    var
      i,j : integer;
    begin
      myRES := mysql_list_tables(mySQLConnection,nil);
      if myRES <> nil then begin
            for i := 0 to myRES^.row_count-1 do begin
                myROW := mysql_fetch_row(myRES);
                for j := 0 to mysql_num_fields(myRES) - 1 do begin
                    aStr := myROW^[j];
                    ListBox1.Items.Add(aStr);
                end;
            end;
        mysql_free_result(myRES);
      end;
    end;
    //function ajout(req:String):boolean;
    //Query1.SQL.Clear;
    //Query1.SQL.Add(req);
    //Query1.ExecSQL; //Execute la requête
    //end;
    
    //function update(req:String):boolean;
    //Query1.SQL.Clear;
    //Query1.SQL.Add(req);
    //Query1.ExecSQL
    //end;
    
    
    
    procedure TForm13.Button1Click(Sender: TObject);
    begin
    affTable;
    end;
    
    end.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Regarde dans MySQL.pas si PMYSQL_RES ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    st_mysql_res = record
      row_count : my_ulonglong;
      field_count, current_field : cardinal;
      fields :         PMYSQL_FIELD;
      ...
    end;
    TMYSQL_RES  = st_mysql_res;
    PMYSQL_RES  = ^TMYSQL_RES;
    Vérifie si tu n'as pas plusieurs déclarations du type PMYSQL_RES en conflit !
    Tu devrais faire un nouveau projet isolé sans tout le fatras Bde et DBX de tes uses

    Sinon quel Delphi ? XE j'ai l'impression
    Si 2009 et plus (dont XE), veille sur les mélanges PChar, PAnsiChar et PWideChar, cela peut rendre ton code totalement incompatible !

    Veille aussi à utiliser PAnsiChar et AnsiString
    dans le tutoriel : aStr : AnsiString; et dans ton projet aStr : String;En 2002, cela n'avait pas d'impact !
    En 2013, cela change tout ! Ansi \ Unicode, cela t'évoque quelque chose ?

    Le Tutoriel date de 2002, probablement Delphi 7, il est clair que tout ce qui est char dans MySQL.pas doit être converti en AnsiChar
    Tu es débutant, sache que même des professionnels peinent avec le passage Ansi vers Unicode, ce n'est pas forcément le plus facile de modifier un tel fichier encapuslant une DLL

    Pense que tu utilises une version obsolète du client MySQL conçu pour MySQL 3.x (fonctionnait plutôt bien avec 4.x), alors qu'il existe aujourd'hui MySQL 6.x

    Vu la présence de Data.DBXMySQL dans tes uses pourquoi pas utiliser le driver MYSQL fourni par DBExpress au lieu de vouloir coder MySQL en bas niveau ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour, et de nouveau merci pour la réponse


    Citation Envoyé par ShaiLeTroll Voir le message
    Regarde dans MySQL.pas si PMYSQL_RES ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    st_mysql_res = record
      row_count : my_ulonglong;
      field_count, current_field : cardinal;
      fields :         PMYSQL_FIELD;
      ...
    end;
    TMYSQL_RES  = st_mysql_res;
    PMYSQL_RES  = ^TMYSQL_RES;
    Vérifie si tu n'as pas plusieurs déclarations du type PMYSQL_RES en conflit !
    Dans mon mysql.pas j'ai ceci :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    type
      PMYSQL_RES = Pointer;
      TMYSQL_RES323 = record
        row_count: my_ulonglong;
        field_count, current_field: longword;
        fields: PMYSQL_FIELDS;
        data: PMYSQL_DATA323;
        data_cursor: PMYSQL_ROWS;
        field_alloc: TMEM_ROOT323;
        row: PMYSQL_ROW;              // If unbuffered read
        current_row: PMYSQL_ROW;      // buffer to current row
        lengths: pLongword;           // column lengths of current row
        handle: PMYSQL;               // for unbuffered reads
        eof: my_bool;                 // Used my mysql_fetch_row
      end;
      TMYSQL_RES400 = record
        row_count: my_ulonglong;
        field_count, current_field: longword;
        fields: PMYSQL_FIELDS;
        data: PMYSQL_DATA400;
        data_cursor: PMYSQL_ROWS;
        field_alloc: TMEM_ROOT400;
        row: PMYSQL_ROW;              // If unbuffered read
        current_row: PMYSQL_ROW;      // buffer to current row
        lengths: pLongword;           // column lengths of current row
        handle: PMYSQL;               // for unbuffered reads
        eof: my_bool;                 // Used my mysql_fetch_row
      end;
      TMYSQL_RES401 = record
        row_count: my_ulonglong;
        field_count, current_field: longword;
        fields: PMYSQL_FIELDS;
        data: PMYSQL_DATA400;
        data_cursor: PMYSQL_ROWS;
        field_alloc: TMEM_ROOT400;
        row: PMYSQL_ROW;              // If unbuffered read
        current_row: PMYSQL_ROW;      // buffer to current row
        lengths: pLongword;           // column lengths of current row
        handle: PMYSQL;               // for unbuffered reads
        eof: my_bool;                 // Used my mysql_fetch_row
        unbuffered_fetch_cancelled: my_bool;
        st_mysql_methods: Pointer;
      end;
    Citation Envoyé par ShaiLeTroll Voir le message
    Sinon quel Delphi ? XE j'ai l'impression
    Si 2009 et plus (dont XE), veille sur les mélanges PChar, PAnsiChar et PWideChar, cela peut rendre ton code totalement incompatible !

    Veille aussi à utiliser PAnsiChar et AnsiString
    dans le tutoriel : aStr : AnsiString; et dans ton projet aStr : String;En 2002, cela n'avait pas d'impact !
    En 2013, cela change tout ! Ansi \ Unicode, cela t'évoque quelque chose ?
    Effectivement, j'utilise la version XE3, pour les différents types je ne voyais pas trop la différence mais je vais rechanger

    Citation Envoyé par ShaiLeTroll Voir le message
    Le Tutoriel date de 2002, probablement Delphi 7, il est clair que tout ce qui est char dans MySQL.pas doit être converti en AnsiChar
    Tu es débutant, sache que même des professionnels peinent avec le passage Ansi vers Unicode, ce n'est pas forcément le plus facile de modifier un tel fichier encapuslant une DLL

    Pense que tu utilises une version obsolète du client MySQL conçu pour MySQL 3.x (fonctionnait plutôt bien avec 4.x), alors qu'il existe aujourd'hui MySQL 6.x

    Vu la présence de Data.DBXMySQL dans tes uses pourquoi pas utiliser le driver MYSQL fourni par DBExpress au lieu de vouloir coder MySQL en bas niveau ?
    J'avais d'abord essayé d'utiliser l'IDE Delphi avec les composants instinctivement, mais sans grand succès. N'arrivant à rien lorsque je suis tombé sur ce tutoriel, c'était le premier qui semblait commencer de 0 et qui ressemblait assez bien à la façon de faire en Java (langage que je connais bien mieux)

    Mais bon si , comme tu le dis, le mysql.pas est trop vieillot et que je dois commencer à changer autant de trucs auquels je n'y comprends rien, je vais essayer de trouver un autre tuto qui explique à partir des composants Delphi comment faire. Même si j'avais déja pas mal cherché et rien trouvé ^^

    Quoiqu'il en soit, je te remercie beaucoup pour l'aide et le temps que tu as pris pour répondre à mes posts !

    Skrins

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par Skrins Voir le message
    J'avais d'abord essayé d'utiliser l'IDE Delphi avec les composants instinctivement, mais sans grand succès. N'arrivant à rien lorsque je suis tombé sur ce tutoriel, c'était le premier qui semblait commencer de 0 et qui ressemblait assez bien à la façon de faire en Java (langage que je connais bien mieux)
    Tu vas voir que le TSimpleDataSet pour le SELECT simple couplé à un TDataSource\TDBGrid est assez simple d'utilisation
    Pour les UPDATE\INSERT, j'ignore ses possibilités avec MySQL, mais fort possible que Edit()\Append() et Post() + ApplyUpdates feront l'affaire

    TSQLQuery est un composant à utiliser en lecture seule
    TSimpleDataSet regroupe un TSQLQuery, un TDataSetProvider et TClientDataSet en un seul composant pour simplifier la vie d'un développeur utilisateur de DBExpress



    Citation Envoyé par Skrins Voir le message
    Mais bon si , comme tu le dis, le mysql.pas est trop vieillot
    C'est qu'il en existe des centaines de versions, plus ou moins à jour !

    Tu n'utilises pas le sources du Tutoriel mais une autre version, semble-t-il !

    PMYSQL_RES est un pointer non typé !
    Pour gérer les variantes du client MySQL, tu as TMYSQL_RES323, TMYSQL_RES400 et TMYSQL_RES401 ... peut-être plus encore

    Tu dois donc transtyper (cast) ton pointeur non typé, je suis un peu rouillé en Delphi depuis que je fais du C++Builder

    essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i := 0 to TMYSQL_RES323(myRES^).row_count-1 do begin
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i := 0 to PMYSQL_RES323(myRES).row_count-1 do begin
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
      PMYSQL_RES323 = ^TMYSQL_RES323;
    Et cela doit être fait partout, je te conseille de transtyper une bonne fois pour toute dans des variables, je t'aurais bien proposer d'encapsuler tout cela dans une série de classe avec polymorphisme implémentant interface\classe abstraite pour gérer la subtilité de chaque version avec une Pattern Strategy ou Class Registry + Factory qui évite des tas de switch case imbriqué typique pour ce genre de problématique de version mais tu te lancerais dans un travail déjà fait par Embarcadero dans DBExpress
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message

    essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i := 0 to TMYSQL_RES323(myRES^).row_count-1 do begin
    L'erreur a été résolue !

    Je vais un peu chipoter avec ceci, mais je regarde également du coté des composants dbexpress du coup .

    Enfin, merci beaucoup pour l'aide apportée !

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

Discussions similaires

  1. Erreur "Type Record, Object ou Class requis"
    Par gogéta91 dans le forum Débuter
    Réponses: 5
    Dernier message: 31/07/2008, 09h16
  2. Type Class requis dans une exception
    Par rivierebruno22 dans le forum Langage
    Réponses: 2
    Dernier message: 22/07/2008, 11h06
  3. Type as OBJECT peut il etre multi-record
    Par ana saadi dans le forum SQL
    Réponses: 2
    Dernier message: 10/08/2007, 11h25
  4. type record, objerct ou classe requis ?
    Par babou54 dans le forum Delphi
    Réponses: 3
    Dernier message: 10/01/2007, 13h39
  5. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10

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