Demande de login à une connexion sur une base access

Résolu
Signaler
Messages postés
71
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
5 février 2009
-
Messages postés
71
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
5 février 2009
-
Bonjour,

Je travaille sur un logiciel utilisant une base de données access avec delphi 5.
J'ai crée une tdatabase avec l'alias de ma base dans AliasName et j'ai mis 'Accessb' dans Databasename.
LoginPrompt est à false et j'ai mis login='', user name='' et password='' dans les Params.
Toutes les TTable de mon logiciel utilisant la base access on comme DataBaseName 'Accessb'.

Quand je lance mon programme je choisi sur le disque la base de données access sur laquelle je veux travailler et il me demande alors une identification mais je ne souhaite pas que cette fenetre apparaisse :-/

J'ai lu plusieurs choses sur le forum mais cela ne fonctionne pas. Si quelqu'un pouvait m'éclairer...

Merci

6 réponses

Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Hello,

Tiens je te file la source que j'utilise pour créer mon lien avec ma base access : Tu dois lui passer en parametres le nom de l'alias ODBC et le mot de passe pour la base de données :
Tu auras surement a l'adapter car elle contient des composants ect mais je pense que tu devrais y arriver. Si tu n'y arrives fais moi signe.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.

{------------------------------------------------------------------------------}
{ Création du lien odbc pour se connecter à la base. }
{------------------------------------------------------------------------------}
function LoadCuusamoDataBase(AliasOdbc,PassBase : ShortString) : Boolean;

type
TSQLConfigDataSource = function(hwndParent: HWND;fRequest: WORD;lpszDriver: LPCSTR;
lpszAttributes: LPCSTR ) : BOOL; stdcall;

var
pFn : TSQLConfigDataSource;
HLib : LongWord;
StrDriver,StrAttr : String;
FResult : BOOL;
SrInfo : TSearchRec;
OpenDialog : TOpenDialog;
DataSource1,DataSource2 : TDataSource;
//DataBase : TDataBase;
DataBasePass : TStrings;

begin
Result := False;

{Test pour voir si l'alias a bien été saisie}
If ALiasODBC = '' then
begin
ShowMessage('Entrez un nom pour l''alias ODBC');
Exit;
end;

{Initialisation de la boite d'ouverture}
OpenDialog := TOpenDialog.Create(nil);
OpenDialog.Title := 'Ouvrir base catalogue Cuusamo';
OpenDialog.Filter := 'Base de données Access (*.mdb)|*.mdb|Tous les fichiers (*.*)|*.*';

Try
{Ouverture de la boite de dialogue}
If OpenDialog.Execute then
begin
StrFile := OpenDialog.FileName; //Nom et chemin de la base Access
HLib := LoadLibrary( 'ODBCCP32' ); //Chargement de la Dll Odbccp32

If (hLib <> 0) then //Si la Dll est bien chargée
begin
@pFn := GetProcAddress(hLib, 'SQLConfigDataSource'); //Pointeur

If (@pFn <> nil) then
begin
// force (re-)create DSN
StrDriver := 'Microsoft Access Driver (*.mdb)';
StrAttr := Format( 'DSN='+ ALiasODBC + #0 + 'DBQ=%s' + #0 +
'Exclusive=1' + #0 + 'Description=Test Data' + #0 + #0 ,
[StrFile] );
FResult := pFn(0, ODBC_ADD_SYS_DSN, @StrDriver[1], @StrAttr[1]);

If (FResult = False) then ShowMessage( 'Create DSN (Datasource) failed!' );

// test/create MDB file associated with DSN
If (FindFirst(StrFile, 0, SrInfo ) <> 0) then
begin
StrDriver := 'Microsoft Access Driver (*.mdb)';
StrAttr := Format( 'DSN='+ ALiasODBC + #0 + 'DBQ=%s' + #0 +
'Exclusive=1' + #0 + 'Description=Test Data' + #0 +
'CREATE_DB="%s"'#0 + #0 , [StrFile,StrFile] );
FResult := pFn( 0, ODBC_ADD_SYS_DSN, @StrDriver[1], @StrAttr[1] );

If (FResult = False) then ShowMessage( 'Create MDB (Database file) failed!' );
end;

FindClose( SrInfo );
end;

FreeLibrary( HLib );
end
else
ShowMessage( 'Unable to load ODBCCP32.DLL' );

DataBasePass := TStringList.Create;

Try
//Initialisation de la database
DataBaseCuusamo2 := TDataBase.Create(nil);
DataBaseCuusamo2.AliasName := ALiasODBC;
DataBaseCuusamo2.DatabaseName := 'BaseCuusamo';

With DataBasePass do Add('PASSWORD=' + PassBase);

DataBaseCuusamo2.Params := DataBasePass;
DataBaseCuusamo2.LoginPrompt := False;
//Initialisation de la table machine data
TableCuu := TTable.Create(nil);
TableCuu.DatabaseName := 'BaseCuusamo';
TableCuu.TableName := 'MachineData';
//Initialisation du datasource1
Datasource1 := TDataSource.Create(nil);
Datasource1.DataSet := TableCuu;
FormBases.DBGrid6.Datasource := Datasource1;
//Initialisation de la table machine
TableCuuMachine := TTable.Create(nil);
TableCuuMachine.DatabaseName := 'BaseCuusamo';
TableCuuMachine.TableName := 'Machine';
//Initialisation du datasource2
Datasource2 := TDataSource.Create(nil);
Datasource2.DataSet := TableCuuMachine;
FormBases.DBGridCuuMachine.Datasource := Datasource2;
//Connection
DataBaseCuusamo2.Connected := True;
TableCuu.Exclusive := True;
TableCuuMachine.Exclusive := True;
TableCuu.Active := True;
TableCuuMachine.Active := True;
//On démasque les composants
FormBases.Filtrer.Enabled := True;
FormBases.Max1.Enabled := True;
FormBases.Min1.Enabled := True;
FormBases.Max2.Enabled := True;
FormBases.Min2.Enabled := True;
//On masque les composants de connection
FormBases.ALiasODBC.Enabled := False;
FormBases.PassBase.Enabled := False;
Finally
DataBasePass.Free;
Result := True;
end;
end;
Finally
OpenDialog.Free;
end;
end;
Messages postés
71
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
5 février 2009

Ca y est ca marche !
En fait mon erreur venait du Session1.GetTableNames que je faisais sur l'alias et non sur ma table :-/
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
salut,

Et bien ca me parait bien bizarre car moi meme je fais des chargement de bases access et en metant loginprompt := false et en saississant les bons parametres de login et mot de passe la fenetre n'apparait plus.

Donne nous le morceau de code ou tu charges ta base pour que l'on puisse te depanner...

++,
JMP77.
Messages postés
71
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
5 février 2009

Voilà la déclaration de ma TDataBase (mode texte de la fiche) :

object Accessb: TDatabase
AliasName = 'accessadr01'
DatabaseName = 'Accessb'
LoginPrompt = False
Params.Strings = (
'LOGIN = '#39#39
'USER NAME = '#39#39
'PASSWORD = '#39#39)
SessionName = 'Mediapost01'
Left = 768
Top = 224
end

Pour choisir la base de données access sur laquelle on veut travailler j'ai un bouton qui ouvre une opendialog pour sélectionner la table et j'affiche ensuite les tables de la base dans une liste. Voici le morceau de code :

if OpenDialog1.Execute then EditBDD.Text:=OpenDialog1.FileName;
if CreeDSN(EditDriver.Text,EditNomDSN.Text,EditDescription.Text,EditBDD.Text)
<>0 then {rien} Else Showmessage('Echec de la connexion');
AliasName := EditNomDSN.Text;
Accessb.AliasName := AliasName;
If AliasName <> '' then
begin
// on efface le contenu des listes des tables
list_tables.Clear;
// On récupère la liste des tables de la bdd
Session1.GetTableNames(AliasName,'',false,false,list_tables.Items);
for i:=0 to list_tables.items.count-1 do
begin
list_tables.Items.strings[i]:=copy(list_tables.Items.strings[i],
{}pos('.',list_tables.Items.strings[i])+ 1,
{}length(list_tables.Items.strings[i]) - pos('.',
{}list_tables.Items.strings[i]));
end;

Et ensuite je met dans tous les TTable et TQuery DataBaseName à Accessb
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Cool.

Heureux d'avoir pu te depanner.

Bonne continuation.
Messages postés
71
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
5 février 2009

merci :)