Bonjour,
Cela fait bien longtemps que je n'avais pas programmé cause boulot, mais maintenant que j'ai un peu plus de temps, j'essaye de mettre à jour un programme que j'avais développé pour moi en 2008
A l'époque, pour accéder à ma base MySQL sur mon nas, j'avais trouvé très pratique d'utiliser l'unité MySQL.pas, ce qui me permettait même de mettre la base et le programme sur une clé usb !
J'ai mis à jour mon programme, et j'ai découvert à cette occasion qu'un environnement delphi Community edition était proposé gratuitement (je vous passe les péripéties pour avoir enfin un numéro de licence ;o)
J'installe assez facilement mes quelques composants personnels (avec plusieurs corrections demandées) et j'ouvre le projet tel qu'il fonctionne en delphi 2005
J'obtiens une avalanche de messages d'erreur que j'arrive à tous corriger (pas facile de remplacer un composant tshelltreeview mais en le créant dynamiquement j'y suis arrivé)
J'arrive donc à compiler mon appli, je la lance, et là … impossible de me connecter à la base distante … pas plus qu'à une base locale.
J'utilise exactement le même code sur les deux projets et la connexion échoue avec le projet compilé en delphi CE.
Bien entendu, libmysql.dll est la même version pour les deux exécutables et placée dans le même répertoire que l'exécutable pour être sûr.
Avez-vous déjà eu ce problème ? j'ai vérifié que les directives de compilations étaient identiques, mais impossible de trouver la solution.
Merci à ceux qui prendront le temps de se pencher sur mon message. le code est assez classique :

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
 
// dans MySQL.pas
  PMYSQL = ^TMYSQL;
  TMYSQL = record
    net: TNET;                    // Communication parameters
    connector_fd: gptr;           // ConnectorFd for SSL
    host, user, passwd, unix_socket, server_version, host_info, info, db: pChar;
    port, client_flag, server_capabilities: longword;
    protocol_version: longword;
    field_count: longword;
    server_status: longword;
    thread_id: longword;          // Id for connection in server
    affected_rows: my_ulonglong;
    insert_id: my_ulonglong;      // id if insert on table with NEXTNR
    extra_info: my_ulonglong;     // Used by mysqlshow
    packet_length: longword;
    status: mysql_status;
    fields: PMYSQL_FIELDS;
    field_alloc: TMEM_ROOT;
    free_me: my_bool;             // If free in mysql_close
    reconnect: my_bool;           // set to 1 if automatic reconnect
    options: TMYSQL_OPTIONS;
    scramble_buff: array [0..8] of char;
    charset: PCHARSET_INFO;
    server_language: longword;
  end;
 
// voici la fonction déclarée dans mysl.pas
mysql_real_connect: function(_mysql: PMYSQL; const host, user, passwd, db: pChar; port: longword; const unix_socket: pChar; clientflag: longword): PMYSQL; stdcall;
 
=======================================================================================================
 
//dans mon programme
procedure Tform1.connexion;
Var
  user, host ,pwd: string;
  portip: integer;
  MySQLC: PMYSQL;
 
begin
 
host:='adresse du serveur';
user:='nom utilisateur'; // qui fonctionne bien avec la version delphi2005
pwd:='mot de passe';
// le paramètre suivant est le nom de la base, que je n'uitilise que si la connexion est correcte
portip:=3306 // classique et fonctionne bien avec la version 2005
// les paramètres uivants ne sont pas utiles pour la connexion
 
MySQLC := mysql_init(nil);
if mysqlc<>nil then
   begin
   mysql_options(mysqlC,MYSQL_OPT_COMPRESS,nil);
   if mysql_real_connect(mysqlC, pChar(host), pChar(user), pChar(pwd), nil, portip, nil, 0)=nil  then
      begin
      affichage de 'La connexion a echouée';
      exit;
      end
   else
      begin
      affichage de 'Connexion OK';
      end;
end;
Je précise que la variable MySQLC prend bien une valeur à la première instruction.