powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / при программном сжатии базы A97 из C++, она больше не открывается...
31 сообщений из 31, показаны все 2 страниц
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637465
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интерестно почему ???


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637472
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде она не дает себя программно сжимать пока открыта?

показывай код .

я видел загадочный комп на который можно было перезаписать файл adp - который открыт юзером - и после этого комп намертво вис, а сам файл разрушался
может такой же случай?
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637492
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он у меня на С++

а дело в том что я обрубаю коннект к базе сперва , а потом , только
сжимаю , иначе просто вылетало приложение с ошибкой "ошибка"
я долго мучился что за загадочная информация такая
пока не вспомнил про это , так сказать правило :)

а делаю так , слизал с какогото сайта :) .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
bool __stdcall CompactMDB(AnsiString mdb,AnsiString pass1,AnsiString pass2)
{
   bool ReturnValue;
   AnsiString tmp=ChangeFileExt(mdb,".tmp");
   AnsiString Provider1="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+mdb+";Jet OLEDB:Database Password="+pass1;
   AnsiString Provider2="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+tmp+";Jet OLEDB:Database Password="+pass2;
   Variant AdoObj;
    try
     {
       if(FileExists(tmp)) DeleteFile(tmp);
       // AdoObj = CreateOleObject("JRO.JetEngine");
       AdoObj = Variant::CreateObject("JRO.JetEngine");
       AdoObj.OleProcedure("CompactDatabase",Provider1.c_str(),Provider2.c_str());
       if(FileExists(mdb)) DeleteFile(mdb);
        RenameFile(tmp,mdb);
        ReturnValue=true;
      }
    catch(Exception &e)
      {
        ShowMessage("Err2 " + e.Message);
        ReturnValue=false;
      }
     AdoObj.Clear();
     return ReturnValue;
}
// --------------------------------------------------------- 

void __fastcall TForm1::N4Click(TObject *Sender)
{
   ADOConnection1->Connected = false;  // отваливаюсь от базы
   CompactMDB("tempbd.mdb","","");  // типа сжал 
   ADOConnection1->Connected = true; // все больше не открывает
}

при попытке открыть 97 аксессом кричит "неизвестный формат"



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637522
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а клиент на чём ? на С что ли?
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637530
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(Си хоть и читаю по складам, но... - ну уж раз спросили - надо же хоть что-нибудь сказать...)

такое впечатление, что кто-то не отпускает соединение или не сбрасывает буфера.

может просто задержку надо дать...

Кстати, что делает AdoObj.Clear() ?
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637535
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СТОП

Provider=Microsoft.Jet.OLEDB.4.0

а это хто?

может 3.51.xxx ?
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637536
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и почему меняешь расширение файла?
обычно имя меняют
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637544
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2TatianaT
а клиент на чём ? на С что ли?
угу .

2Мшсещырф

Кстати, что делает AdoObj.Clear() ?

Хмм , если я создал обьект что мне сним потом делать ?


Provider=Microsoft.Jet.OLEDB.4.0
а это хто?
может 3.51.xxx ?

пробовал , опять очень информативная ошибка "Ошибка" !


и почему меняешь расширение файла?
обычно имя меняют

недумаю что расширение файла как то на это влияет ...






 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637550
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще воспользоваться сторонней сжималкой? Тем же msaccess /compact или jetcomp.exe (он еще и структуру починяет)
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637577
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно все
вот только с этой программулиной не я буду работать ,
а извиняюсь за выражение тупые юзеры , для них и аксесс темный лес ,
который они обходят стороной

ну видимо откажусь я от этого решения , просто я хотел как лутьше ...
после каждого удаления и внесения даных сжымать .


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637585
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел в виду вызывать ее из своей программы. Хотя акцесс еще и закрывать придется программно. Тады ой.
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637643
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeoЯ имел в виду вызывать ее из своей программы. Хотя акцесс еще и закрывать придется программно. Тады ой.

вот а ради этого , думаещь юзвери захотят аксесс ставить ??
не думаю ...

ну да ладно забью я на это , до поры до времени ,
эту шабашку уже завтра нужно отнести будет .
основное работает и ладно
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637675
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это есть в ODBC - кто-то из киевлян пользует.
соответственно функция SQLConfigDataSource
описание в SDK от MDAC/MSDN
дёрни из С - вдруг поможет!
Билл
SQLConfigDataSource (Access Driver)
Note This topic provides Access Driver-specific information. For general information about this function, see the appropriate topic under ODBC API Reference.
The SQLConfigDataSource function that is used to add, modify, or delete a data source dynamically uses the following keywords.


Keyword Description
COLLATINGSEQUENCE The sequence in which the fields are sorted.
This sets the same option as Collating Sequence in the setup dialog box.

COMPACT_DB Performs data compaction on a database file. Has the following format: COMPACT_DB=<path_name><optionaL_sort_order><optional ENCRYPT keyword>.
When using the COMPACT_DB keyword in the same statement with a DSN keyword, this driver ignores the DSN keyword. Therefore, compacting a database and specifying a DSN is a two-step process.
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637689
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди ?? а вы ни чего не путаете ??
мне нужно программннооо ! именно программно !

ладно не обижайтесь я обяжал еще за пивом ... ик ...

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637690
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Shuhard
ой звиняй что накричал !
я знаю эту штучку , но мне не нравится , что она выводит диалог ...
я только что вник , ну сам знаешь пару балонов пива и все такое .
или я опять что то путаю
ладно завтра трезво взгляну



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637695
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвот а ради этого , думаещь юзвери захотят аксесс ставить ??
Попробовал.
Качаем файл jetcomp с микрософта. Записываем его клиенту куда хотим вместе со своей программой.
Изнутри программы для сжатия базы вызываем:
path\jetcomp -src:source.mdb -dest:dest.mdb
(Вероятно, последним аргументом придется писать -v3)
Трем первый файл, переименовываем второй. Сжатая и починённая база готова. Безо всяких диалогов.
Это чтоб не искать, как из сей работать с JRO...
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637706
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geo авторвот а ради этого , думаещь юзвери захотят аксесс ставить ??
Попробовал.
Качаем файл jetcomp с микрософта. Записываем его клиенту куда хотим вместе со своей программой.
Изнутри программы для сжатия базы вызываем:
path\jetcomp -src:source.mdb -dest:dest.mdb
(Вероятно, последним аргументом придется писать -v3)
Трем первый файл, переименовываем второй. Сжатая и починённая база готова. Безо всяких диалогов.
Это чтоб не искать, как из сей работать с JRO...

не не катит , я живу почти в деревни ,
мое торение будут выкачивать по диалапу ...
представляешь ???

вот поэтому я ограничился только MDAC-ом :(

эхх когдаже придет эра офигенно мегабитного канала даже в деревню
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637707
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кхым , кхым , я имел ввиду не все но 60 процентов точно по диалапу ...

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637718
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня лежит инстялляшка jetcomp размером 113 кБ. Не думаю, что она сейчас сильно выросла у мелкософта. И вообще. Я что тебя, уговариваю? :))
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637720
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. 113 кб = jetcomp.exe + jetcomp.doc
jetcomp.exe + winrar = 25 кБ
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637724
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вьехал - MDAC 5 метров
JetComp - 27 кбайт
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637759
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shuhardне вьехал - MDAC 5 метров
JetComp - 27 кбайт

а ну тогда кидайте ... мне на мыло
мыло в профайле ...

кстати ,а нету у мелкомягких MDAC как бы по отдельности ???

мне же нужно только JET и OLE DB for ODBC ...
а из-за этого весь mdac тнуть мне кажется как то не в тему
всем спасибо и все такое !
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32637912
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынц - выложен файл вчера 22:01 или пивная религия качать с конфы не позволяет ?
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638056
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а MSDN -то стоит?


1) у тебя формат базы после сжатия - 4.0, а тебе надо 3.51,
Поэтому в параметры соединения по крайней мере для базы - результата надо писать
Jet OLEDB:Engine Type=4 - это будет 3.51, =5 - формат 4.0, по умолчанию - 5


2)про тмп - понял - ты потом переименовываешь
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638083
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пример 1

Visual C++: Compacting an Access Database via ADO
Besides #import, the Msado15.dll (MDAC2.1), add the following #import statement to generate the wrapper classes for JRO to your .cpp classes (alternatively, you can generate the wrapper classes more efficiently by using the no_implementation and implementation_only attributes of the #import pre-processor statement):

#import "C:\PROGRAM FILES\COMMON FILES\System\ado\MSJRO.DLL" no_namespace



Add the following (specifying your own source and destination database paths) to the .cpp file where you want to compact the database:

...
try
{
IJetEnginePtr jet(__uuidof(JetEngine));
jet->CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc.mdb;Jet OLEDB:Engine Type=4");
}
catch(_com_error &e)
{
::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;
}



NOTE: The Jet OLEDB:Engine Type=4 is only for Jet 3.x format MDB files. If this value is left out, the database is automatically upgraded to the 4.0 version (Jet OLEDB:Engine Type=5). See the following table for appropriate values for Jet OLEDB:Engine Type:
Jet OLEDB:Engine Type Jet x.x Format MDB Files
1 JET10
2 JET11
3 JET2X
4 JET3X
5 JET4X
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638088
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пример другой,

ближе к тому, что ты пытался выписать.

http://support.microsoft.com/default.aspx?scid=kb;en-us;230496
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638336
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МшсещырфВот пример 1

Visual C++: Compacting an Access Database via ADO
Besides #import, the Msado15.dll (MDAC2.1), add the following #import statement to generate the wrapper classes for JRO to your .cpp classes (alternatively, you can generate the wrapper classes more efficiently by using the no_implementation and implementation_only attributes of the #import pre-processor statement):

#import "C:\PROGRAM FILES\COMMON FILES\System\ado\MSJRO.DLL" no_namespace



Add the following (specifying your own source and destination database paths) to the .cpp file where you want to compact the database:

...
try
{
IJetEnginePtr jet(__uuidof(JetEngine));
jet->CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc.mdb;Jet OLEDB:Engine Type=4");
}
catch(_com_error &e)
{
::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;
}



NOTE: The Jet OLEDB:Engine Type=4 is only for Jet 3.x format MDB files. If this value is left out, the database is automatically upgraded to the 4.0 version (Jet OLEDB:Engine Type=5). See the following table for appropriate values for Jet OLEDB:Engine Type:
Jet OLEDB:Engine Type Jet x.x Format MDB Files
1 JET10
2 JET11
3 JET2X
4 JET3X
5 JET4X

Спасибо вот так вот получилось :)
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638400
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JibSkeart
Спасибо вот так вот получилось :)

хорошо что заработало, а как на рабочий - я бы сильно на вариант от Geo пальцем указал.

на всякий случай - совет от Geo лучше в том отношении, что "утилитный" jetcomp богаче по возможностям - не толко обновляет статистики для запросов, убирает брошенные блобы, переписывает и сжимает пустые страницы, но и исправляет широкий спектр нарушений базы структуры базы.
В доке к jetcomp они описаны.
Удачи.
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638425
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мшсещырф JibSkeart
Спасибо вот так вот получилось :)

хорошо что заработало, а как на рабочий - я бы сильно на вариант от Geo пальцем указал.

на всякий случай - совет от Geo лучше в том отношении, что "утилитный" jetcomp богаче по возможностям - не толко обновляет статистики для запросов, убирает брошенные блобы, переписывает и сжимает пустые страницы, но и исправляет широкий спектр нарушений базы структуры базы.
В доке к jetcomp они описаны.
Удачи.

не думаю что мне это пригодится :))
там у меня только одна табличка и все ...
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638429
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу , забыл дописать ...
вообщем приму к сведенью , спасибо всем !

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
при программном сжатии базы A97 из C++, она больше не открывается...
    #32638463
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для тех, кто VB/VBA - то есть для меня - вышеприведенный код будет выглядеть так.


Visual Basic: Compacting an Access Database via ADO
In the Visual Basic IDE, on the Projects menu, click References.


Add Microsoft Jet and Replication Objects X.X library, where (X.X is greater than or equal to 2.1).


Add the following lines of code to Visual Basic, replacing the data source and destination database paths if needed:


Dim jro As jro.JetEngine
Set jro = New jro.JetEngine
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc2.mdb;Jet OLEDB:Engine Type=4"


-------
соответствующая статья в MSDN - HOWTO: Compacting Microsoft Access Database via ADO
ID: Q230501
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / при программном сжатии базы A97 из C++, она больше не открывается...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]