compact and repair

hi
I have a question.
I built an MFC application that connects to an access database by ODBC connection.
I also created MFC classes that inherits the CRecordset
class.

The problem is that when I delete all the records in a certain table, the size of the database does not get smaller.
I need to compact and repair the database.
My question is if there any way to update the size of the mdb database by SQL qurey or by any other way...

thanks alot !!!!
kukiyaAsked:
Who is Participating?
 
bkdcConnect With a Mentor Commented:
In order to compact a database (especially access) you are required to close it first. And since it is closed, it's kinda difficult to compact it using SQL queries.

M$ stuff:


For example, the following code segment would create a .MDB file, repair
it, compress it to a second file, compress it in the same location, and
then create a datasource for it.

   void Config_Sample(void)
   {
             RETCODE retcode;
             int     subscrp;
     extern  HWND    hWnd;      /* Main window handle. */

     UCHAR szDriver[] = "Microsoft Access Driver (*.mdb)";
     UCHAR *szAttributes2[] =
     // Create the original .mdb file.
     {"CREATE_DB=c:\\odbcsdk\\smpldata\\access\\general.mdb General\0\0",

     // Issue a REPAIR_DB on the created file.
     "REPAIR_DB=c:\\odbcsdk\\smpldata\\access\\general.mdb\0\0",

     // Compact the file into a new location.
     "COMPACT_DB=c:\\odbcsdk\\smpldata\\access\\general.mdb "
       "c:\\odbcsdk\\smpldata\\access\\general2.mdb General\0\0",

     // Compact the file onto itself.
     "COMPACT_DB=c:\\odbcsdk\\smpldata\\access\\general.mdb "
       "c:\\odbcsdk\\smpldata\\access\\general.mdb General\0\0",

     // Create a datasource for the first .mdb file created.
     "DSN=albacc\0FIL=MS Access\0JetIniPath=odbcddp.ini\0"
     "DBQ=c:\\odbcsdk\\smpldata\\access\\general.mdb\0"
     "DefaultDir=c:\\odbcsdk\\smpldata\\access\0\0"};

     for (subscrp = 0;
          subscrp <= ((sizeof szAttributes2 / sizeof(UCHAR *)) - 1);
           subscrp++)
     {
       retcode = SQLConfigDataSource(hWnd,
                                     ODBC_ADD_DSN,
                                     szDriver,
                                     szAttributes2[subscrp]);
       if (retcode != TRUE)
         handle_error(retcode);
     }
     return;
   }
0
 
ShaunWildeCommented:
0
 
kukiyaAuthor Commented:
Thanks,
The point is taht I need to work with the ODBC connection
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
ShaunWildeCommented:
I was under the impression you can use Jet to access ODBC
0
 
kukiyaAuthor Commented:
sorry but I'm not sure I understand.

I would like to know if I can execute the command to comapct and repair the mdb file whenever I would like via the visual c++ source code....

0
 
ShaunWildeCommented:
what I am saying is that I don't think you can via MFC - you will have to go via Jet - did you look at the articles I posted?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.