Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / при программном сжатии базы A97 из C++, она больше не открывается... / 25 сообщений из 31, страница 1 из 2
05.08.2004, 17:30:42
    #32637465
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при программном сжатии базы A97 из C++, она больше не открывается...
интерестно почему ???


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

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

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

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

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

Код: 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
05.08.2004, 18:25:52
    #32637522
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при программном сжатии базы A97 из C++, она больше не открывается...
а клиент на чём ? на С что ли?
...
Рейтинг: 0 / 0
05.08.2004, 18:32:02
    #32637530
Мшсещырф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при программном сжатии базы A97 из C++, она больше не открывается...
(Си хоть и читаю по складам, но... - ну уж раз спросили - надо же хоть что-нибудь сказать...)

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

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

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

Provider=Microsoft.Jet.OLEDB.4.0

а это хто?

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

2Мшсещырф

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

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


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

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


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

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






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

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


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

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

ну да ладно забью я на это , до поры до времени ,
эту шабашку уже завтра нужно отнести будет .
основное работает и ладно
...
Рейтинг: 0 / 0
05.08.2004, 20:37:34
    #32637675
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при программном сжатии базы A97 из C++, она больше не открывается...
это есть в 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
05.08.2004, 21:03:01
    #32637689
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при программном сжатии базы A97 из C++, она больше не открывается...
Люди ?? а вы ни чего не путаете ??
мне нужно программннооо ! именно программно !

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

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



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

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

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

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

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

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

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

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


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


2)про тмп - понял - ты потом переименовываешь
...
Рейтинг: 0 / 0
06.08.2004, 10:25:47
    #32638083
Мшсещырф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при программном сжатии базы A97 из C++, она больше не открывается...
Вот пример 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / при программном сжатии базы A97 из C++, она больше не открывается... / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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