Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 5 of 5 total
Thread Bug-0005 DBISAM Engine Error #11013 Access denied to table 'C:\Program Files (x86)\eInstruction\CPS\
Wed, Jun 22 2011 10:54 AMPermanent Link

Madhu

Hi Young,

 This is Nagavardhan.
 We been facing a vague issue specific to windows7 64-bit machine. Can you please help us in sorting this out?

To be brief about the issue:
         We are trying to execute a statement which alters the table by adding new columns. For this, we are using TDBISAMQuery object in Delphi6.
We have set the DatabaseName property of the TDBISAMQuery object to the <user\App Data> folder. The DDL statement executes fine and adding the columns in Windows7 32-bit and Windows XP machines. But throwing the following exception on windows7 64-bit machine.

 DBISAM Engine Error #11013 Access denied to table 'C:\Program Files (x86)\XXX\XXX\XXX.DAT'

Though we are explicitly passing the App Data path to the DatabaseName property. The Object is referring to the installation path where this project dll is placed. And throwing the exception.


Following is the code:

________________________________________
procedure TcpsSATempTableManager2.AddTableColumns(aNumStandardsCol: Integer);
var
 lQuery: TDBISAMQuery;
begin
 
 if (DataPath <> '') and (aNumStandardsCol > 1) then
   begin
     lQuery := TDBISAMQuery.Create(nil);

     try
       Table.Close;
       
       lQuery.Close;
       lQuery.DatabaseName := DataPath;                                                 // Datapath here is reffering to the APP data folder.
       lQuery.SQL.Text := GetStudentTableAlterSQL(aNumStandardsCol);        // This function will return a Alter table SQL statement.
       lQuery.ExecSQL;                                                                           //Exception is thrown from this statement.
 
       Table.Open;
       
     finally
       lQuery.Free;
     end; {Try}
   end;  
________________________________________


Awaiting for your suggestion.
Wed, Jun 22 2011 1:05 PMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Madhu


My guess is you haven't set the PrivateDir appropraitely and that W7 64bit  is doing something different to the 32 bit version.

The PrivateDir path is the only one that DBISAM will set for you if you don't set it explicitly, and calls for directories under W7 can give strange results.

The only other thing is W7 redirects. Since your's is a 32 bit app running on a 64 bit machine you can again get redirects.

Roy Lambert [Team Elevate]
Wed, Jun 22 2011 7:51 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Roy,

<< The PrivateDir path is the only one that DBISAM will set for you if you
don't set it explicitly, and calls for directories under W7 can give strange
results. >>

Actually, the PrivateDir remained blank if not set prior to the last build
(4.30 B5).  As of 4.30 B5, the PrivateDir now defaults to the user's
temporary files directory.

--
Tim Young
Elevate Software
www.elevatesoft.com
Wed, Jun 22 2011 7:53 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com


<< We are trying to execute a statement which alters the table by adding
new columns. For this, we are using TDBISAMQuery object in Delphi6.  We have
set the DatabaseName property of the TDBISAMQuery object to the <user\App
Data> folder. The DDL statement executes fine and adding the columns in
Windows7 32-bit and Windows XP machines. But throwing the following
exception on windows7 64-bit machine. >>

Answered via email:

You need to make sure that you set the TDBISAMSession.PrivateDir property to
the proper temporary files directory:

http://www.elevatesoft.com/manual?action=viewprop&id=dbisam4&product=d&version=7&comp=TDBISAMSession&prop=PrivateDir

If you aren't using an explicit TDBISAMSession component in your
application, then you can use the following code to do so:

Session.PrivateDir:='c:\temp';

Just make sure that you execute this code before opening any tables or
executing any queries.

In addition: I forgot to mention that 4.30 B5 now automatically defaults the
PrivateDir to the user's temporary files directory under Windows, but only
if it hasn't been set.

--
Tim Young
Elevate Software
www.elevatesoft.com
Thu, Jun 23 2011 3:30 AMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Tim

><< The PrivateDir path is the only one that DBISAM will set for you if you
>don't set it explicitly, and calls for directories under W7 can give strange
>results. >>
>
>Actually, the PrivateDir remained blank if not set prior to the last build
>(4.30 B5). As of 4.30 B5, the PrivateDir now defaults to the user's
>temporary files directory.

Amazing what memory does to you isn't it Smiley

Roy Lambert
Image