среда: Delphi7 ( WinXp; ADO версии: 2.7)
//в этой строке ADOConnection.ConnectionString='FILE NAME=D:\Work\MCHS\BIN\MCHSProject.udl'
ADOConnection.Open;
//в этой строке
(*ADOConnection.ConnectionString='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=.\data\MCHS.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'
*)
//здесь все o.k. - TADODataSet - нормально открываются
ADOConnection.Close;
... поскипано, но здесь обращений к ADOConnection - нет
//в этой строке ADOConnection.ConnectionString='FILE NAME=D:\Work\MCHS\BIN\MCHSProject.udl'
ADOConnection.Open;
//здесь я получаю ошибку: Строка 'd:\Temp\MCHSProject\data\MCHS.mdb' задает ошибочный путь. Проверьте, что путь задан правильно и имеется подключение к серверу, на котором находятся файлы
откуда появляется строка d:\Temp... ?!? :xz: :crash: :shuffle: :( :maniac: :xz:
подозреваю, что проблема связана с тем, что в ConnectionString указан путь к 'udl'
т.к. при работе с путем, ведущем непосредсвенно к 'mdb' - всё работает
вырезанный кусок :
try
try
ADOConnection.Close;
CopyFile(PChar(fullNameNameSourceDB), PChar(fullNameNameBakDB), False);
V := CreateOleObject('jro.JetEngine');
r := DeleteFile(PChar(fullNameNameTargetDB));
V.CompactDatabase(SourceDB, TargetDB);
CopyFile(PChar(fullNameNameTargetDB), PChar(fullNameNameSourceDB), False);
r := DeleteFile(PChar(fullNameNameTargetDB));
finally
V := Unassigned;
end;
except
else
ShowMessage('procedure CompactDb: ' + #13#10 + Exception(ExceptObject).message);
end;
Здравствуйте, Sergey__, Вы писали:
S__>//в этой строке ADOConnection.ConnectionString='FILE NAME=D:\Work\MCHS\BIN\MCHSProject.udl'
S__>ADOConnection.Open;
S__>//в этой строке
S__>(*ADOConnection.ConnectionString='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=.\data\MCHS.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'
S__>*)
S__>//здесь все o.k. — TADODataSet — нормально открываются
S__>ADOConnection.Close;
S__>... поскипано, но здесь обращений к ADOConnection — нет
S__>//в этой строке ADOConnection.ConnectionString='FILE NAME=D:\Work\MCHS\BIN\MCHSProject.udl'
S__>ADOConnection.Open;
S__>//здесь я получаю ошибку: Строка 'd:\Temp\MCHSProject\data\MCHS.mdb' задает ошибочный путь. Проверьте, что путь задан правильно и имеется подключение к серверу, на котором находятся файлы
S__>откуда появляется строка d:\Temp... ?!?
S__>подозреваю, что проблема связана с тем, что в ConnectionString указан путь к 'udl'
S__>т.к. при работе с путем, ведущем непосредсвенно к 'mdb' — всё работает
В общем может мой трёп тебе чем-нить поможет....
Я больше по Delphi шарю, так что извиняй сразу, если ступлю.
Однако, на сколько я помню, в С++ слэш в пути к файлу надо указывать либо двойным (\\) либо обратным (/). Но это мелочи.
Возможная трабла (ни дай бог, что бы это была она): Винда делает такую нехорошую вешь, как кеш подключений (я с этим в SQL-сервере намучился — пока приложение не перезапустишь, сервер ругался что база используется, хотя я ADOConnection перекидывал на базу с другим именем и она нормально открывалась) От этого бага я так и не смог избавиться.
Могу дать совет — забей на UDL. Я это уже давно сделал. Используй лучше просто строку соединения. Поменял прямо в ней имя файла и радуешься

. Да и короче эта строка получается, а как известно, чем проще, тем надёжнее... Удачи в таком нелёгком деле, как программирование!
Здравствуйте, Palich, Вы писали:
P>Я больше по Delphi шарю, так что извиняй сразу, если ступлю.
P>Однако, на сколько я помню, в С++ слэш в пути к файлу надо указывать либо двойным (\\) либо обратным (/). Но это мелочи.
дык и я — наваял это в делфях !
P>Возможная трабла (ни дай бог, что бы это была она): Винда делает такую нехорошую вешь, как кеш подключений (я с этим в SQL-сервере намучился — пока приложение не перезапустишь, сервер ругался что база используется, хотя я ADOConnection перекидывал на базу с другим именем и она нормально открывалась) От этого бага я так и не смог избавиться.
но уменя в строке появляется путь к temp !
а там баз не храниться
хотя может чудит
V := CreateOleObject('jro.JetEngine');
V.CompactDatabase(SourceDB, TargetDB);
может jro.JetEngine — использует переменныу окружения Temp — и меняет путь ?
P>Могу дать совет — забей на UDL. Я это уже давно сделал. Используй лучше просто строку соединения.
согласен и именно так я и поступал ранее и все

работало !!!!
проверял по пути прописанному заранее у себя в ini — а если нет то — выводил диалог и сохранял новый путь ...
но тут мне вдруг показалось, что udl — просще
например поменять путь к базе — не надо вызывать редактор строки соединения
работает OS и UDL