![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Здравствуйте, уважаемые коллеги! [D5, MS Access]
Valentin2 © (2002-03-11 11:16:00)Кто-нибудь создавал программно базу данных MS Access?
Пробовал с помощью функции SQLConfigDataSource, но по-моему это не то, да и библиотеки соответствующей у меня не оказалось...
И ещё вопрос: каким образом, опять же программно сжать базу MS Access?
Благодарен заранее за любое внимание к моей проблеме.
sevylor (2002-03-12 08:01:00) [1]uses ADOX_TLB, ADODB, ComObj, SysUtils, JRO_TLB;
function CompactDB(dbName:string):string;
const
CConnStr:WideString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
var
JetEng : JetEngine;
s:string;
begin
s:=ChangeFileExt(dbName,".bak");
if FileExists(s) then DeleteFile(s);
RenameFile(dbName,s);
// Создать экземпляр объекта JetEngine
JetEng := CoJetEngine.Create;
JetEng.CompactDatabase(CConnStr+s,CConnStr+dbName);
JetEng:=nil;
end;
Valentin2 (2002-03-11 13:16:00) [2]Я пробовал на базе объёмом 3.8 Mb. После сжатия получилась новая база с другим именем в том же каталоге размером 1.7 Mb, и никаких проблем!
sniknik (2002-03-11 12:50:00) [3]А точно работает? У меня насколько помню проблемы были, вроде отрабатывает ошибок нет а база неупакована. Вот я и решил что только она сама изнутри может.
Valentin2 (2002-03-11 12:43:00) [4]У меня заработало, но я программирую на Bilder-е, и как это будет на Delphi, не знаю, но думаю, разобраться можно:
Variant je=CreateOleObject("JRO.JetEngine");
je.OleFunction("CompactDatabase","Provider=Microsoft.Jet.OLEDB.4.0;"
"Data Source=С:\\NonCompressed.mdb",
"Provider=Microsoft.Jet.OLEDB.4.0;"
"Data Source=C:\\Compressed.mdb;"
"Jet OLEDB:Encrypt Database=True");
Valentin2 (2002-03-11 12:21:00) [5]У меня в папке "C:\Program Files\Common Files\SYSTEM\ADO" есть Help Ado210.chm, и в нём есть пример функции CompactDatabase на Visual Basic-е, но я в нём пока не разобрался. Может, ты попробуешь?
Valentin2 (2002-03-11 12:06:00) [6]Хорошо...
sniknik (2002-03-11 11:58:00) [7]Найдеш как зашли на мыло, чтоб не пропустить. Мне не удалось.
Valentin2 (2002-03-11 11:41:00) [8]sniknik! Большое Вам спасибо!!! базу удалось создать с первой попытки.
Но вот с паковкой всё-таки проблема остаётся, и её всё-таки можно сжимать программно, ведь ODBC это делает именно так, но как?..
sniknik (2002-03-11 11:23:00) [9]через ADOX
if not FileExists(sBase) then begin
AdoEngine:= CreateOleObject("ADOX.Catalog");
AdoEngine.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
sBase+";Jet OLEDB:Engine Type=5;");
AdoEngine.ActiveConnection.Close;
AdoEngine:= Null;
end;
через DAO
procedure CreateMSAccessDB(filename : String);
var
DBEngine, Workspace: Variant;
const
{Important to use the following constant as is}
dbLangGeneral = ";LANGID=0x0409;CP=1252;COUNTRY=0";
dbVersion30 = 32;
begin
DBEngine := CreateOleObject("DAO.DBEngine");
{DBEngine := CreateOleObject("DAO.DBEngine.35"); For DAO 3.5}
Workspace := DBEngine.Workspaces[0];
try
Workspace.CreateDatabase(filename, dbLangGeneral, dbVersion30);
except
on EOleException do ShowMessage("Database already exists");
end;
end;
а вот с паковкой туго вроде она сама разбырается что и как ей паковать и других не допускает к этому делу.