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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau 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
    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 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 786
    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.

  3. #3
    Nouveau 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
    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
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    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
    Nouveau 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
    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
    Nouveau 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
    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.

+ 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