Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.05.2009, 09:06
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
Вопрос Помогите пожалуйста разобраться

Есть вот такая структурка
Код:
// Запись настройки
Settings = record
   Name: String[255]; // Наименование настройки
   DBPath: String[255]; // Путь к базе
   DBUserName: String[100]; // Имя пользователя
   DBUserPassword: String[50]; // Пароль пользователя
   DBType: Byte; // Тип базы данных (0 - файловая, 1-серверная)
   ExchangeCode: String[10]; // Код настройки обмена
end;

// Коллекция настроек
SettingsData = record
   RunPath: String[255]; // Путь запуска 1С Предприятия
   Data: Array[0..49] of Settings; // Массив настроек
   Count: Byte; // Количество записей
end;
И есть процедура, которая осуществляет запись в файл
Код:
procedure SaveSettingsDB();
var
  SettingsFile: file of SettingsData;
begin
  AssignFile(SettingsFile, 'Settings.dat');
  Rewrite(SettingsFile);
  Write(SettingsFile, MainData);
  CloseFile(SettingsFile);
end;
Admin: Пользуемся тегами!

Проблема в следующем:
- Если есть записи в MainData.Data - все хорошо сохраняется, но если заполнить просто MainData.RunPath, а MainData.Data не трогать, то файл вообще не создается.

Вопрос: Почему так происходит и как это побороть?

Последний раз редактировалось Admin, 19.05.2009 в 10:17.
Ответить с цитированием
  #2  
Старый 19.05.2009, 09:23
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию Уточнение

Немного разобрался
Код:
procedure TfrmSettings.btOpenPath1CClick(Sender: TObject);
begin
  OpenDialog.Filter:='Файл запуска 1С Предприятия|1cv8.exe';
  OpenDialog.Title:='Укажите путь запска 1С Предприятия';
  if OpenDialog.Execute then
  begin
    EditPath1C.Text:= OpenDialog.Files[0];
    MainData.RunPath:=EditPath1C.Text;
  end;
  OpenDialog.Destroy;
end;

Если OpenDialog не вызывать, а EditPath заполнять руками и потом

MainData.RunPath:=EditPath1C.Text;

...то все работает.
Подскажите, как это лечить?

Последний раз редактировалось Admin, 19.05.2009 в 10:17.
Ответить с цитированием
  #3  
Старый 19.05.2009, 11:36
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ошибка не здесь. И судя по этой строке:
Код:
OpenDialog.Destroy;
к коде есть много интересного и неожиданного. Так что не удивительно наличие необъяснимых ошибок.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 19.05.2009, 14:08
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Может и так
Но факт остается фактом, если выбор файла все таки произошел через OpenDialog, то Settings.dat не создается
Ответить с цитированием
  #5  
Старый 19.05.2009, 14:24
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Полный код модуля в студию!
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #6  
Старый 19.05.2009, 14:53
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Странно как-то просто

Последний раз редактировалось Alxd, 19.05.2009 в 22:34.
Ответить с цитированием
  #7  
Старый 19.05.2009, 22:04
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Убрал все, что только можно - все равно не работает.
Помогите!!! А то уже разрыв мозга случился

Р.S.
Проектик прилагается
Вложения
Тип файла: zip RBD.zip (39.7 Кбайт, 2 просмотров)
Ответить с цитированием
  #8  
Старый 19.05.2009, 22:35
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Вроде нормально сохранил, поправил:
Код:
 EditPath1C.Text := OpenDialog1.FileName;
и
Код:
AssignFile(SFile, 'C:\Settings.dat');
лучше указывть полный путь к файлу
Ответить с цитированием
  #9  
Старый 19.05.2009, 22:41
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Спасибо!!! Заработало!

А почему с неполным путем к файлу не работает. Есть этому объяснение?
Ответить с цитированием
  #10  
Старый 19.05.2009, 22:47
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Незнаю, я просто один раз так налетел и ini-файлами, теперь всегда пишу полный путь... Кстати для AssignFile полный путь вроде можно и не указывать
Ответить с цитированием
  #11  
Старый 19.05.2009, 22:53
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Ясненько. Спасибо тебе!
Ответить с цитированием
  #12  
Старый 20.05.2009, 04:32
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
А почему с неполным путем к файлу не работает. Есть этому объяснение?
Потому, что если не указан путь к файлу, то приложение работает в "текущем рабочем каталоге". Получить/установить его можно API функциями GetCurrentDirectory и SetCurrentDirectory. А разные там Save/Open диалоги значение текущего каталога меняют непредсказуемо.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #13  
Старый 20.05.2009, 07:23
Аватар для Alxd
Alxd Alxd вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 23
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Потому, что если не указан путь к файлу, то приложение работает в "текущем рабочем каталоге". Получить/установить его можно API функциями GetCurrentDirectory и SetCurrentDirectory. А разные там Save/Open диалоги значение текущего каталога меняют непредсказуемо.

Спасибо за разъяснение! Теперь все стало понятно
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter