Ох уж эти юзеры

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Ох уж эти юзеры

Сообщение SSecurity » 26.03.2009 (Чт) 23:59

... недалече как два дня назад выпустил релиз программы (заказчик попросил внести маленькие изменения), а ввиду того что программа работает в связке с Access'ом и копий развилось громадное количество, внедрил в программу код который проверяет наличие нужных полей и если нет - добавляет:)

пишу письмо:
...
Во вложении версия 1.1 (добавлена "Оплата")
Для совместимости с прежними БД требуется модификация БД.
В программу внесена проверка на наличие дополнительных полей, и если их нет - они добавляются.
Вообщем если программа запустилась и не ругается вероятнее всего её удалось добавить нужные значения.
...


В итоге - её просто побоялись стартовать ... пришлось подробно расписывать пользу процесса. Потерялся день.
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Ох уж эти юзеры

Сообщение jangle » 27.03.2009 (Пт) 12:42

Ох уж эти пограммисты, которые пишут такие тексты, которые способны запугать и запутать любого пользователя. ))

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Ох уж эти юзеры

Сообщение SSecurity » 27.03.2009 (Пт) 12:55

jangle писал(а):Ох уж эти пограммисты, которые пишут такие тексты, которые способны запугать и запутать любого пользователя. ))

ЛУчше вообще ничего не писать :))) меньше знают лучше спят :)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Ох уж эти юзеры

Сообщение alibek » 27.03.2009 (Пт) 13:04

Хорошим правилом является добавление в БД служебной таблицы, в одном из полей которой указывается версия БД (структуры БД).
А при запуске следует проверять версию структуры БД и, при необходимости, выполнять соответствующий SQL-скрипт на обновление структуры.
Тогда не будет повода пугать пользователей.

У меня, например, используется что-то типа этого:
Код: Выделить всё
IF NOT EXISTS (SELECT * FROM [sysobjects] WITH(NOLOCK) WHERE [type] = 'U')
  GOTO CreateDatabase

IF NOT EXISTS (SELECT * FROM [sysobjects] WITH(NOLOCK) WHERE [type] = 'U' AND [name] = 'options')
  GOTO CreateDatabase

DECLARE @DBVersion nvarchar(80)
SELECT @DBVersion = CAST([value] AS nvarchar)
FROM [options] WITH(NOLOCK) WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_version'

IF @DBVersion = '01.04.0004'
  GOTO Ver01040004
ELSE IF @DBVersion = '01.03.0003'
  GOTO Ver01030003
ELSE IF @DBVersion = '01.02.0002'
  GOTO Ver01020002
ELSE IF @DBVersion = '01.01.0001'
  GOTO Ver01000001
ELSE IF @DBVersion = '1.0.0'
  GOTO Ver01000000
ELSE
  GOTO VerUnknown

VerUnknown:
PRINT 'Unknown version!'
PRINT 'Update database manually.'
GOTO FinishProcessing

Ver01040004:
PRINT 'Current version: 01.04.0004 (date 2009-01-29)'
PRINT 'Update process finished.'
GOTO FinishProcessing

Ver01030003:
PRINT 'Current version: 01.03.0003 (date 2008-07-11); Update to: 01.04.0004'
...
UPDATE [options] SET [value] = '20090129'   WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_date'
UPDATE [options] SET [value] = '01.04.0004' WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_version'
GOTO Ver01040004

Ver01020002:
PRINT 'Current version: 01.02.0002 (date 2008-07-08); Update to: 01.03.0003'
...
UPDATE [options] SET [value] = '20080711'   WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_date'
UPDATE [options] SET [value] = '01.03.0003' WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_version'
GOTO Ver01030003

Ver01000001:
PRINT 'Current version: 01.01.0001 (date 2008-07-08); Update to: 01.02.0002'
...
UPDATE [options] SET [value] = '20080711'   WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_date'
UPDATE [options] SET [value] = '01.02.0002' WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_version'
GOTO Ver01020002


Ver01000000:
PRINT 'Current version: 1.0.0 (date 2007-02-21); Update to: 01.01.0001'
...
UPDATE [options] SET [value] = '20080708'   WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_date'
UPDATE [options] SET [value] = '01.01.0001' WHERE [user_id] IS NULL AND [section] = 'system' AND [name] = 'db_version'
GOTO Ver01000001



CreateDatabase:
...


FinishProcessing:
...
Lasciate ogni speranza, voi ch'entrate.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Ох уж эти юзеры

Сообщение SSecurity » 27.03.2009 (Пт) 13:19

Хороший пример, только в данном случае получается немного иначе.

БД уже используется и экземпляров немерено, соответсвенно процент наполняемости различный да и версии могут отличаться (от единой они отказались ... видимо позже к этом прийдут), в любом случае впихнуть в БД скрипт обновления прийдется из программы :) а уже сама программа своими средствами контролирует правильность структуры.

По идеи как-то так:)))
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList