[BC++] Pour ceux qui s'y connaissent en C++ et BDD

Pour ceux qui s'y connaissent en C++ et BDD [BC++] - Programmation

Marsh Posté le 17-05-2001 à 15:30:39    

Lorsque je me connecte avec une base Access avec une application C++, j'ai une MessageBox qui me demande le nom d'utilisateur et le mot de passe. Est-ce qu'il est possible d' enlever cette boîte de dialogue ?

Reply

Marsh Posté le 17-05-2001 à 15:30:39   

Reply

Marsh Posté le 17-05-2001 à 15:36:08    

levioloneux a écrit a écrit :

Lorsque je me connecte avec une base Access avec une application C++, j'ai une MessageBox qui me demande le nom d'utilisateur et le mot de passe. Est-ce qu'il est possible d' enlever cette boîte de dialogue ?




Tu utilises quoi pour te connecter ? ODBC ?

Reply

Marsh Posté le 17-05-2001 à 15:48:31    

Utilise un TDatabase avec la propriétée LoginPrompt à false


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Marsh Posté le 17-05-2001 à 16:27:55    

Oui j'utilise l'ODBC...
 
Je peux peut-être encore changer mais est ce qu'il n'est pas possible de se débarrasser de cette messagebox en utilisant un TDBDatasource et un TDBTable (c'est ce que j'utilise) ?

Reply

Marsh Posté le 17-05-2001 à 17:54:55    

Non, il faut rajouter un TDatabase sinon il utilise un TDatabase par défaut qui demande à chaque fois le mot de passe, que ce soit avec ODBC ou les drivers natifs du BDE


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Marsh Posté le 17-05-2001 à 18:04:10    

levioloneux a écrit a écrit :

Oui j'utilise l'ODBC...
 
Je peux peut-être encore changer mais est ce qu'il n'est pas possible de se débarrasser de cette messagebox en utilisant un TDBDatasource et un TDBTable (c'est ce que j'utilise) ?




Donc il faut utiliser SQLConnect au lieu de SQLDriverConnect.

Reply

Marsh Posté le 18-05-2001 à 11:57:29    

J'ai essayé de faire :
TDatabase *DBDatabase; //rajouté
DBDatabase= new TDatabase(); //rajouté
 
DBTable->DatabaseName= string("intervention2" );
DBTable->TableName = string("intervention" );
DBDataSource->DataSet= DBTable;
 
DBTable->LoginPrompt=false; //rajouté
DBDatabase->Params->Add( "USERNAME=" ); //rajouté
DBDatabase->Params->Add( "PASSWORD=" ); //rajouté
DBDatabase->LoginPrompt=false; //rajouté
DBTable->Active = true;
 
...mais il m'affiche toujours la msgbx !

Reply

Marsh Posté le 18-05-2001 à 13:29:00    

c'est pas de l'ODBC ca !
sans doute une surcouche...
Si tu abandonne la surcouche en question, pour ODBC voici la description de l'API : http://msdn.microsoft.com/library/ [...] in8w4s.htm

Reply

Marsh Posté le 21-05-2001 à 13:15:35    

Si je n'ai pas le choix je crois en en effet que je vais utiliser des fonctions ODBC.
Bon, pour l'instant j'arrive à utiliser la propriété loginpromt à false comme ceci :
 
DBDatabase->DatabaseName=string("intervention2" );  
//DBDatabase->DriverName=string("intervention2" );
DBDatabase->Name=string("intervention" ); //ma table
DBDatabase->LoginPrompt=false;
 
mais comment faire pour utiliser ma table à partir d '1 TDatabase ?

Reply

Marsh Posté le 21-05-2001 à 13:38:59    

TTable *maTable
 
maTable->DatabaseName = DBDatabase->DatabaseName;


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Marsh Posté le 21-05-2001 à 13:38:59   

Reply

Marsh Posté le 21-05-2001 à 14:03:07    

j'ai essayé mais ça ne change pas grand chose. Voici le code qui plante peut-être que tu as une idée...
 
TDataSource *DBDataSource;
TTable *DBTable;
DBDataSource = new TDataSource();
DBTable= new TTable();
TDatabase *DBDatabase;
DBDatabase= new TDatabase();
TVarRecs values;
 
try {
DBDatabase->DatabaseName= string("intervention2" );
DBDatabase->LoginPrompt=false;
DBTable->DatabaseName = DBDatabase->DatabaseName;
DBTable->TableName = string("intervention" );
DBDataSource->DataSet= DBTable;
DBTable->Active = true;
 
        DBTable->Last();
        values.Add();
        values.Add(bufnompat);
...
 
J'ai créé un driver dans l'odbc 32 nommé intervention2

Reply

Marsh Posté le 21-05-2001 à 14:12:38    

Tu n'as pas renseigné le nom de l'allias BDE dans le TDatabase (AliasName).
Par défaut le nom de l'allias BDE est le même que l'allias ODBC (intervention2).  
Le nom de l'allias n'a aucun rapport avec le DatabaseName.


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Marsh Posté le 21-05-2001 à 14:23:57    

Ok, mais l'alias BDE (c à d le nom de ma source de donnée) est effectivement le même que celui de l'ODBC. Bon j'ai quand même rajouté :
DBDatabase->AliasName=string("intervention2" );
 
mais il me fait toujours une erreur après la compilation : duplicate database name intervention2 (1 msgbx)
Si tu avais 1 exemple ça m'aiderai beaucoup !

Reply

Marsh Posté le 21-05-2001 à 14:42:59    

J'ai utilisé cet example chez moi sur un alias ODBC vers une base Access (nomée "ServicePass ATL" ) qui à une table "Cards" avec un mot de passe "goldorak*"
 
TDataSource *DBDataSource;
TTable *DBTable;
DBDataSource = new TDataSource(NULL);
DBTable= new TTable(NULL);
TDatabase *DBDatabase;
DBDatabase= new TDatabase(NULL);
 
DBDatabase->DatabaseName= AnsiString("ServicePass ATL" );
DBDatabase->AliasName= AnsiString("ServicePass ATL" );
DBDatabase->LoginPrompt=false;
DBDatabase->Params->Text = "PASSWORD=goldorak*";
 
DBTable->DatabaseName = DBDatabase->DatabaseName;
DBTable->TableName = AnsiString("Cards" );
DBDataSource->DataSet= DBTable;
 
DBTable->Active = true;
 
delete DBDataSource;
delete DBTable;
delete DBDatabase;


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Marsh Posté le 21-05-2001 à 15:21:30    

C'est cool ça marche ! Merci Seb, c'était à cause des delete que ça ne marchait pas (j'utilisai la fonction free)
 
a+
 
Fab

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed