ADOConnection - проблем с переоткрытием
От: Sergey__ Россия  
Дата: 07.01.05 14:44
Оценка:
среда: 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
Re: ADOConnection - проблем с переоткрытием
От: Palich  
Дата: 07.01.05 21:22
Оценка:
Здравствуйте, 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. Я это уже давно сделал. Используй лучше просто строку соединения. Поменял прямо в ней имя файла и радуешься . Да и короче эта строка получается, а как известно, чем проще, тем надёжнее... Удачи в таком нелёгком деле, как программирование!
Re[2]: ADOConnection - проблем с переоткрытием
От: Sergey__ Россия  
Дата: 09.01.05 17:29
Оценка:
Здравствуйте, 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
Sergey
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.