|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Знания, опыт на шару
Уважаемые,
имеется программа , работающая с БД 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; Есть ли более гуманный способ? (Использование одного параметра в запросе выдавало некорректный ответ, пришлось использовать свой параметр для каждого поля) Что Вы посоветуете мне в моей ситуации? Рассмотрю любые предложения. |
#2
|
||||
|
||||
Оффтоп:
Для начала смените свою подпись, не позорьте коллектив - ссыль уберите, нарушение ПФ пункт 2.6 А идея с управляющим временным файлом в корне, это отличная лазейка для всяких разных вредоносных "полезняшек" однако... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
На создание файлов в данной директории имеют права только 3 человека, поэтому не могу сказать, что это будет проблема.
|
#4
|
||||
|
||||
Тогда это в корне меняет ситуацию - а как происходит "неккоректное завершение программы" у клиента, может здесь корень? Хотя бы в общих чертах, пжлст
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
Не могу сказать потому как отследить нет возможности. Процесс остается висеть и мешает всему процессу обновления.
|
#6
|
||||
|
||||
Ведь вроде если получится правильно убивать приложения пользователей,первая проблема исчезнет, правильно? Я так понимаю логику - прога у пользователя следит за корнем СД, и если там есть маячок "upd" то она себя грохает. Проблем быть не должно в этом месте, странно
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
|||
|
|||
А вот почему-то все происходит именно так как мы не ждем. Чуть позже выложу код завершения программы, быть может там что не так.
|
#8
|
|||
|
|||
Возможно проблема нашлась. Было дело переделывал некоторые моменты программы, заменив компонент ADOconnection на создаваемый динамически, и видимо в спешке забыл отключать соединение с бд при завершении. Завтра проверю.
Невнимательность всегда меня наказывала. |
#9
|
|||
|
|||
По первому вопросу, можно просто сделать запускач, который копирует файл с сетевого диска на локальный и запускает уже локальную копию. Далее уже сама программа следит за файлом-флагом (например, можно туда класть версию или вообще ее читать с оригинального файла) и если файл на шаре новее, то выдавать сообщение, что надо перезапустить программу.
По второму вопросу. Ну сконкатенируй все поля в одну строку и уже на нее "натрви" LIKE: Код:
SELECT * FROM [%TABLENAME%] WHERE [FIELD1] || [FIELD2] || ... || [FIELDN] LIKE :param1 [code] [FIELD1] || '~' || [FIELD2] || '~' || ... || '~' || [FIELDN] [code] |
#10
|
|||
|
|||
Цитата:
Проверил - ниочем. Заметил, что файл *.ldb не удаляется после закрытия сессии у всех пользователей. Могу предположить, что это связано с недавним крахом БД. Как решить проблему (удалить файл *.ldb)? lmikle, , при использовании || в запросе, ругается, что нельзя использовать эти символы. Запрос след. вида: Код:
SELECT * FROM [%TABLENAME%] WHERE UCASE([FIELD1]) || UCASE([FIELD2]) || ... || UCASE([FIELDN]) LIKE :param1 И подскажите, чем отличается Код:
TAdoQuery.MoveBy(Value) Код:
TAdoQuery.BlockReadNext |
#11
|
|||
|
|||
Цитата:
Ой, забыл, что Access. Там, вроде, + надо использовать для сложения строк... посмотри доку. Главное, смысл понятен. |
#12
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#13
|
|||
|
|||
Цитата:
Проблему можно решить подключившись к другой БД (можно просто переименовать старую) |