Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2016, 14:53   #1
cw82
Пользователь
 
Аватар для cw82
 
Регистрация: 14.10.2010
Сообщений: 52
По умолчанию Не понятки с OpenDialog1

Не могу понять в чем дело, да и загуглить правильно не могу свой вопрос.Надеюсь на понимание... В общем есть код:
Код:
procedure TForm1.Button5Click(Sender: TObject);
begin
if openDialog1.Execute
   then
   begin
   CopyFile(PChar(opendialog1.FileName),(PChar('11.cr')),false);

end;

     end;


procedure TForm1.Button6Click(Sender: TObject);{ПРоцедура сжатие и восстановление БД
Файл .mdb должен быть в той же папке где и прога}

var JetEng:OLEVariant;
    Src,Dest:ANSIString;
begin
  {Компонент ADOConnection1 связан с Bill.mdb, поэтому в его
  свойство Connected запишем значение False}
  ADOConnection1.Connected:=False;
   ADOQuery1.Active:=False;

  JetEng := CreateOleObject('JRO.JetEngine');

  Src:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Bill.mdb';
  Dest:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=~$.mdb';

  if FileExists('~$.mdb') then DeleteFile('~$.mdb');
  JetEng.CompactDatabase(Src,Dest);
  VarClear(JetEng);
  DeleteFile('Bill.mdb');
  RenameFile('~$.mdb','Bill.mdb');
  ADOConnection1.Connected:=True;



end;
Процедурой Button6Click я "сжимаю " базу Bill.mdb (которая лежит в папке с программой). Здесь все хорошо.
Если я сначало запускаю OPenDialog1 и выбираю там файл для копирования , а затем пытаюсь сжать базу то вылетает ошибка - не найден файл в D:/crec/Bill.mdb
В этом пути D:/crec не должно быть этого файла Bill.mdb , В общем такое ощущение как будто процедура сжатия БД берет путь для БД из OpenDialog.
Подскажите - кактак то??? Заранее благодарю. Весь день сижу, смотрю на это безобразие, а понять что делать не могу...
cw82 вне форума Ответить с цитированием
Старый 07.11.2016, 14:59   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В Options диалога настрой, что бы не менялся рабочий каталог по выходу из него (ofNoChangeDir). Но и это не поможет, если прога, например, с ярлыка будет стартовать и в нем не прописан рабочий каталог. Поэтому все пути должны быть полными
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.11.2016, 18:02   #3
cw82
Пользователь
 
Аватар для cw82
 
Регистрация: 14.10.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В Options диалога настрой, что бы не менялся рабочий каталог по выходу из него (ofNoChangeDir). Но и это не поможет, если прога, например, с ярлыка будет стартовать и в нем не прописан рабочий каталог. Поэтому все пути должны быть полными
Я прописывал в свойствах опендиалога путь к папке с файлами, но это не помогло,или нужно прописывать путь прямо к файлу? Но файл каждые сутки будет новый,хотя в одной и той же папке, Как тогда быть? Мне не понятно почему процедура Опен диалога влияет на процедуру сжатия базы? Может можно как то отчистить опендиалог...типа Опендиалог.Close???
cw82 вне форума Ответить с цитированием
Старый 07.11.2016, 19:02   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
В Options диалога настрой, что бы не менялся рабочий каталог по выходу из него (ofNoChangeDir)
Читай
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.11.2016, 19:55   #5
cw82
Пользователь
 
Аватар для cw82
 
Регистрация: 14.10.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Читай
спасибо, ошибка пропала, только теперь этот файл opendialog1.FileName не копируется в 11.cr , те. какой бы файл в диалоге я не выбрал - 11. cr не меняется...
Спасибо что помогаете.

Последний раз редактировалось cw82; 08.11.2016 в 06:09.
cw82 вне форума Ответить с цитированием
Старый 07.11.2016, 20:04   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Поэтому все пути должны быть полными
Это тоже желательно прочитать, что бы избегать такого рода ошибок
ExtractFilePath(Application.ExeName ) - вот он полный путь к каталогу твоего exe. Добавляй к нему имя файла с расширением и получишь полный путь к любому файлу в этом каталоге:
ExtractFilePath(Application.ExeName )+'Bill.mdb'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.11.2016, 13:02   #7
cw82
Пользователь
 
Аватар для cw82
 
Регистрация: 14.10.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это тоже желательно прочитать, что бы избегать такого рода ошибок
ExtractFilePath(Application.ExeName ) - вот он полный путь к каталогу твоего exe. Добавляй к нему имя файла с расширением и получишь полный путь к любому файлу в этом каталоге:
ExtractFilePath(Application.ExeName )+'Bill.mdb'
Добрый день уважаемый Аватар, потратил весь день, прочитал Ваши посты на этом форуме по сабжу, сделал в своей проге следующее вместо
Код:
AssignFile(cr,'11.сr');
сделал
Код:
AssignFile(cr,ExtractFilePath(Application.ExeName)+'11.cr')
Спасибо Вам за это.
Но никак не догоню, что мне сделать чтобы --", только теперь этот файл opendialog1.FileName не копируется в 11.cr , те. какой бы файл в диалоге я не выбрал - 11. cr не меняется... "--
Если Вас не затруднит можете показать где мне применить ExtractFilePath(Application.ExeName ). Я начинающий... поэтому испытываю трудности даже на уровне грамматики языка. Спасибо.
cw82 вне форума Ответить с цитированием
Старый 08.11.2016, 13:20   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
sourcefilename:=OpenDialog1.FileName; // ИМЯ и путь что будем копировать
targetfilename:=ExtractFilePath(Application.Exename) +'11.cr'; // ИМЯ и путь куда будем копировать
copyfile( Pchar(sourcefilename), Pchar(targetfilename), ... ); // ну и само копирование
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 08.11.2016, 13:52   #9
cw82
Пользователь
 
Аватар для cw82
 
Регистрация: 14.10.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
sourcefilename:=OpenDialog1.FileName; // ИМЯ и путь что будем копировать
targetfilename:=ExtractFilePath(Application.Exename) +'11.cr'; // ИМЯ и путь куда будем копировать
copyfile( Pchar(sourcefilename), Pchar(targetfilename), ... ); // ну и само копирование
Спасибо, что ответили. Сделал вот так :
Код:
procedure TForm1.Button5Click(Sender: TObject);
var
sourcefilename: String;
targetfilename: String;
begin
if openDialog1.Execute
   then
   begin
   //CopyFile(PChar(opendialog1.FileName),(PChar('11.cr')),false);
sourcefilename:= opendialog1.FileName; // ИМЯ и путь что будем копировать
targetfilename:= ExtractFilePath(Application.Exename) +'11.cr'; // ИМЯ и путь куда будем копировать
copyfile( Pchar(sourcefilename), Pchar(targetfilename),false ); // ну и само копирование

end;

     end;
К сожалению Opendialog1 по прежнему выбирает , но не копирует нужный файл в 11.cr . Если программу закрыть - открыть , то выбирает и копирует нужный файл... Если повторно выбираешь др файл, то по прежнему 11. cr остается со старыми данными...
cw82 вне форума Ответить с цитированием
Старый 08.11.2016, 14:02   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А 11.cr не открыт во время копирования? И Opendialog ни чего не копирует, копирует copyfile
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кое какие не понятки с БД KenesK БД в Delphi 3 06.09.2016 11:24
не выполняется opendialog1.Execute virtuhay266 Общие вопросы Delphi 2 09.01.2011 00:06
не выполняется opendialog1.Execute virtuhay266 Помощь студентам 9 08.01.2011 22:12
OpenDialog1.Execute=true (error) zotox Помощь студентам 2 13.07.2009 16:30
КОМПОНЕНТ OpenDialog1 Anna_fors Компоненты Delphi 3 05.06.2009 22:00