Solved

Access / Delphi Password Problems.....

Posted on 2004-09-13
7
278 Views
Last Modified: 2010-04-05
Hi experts,

When ever I try and set a password on the access DB my app is connecting to I get the following error:

---------------------------
Microsoft Data Link Error
---------------------------
Test connection failed because of an error in initializing provider. Cannot start your application. The workgroup information file is missing or opened exclusively by another user.
---------------------------
OK  
---------------------------

If any of you experts could please help me with this I would really appriciate your help and advise.  What I want to do is then hard code the DB password and then have a table in the DB that contains user set username and password to actually log into the app.

I am connecting to the DB the following way:

********************************************************************

function GetDBLOCATION : String;
var
  Reg : TRegistry;
begin
  Result := '';
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey ('\Software\'+application.title, true) then
      Result := Reg.ReadString ('DBNAME');
      Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;

procedure TForm1.Startup(Sender: TObject);
var
  Reg : TRegistry;
  flag : Boolean;
begin
  flag := True;
  if Not DBConnected then
  begin
    DBPath := GetDBlocation;
    while not FileExists(DBPath) do
    begin
      OpenDialog1.Title := 'Database Location';
      OpenDialog1.Filter := 'Access Database|*.mdb';
      if OpenDialog1.Execute then
      begin
        Reg := TRegistry.Create;
        DBPath := OpenDialog1.FileName;
        try
          Reg.RootKey := HKEY_CURRENT_USER;
          Reg.OpenKey ('\Software\'+application.title, true); // Write path and address to register
          Reg.CloseKey;
        finally
          Reg.Free;
        end; // try
      end // if
      else
      begin
        showmessage('Unable to connect to the Database.');
        flag:=false;
        break;
      end;
    end;
    if flag then
      BankManagerConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
                                + DBPath
                                + ';Persist Security Info=False';
    DBConnected := True;
  end;
end;

********************************************************************

What I want to do is:
1. App starts and creates a connection to the DB.
2. Form displayed user then inputs their details, if in table then login successful.

I need help with step 1.

Please help, desperate  :o(  Any questions please ask.

More points on offer for working solution.

Bego.
0
Comment
Question by:begonz
7 Comments
 
LVL 14

Expert Comment

by:Pierre Cornelius
ID: 12042298
Try setting your connectionstring to the following:

BankManagerConnection.ConnectionString
  := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="YourPsw";Data Source='
      + DBPath
      + 'Mode=ReadWrite|Share Deny None;'
      + 'Persist Security Info=False';

0
 
LVL 22

Accepted Solution

by:
Mohammed Nasman earned 500 total points
ID: 12042597
Hello
if the Access file has  a password, add this to the connectionstring

'Jet OLEDB:Database Password=thepassword'

it's will look like
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
                                + DBPath
                                + ';Persist Security Info=False;Jet OLEDB:Database Password=thepassword';

and if you the user to enter the password then show Inputbox for the password and then add it to the connecitonString

HTH

Regards,
Mohammed
0
 
LVL 6

Expert Comment

by:bpana
ID: 12042637
add the password to the connection string and set Persist Security Info = True. also set Login Prompt = False
and make sure the database is not opened (is not in use)
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Expert Comment

by:meadorj
ID: 12044164
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey ('\Software\'+application.title, true); // Write path and address to register
Reg.CloseKey;

This is incorrect.  You have to write to the registry useing WriteString.  So it should be:

Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey ('\Software\'+application.title, true); // Write path and address to register
Reg.WriteString(OpenDialog1.FileName)
Reg.CloseKey;
0
 

Expert Comment

by:meadorj
ID: 12044177
Then somewhere you need to set DBPath equal to OpenDialog1.FileName.
0
 
LVL 5

Expert Comment

by:Voodooman
ID: 12046612
Hi

Just a comment.

I have seen this problem before with ADO but can't remember the reason (I use DAO with Access - it is lots faster and all the databound VB controls work with it - they dont with the ADO).

I suggest that you re-install the MDAC (2.7) followed by the Jet Engine (Jet40Sp3_Comp.exe).

I have just checked and the MDAC is now 2.8 - http://www.microsoft.com/downloads/details.aspx?FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en

The Jet Engine is not included with the MDAC anymore, and looks like Microsoft are being a bit coy about giving it you now - you can dowload it from http://www.omegatron.nl/default.asp?target=download.asp

Voodooman

0
 

Author Comment

by:begonz
ID: 12060429
Thanks Mohammed exactly what I wanted.  Finally got it connected last night with only minor change to my existing code.

I have also managed to get my user login form working as well.

Thanks again.

Bego.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
A short film showing how OnPage and Connectwise integration works.
Need to grow your business through quality cloud solutions? With everything required to build a cloud platform and solution, you may feel like the distance between you and the cloud is quite long. Help is here. Spend some time learning about the Con…

948 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now