Показать сообщение отдельно
  #1  
Старый 17.02.2014, 23:46
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию Знания, опыт на шару

Уважаемые,

имеется программа , работающая с БД MS Access 2003. Все дело лежит на сетевом диске, откуда пользователи собственно и "кушают".

Для того, чтобы обновить программу приходилось убивать процессы у всех пользователей от админа на уровне домена (чьими правами обладает лишь ведущий сис.адм.), и ручками заменять файлы на сетевом диске.

Далее реализовал следующее: Если в корне папки с программой создавался файл "upd", то программа закрывалась, а следом запускала рядом лежащий updater.exe (тупоформа с постоянно крутящемся прогрессбаром), который не давал пользователям запустить основную программу, пока существует сие файл "upd".

Однако не всегда такая реализация срабатывает, скорее всего от неккоректного завершения программы. Что создавало проблему - при замены файлов ручками выдавало сообщение "Невозможно скопировать..используется другим пользователем".

Второй момент скорей относится к разумному использованию SQL. В одной из функций программы требуется выдать записи, в которых хотя бы одно значение из полей содержит в себе подстроку S.

Делаю так:

Код:
q := TAdoQuery.Create(nil);
...
SQL.Text :='SELECT * FROM [%TABLENAME%] WHERE [FIELD1] LIKE :param1 ... ... [FIELD N] LIKE :paramN';
q.parameters.parambyname('param1').value := S;
..
q.parameters.parambyname('paramN').value := S;

Есть ли более гуманный способ? (Использование одного параметра в запросе выдавало некорректный ответ, пришлось использовать свой параметр для каждого поля)

Что Вы посоветуете мне в моей ситуации? Рассмотрю любые предложения.
Ответить с цитированием