Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Есть база на MSSQL 2005, есть 3 оператора, которые в эту базу могут одновременно добавлять записи.
Вид:
идентификатор (napr_id),номер (number) дата(date), цель(purpose), Сумма(insbal), код оператора(kod_o), дата изменения(date_ch), Исключения(iskl)


Как сделать так, чтобы номера добавлялись под разными номерами (по порядку)?
Сейчас делаю вот так:
IF 0 > sql_exec('Select (max(number)+1)as number from napr where YEAR(date)=YEAR(getdate()) ','pnum')  &&осн.запрос
					=messagebox ("Во время выполнения SQL запроса произошла ошибка!", 0 + 16 + 0, _SCREEN.CAPTION)		
					RETURN 
				else
					.numbern.caption=alltrim(str(pnum))
				endif
	
				
				IF 0 > sql_exec('{call mn_getnapr;4(?pnum,?ppol,?plpu,?pdate_hosp,?ppur,?pdoctor,?pkod_o,?insbal,?iskl)}','pins')  &&осн.запрос			
					=messagebox("Во время выполнения SQL запроса произошла ошибка!", 0 + 16 + 0, _SCREEN.CAPTION)	
					RETURN 
				else
					=messagebox("Добавление данных выполнено успешно.", 0 + 64 + 0, _SCREEN.CAPTION)	
					.RELEASE	
				ENDIF	
7 фев 11, 08:55    [10194525]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
В самой ХП считать макс.номер и обернуть все в транзакцию не?

Чаще всего в системах учета организуют так.наз.счетчики (диапазоны номеров)
через ссылку на доп.табличку-хранилище счетчиков(диапазонов).

пыс пыс: см.на стиль письма - ух жешь и жесть.
0 > - это шоб враг не догадался?
функция в ограничении - зло - это битвин должен быть.
приват перм-е - зло,
руками данные ворочать - зло - см. на курсорадаптер.
7 фев 11, 10:07    [10194865]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
прошелмимо
В самой ХП считать макс.номер и обернуть все в транзакцию не?

Чаще всего в системах учета организуют так.наз.счетчики (диапазоны номеров)
через ссылку на доп.табличку-хранилище счетчиков(диапазонов).

пыс пыс: см.на стиль письма - ух жешь и жесть.
0 > - это шоб враг не догадался?
функция в ограничении - зло - это битвин должен быть.
приват перм-е - зло,
руками данные ворочать - зло - см. на курсорадаптер.


По поводу "считать макс номер в ХП" была мысля. А как в транзакцию обернуть?

Про стиль письма....Я пока использую то что тут было до меня и менять это нет времени.
7 фев 11, 10:36    [10195008]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
НадеждаМ
По поводу "считать макс номер в ХП" была мысля. А как в транзакцию обернуть?


читать тама

там-же читать про организацию счетчиков в доп.табличке

НадеждаМ
Про стиль письма....Я пока использую то что тут было до меня и менять это нет времени.



ну не знаю.

лучше день потерять - затем за 5 мин долететь. (С)
7 фев 11, 10:42    [10195035]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
прошелмимо,

Мне еще нужно перед добавлением записи в базу выводить номер следующего направления на форму, и соответственно у разных операторов они должны быть разные.
7 фев 11, 10:53    [10195132]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
НадеждаМ
прошелмимо,

Мне еще нужно перед добавлением записи в базу выводить номер следующего направления на форму, и соответственно у разных операторов они должны быть разные.


делают наоборот.

как-то так:
при наборе(подготовке доекумента, или до опред.статуса док-та) номер не присваивают,
а присваивают в момент сохранения и
отображают сообщение об успешном сохранении документа
и "светят" присвоенный ему номер.
7 фев 11, 11:13    [10195266]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236

> Автор: прошелмимо
> делают наоборот.


Ну, почему-бы и не высветить "предполагаемый" следующий номер _до_ сохранения документа если диапазон этих номеров
жестко закреплён за оператором, и никто другой не может их использовать. Ты же сам аккуратно подводишь Надежду к этой
мысли :)

Posted via ActualForum NNTP Server 1.4

7 фев 11, 11:22    [10195320]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
Игорь Горбонос
> Автор: прошелмимо
> делают наоборот.


Ну, почему-бы и не высветить "предполагаемый" следующий номер _до_ сохранения документа если диапазон этих номеров
жестко закреплён за оператором, и никто другой не может их использовать. Ты же сам аккуратно подводишь Надежду к этой
мысли :)




так, просто интересно:

занафега нужен "предполагаемый" номер в момент набивки несуществующего
(несохраненного) в БД документа?
7 фев 11, 11:47    [10195558]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236

> Автор: прошелмимо
> занафега нужен "предполагаемый" номер в момент набивки несуществующего
> (несохраненного) в БД документа?


Видимо нам, гусарам, не понять
Но мои пользователи тоже хотят видеть номер. А т.к. мне номеров не жалко, я и показываю :)

Posted via ActualForum NNTP Server 1.4

7 фев 11, 11:58    [10195652]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
Игорь Горбонос
> Автор: прошелмимо
> занафега нужен "предполагаемый" номер в момент набивки несуществующего
> (несохраненного) в БД документа?


Видимо нам, гусарам, не понять
Но мои пользователи тоже хотят видеть номер. А т.к. мне номеров не жалко, я и показываю :)



если делать не так как нужно, а так как не жалко - можно убиться.

достаточно присвоения нового номера в момент сохранения
и тупо на пальцах объяснения логичности такового
тем кому нужно
7 фев 11, 12:04    [10195703]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
прошелмимо
делают наоборот.

как-то так:
при наборе(подготовке документа, или до опред.статуса док-та) номер не присваивают,
а присваивают в момент сохранения и
отображают сообщение об успешном сохранении документа
и "светят" присвоенный ему номер.


В принципе я так и предполагала сделать, но диспетчера развизжались, а спорить с ними не хотелось. Придется принуждать...

[quot прошелмимо]
Игорь Горбонос
> Автор: прошелмимо
> делают наоборот.


Ну, почему-бы и не высветить "предполагаемый" следующий номер _до_ сохранения документа если диапазон этих номеров
жестко закреплён за оператором, и никто другой не может их использовать. Ты же сам аккуратно подводишь Надежду к этой
мысли :)



Диапазон номеров не закреплен за операторами, так как они работают с клиентами и вводят не подряд. Приходит клиент, подходит к свободному оператору, тот вводит вводит и печатает новый документ.

прошелмимо

так, просто интересно:

занафега нужен "предполагаемый" номер в момент набивки несуществующего
(несохраненного) в БД документа?
Номер нужен для того чтобы они по журналу сверялись
7 фев 11, 12:24    [10195895]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
прошелмимо
Игорь Горбонос
> Автор: прошелмимо
> занафега нужен "предполагаемый" номер в момент набивки несуществующего
> (несохраненного) в БД документа?


Видимо нам, гусарам, не понять
Но мои пользователи тоже хотят видеть номер. А т.к. мне номеров не жалко, я и показываю :)



если делать не так как нужно, а так как не жалко - можно убиться.

достаточно присвоения нового номера в момент сохранения
и тупо на пальцах объяснения логичности такового
тем кому нужно

Присоединяюсь к [прошелмимо]!
Оставляя номер пустым, вы позволите серверу на основе дополнительной таблицы (с ее блокировкой перед выборкой сл. номер для предотвращения номеров-двойников) получить следующий номер документа. Введя свой номер, вы отменяете "автоприсвоение" номера. Какой номер получиться вы не знаете и поэтому показать его сможете только "ПОСЛЕ" выполнения процедуры на сервере.
С уважением, Алексей
P.S. Получения нового номера у меня оформлено в виде отдельной процедуры, которая может иметь возможность выделения номера с учетом дополнительных признаков документа (подразделение, типа документа, года документа и т.п.)
7 фев 11, 12:30    [10195933]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236

Надежда, а с каким журналом должны сверятся операторы? И как номера из журналов разделяются между операторами?


> Автор: Aleksey-K
> Автор: прошелмимо


Вы говорите правильно, но у каждого своя специфика. У меня номер - это как имя. Введено и используется только для
идентификации заявки, среди других. Причем эти номера, как и имена могут быть неуникальны. Так удобно пользователям.
Поэтому я и показываю номер _до_ того как он попал в базу. К тому-же этот номер меняется в процессе обработки заявки и
становится другим(тоже не уникальным).


Posted via ActualForum NNTP Server 1.4

7 фев 11, 12:53    [10196098]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Игорь Горбонос,

У них есть журнал (один на всех 3-х), в который они записывают данные вводимые в базу (так на всякий случай). И если что...номера не совпадают, у них и у меня в базе, или что-то еще, то сразу звонят мне.
7 фев 11, 13:27    [10196361]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Номера никак не разделяются.
7 фев 11, 13:27    [10196365]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Игорь Горбонос
Надежда, а с каким журналом должны сверятся операторы? И как номера из журналов разделяются между операторами?


> Автор: Aleksey-K
> Автор: прошелмимо


Вы говорите правильно, но у каждого своя специфика. У меня номер - это как имя. Введено и используется только для
идентификации заявки, среди других. Причем эти номера, как и имена могут быть неуникальны. Так удобно пользователям.
Поэтому я и показываю номер _до_ того как он попал в базу. К тому-же этот номер меняется в процессе обработки заявки и
становится другим(тоже не уникальным).




У меня номер тоже как своего рода идентификатор записи, среди других. Он может быть не уникальным, но только в том случае, когда год записи, уже имеющей такой номер не совпадает с текущим годом.
7 фев 11, 14:10    [10196655]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236

> Автор: НадеждаМ
> Номера никак не разделяются.


Какие-то требования к нумерации есть? Номера разных операторов могут быть одинаковы?

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

Posted via ActualForum NNTP Server 1.4

7 фев 11, 14:15    [10196686]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
НадеждаМ
Игорь Горбонос,

У них есть журнал (один на всех 3-х), в который они записывают данные вводимые в базу (так на всякий случай). И если что...номера не совпадают, у них и у меня в базе, или что-то еще, то сразу звонят мне.


выбросьте занафег Ваш журнал плиз.

читать на тему:
"организация диапазонов номеров в еирпи системах" и т.д.

иначе, - сверять с журналом после сохранения.
реализуйте сохранение документа по алгоритму:
1. запустить транзакцию на сервере
2. присвоить номер
3. сохранить документ
4. если все ок - коммит
5. иначе - все откатить

все, - велосипеды придуманы
7 фев 11, 14:18    [10196703]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
прошелмимо,

Ну журнал не мне выбрасывать, мне он и так нафиг не нужен :)
7 фев 11, 14:21    [10196715]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
1. Насколько вероятна ситуация, что оператор создаст документ, некоторое время будет его редактировать, а потом удалит (или не сохранит) только что созданный документ?

2. Если оператор создал документ, но в процессе заполнения понял, что ошибся и удалил документ. Но пока он думал, другой оператор создал еще один документ. Т.е. имеем "дыру" в нумерации.

Следует ли номер документа, удаленный первым пользователем снова присвоить новому документу? Есть ли необходимость контролировать непрерывность нумерации?

3. Насколько я вижу, у Вас есть как идентификатор (napr_id), так и номер (number). Почему бы при создании нового документа не присваивать номеру значение идентификатора?

PS: формирование номера по принципу MAX()+1 - крайне порочная практика для многопользовательских приложений. По возможности, такой способ формирования номера следует избегать. Что, собственно, все и советуют, предлагая другие варианты решений.
7 фев 11, 14:24    [10196732]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
Игорь Горбонос
но у каждого своя специфика.


Игорь Горбонос
Так удобно пользователям.


гы...

пользователю вполне нормально и удобно увидеть создавшийся в системе документ
с присвоенным ему номером самой системой

новый номер и дает понять пользователю то, что в систему "упал" новый документ.
7 фев 11, 14:27    [10196749]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
Игорь Горбонос
Member

Откуда: Днепропетровск
Сообщений: 4236

> Автор: прошелмимо


Признаю, в моем случае можно и не показывать сразу этот номер, а показывать только после создания документа.

:)

Posted via ActualForum NNTP Server 1.4

7 фев 11, 14:39    [10196837]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
ВладимирМ
1. Насколько вероятна ситуация, что оператор создаст документ, некоторое время будет его редактировать, а потом удалит (или не сохранит) только что созданный документ?

2. Если оператор создал документ, но в процессе заполнения понял, что ошибся и удалил документ. Но пока он думал, другой оператор создал еще один документ. Т.е. имеем "дыру" в нумерации.

Следует ли номер документа, удаленный первым пользователем снова присвоить новому документу? Есть ли необходимость контролировать непрерывность нумерации?

3. Насколько я вижу, у Вас есть как идентификатор (napr_id), так и номер (number). Почему бы при создании нового документа не присваивать номеру значение идентификатора?

PS: формирование номера по принципу MAX()+1 - крайне порочная практика для многопользовательских приложений. По возможности, такой способ формирования номера следует избегать. Что, собственно, все и советуют, предлагая другие варианты решений.


пофлудю немнога

и здесь мы приходим к выработке некот.понятий ( аналит. признак документа, сторнирование документа ...),
которые позволяют не бояться наличия "удаленных" документов и т.д. ...

чета тама с журналами перемудрили.
может вначале поговорим о норм-ке, бух. политике и т.д.?

че там такое критичное, что пользователи боятся каких-то "дырок"?

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

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

гы, кстати описав выше алгоритм,
я от дублей Вас спас,
а вот от "дырок" от удаленных документов - нет
7 фев 11, 14:39    [10196840]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
Игорь Горбонос
> Автор: прошелмимо


Признаю, в моем случае можно и не показывать сразу этот номер, а показывать только после создания документа.

:)



окей, значит не стоит идти на поводу у пользователей.

вот, - я всегда делаю так как мне нужно

даже аналитиков и прочих стратегов заставляю писать тз апосля процесса разработки.
7 фев 11, 14:41    [10196849]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь при добавлении данных в базу  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
ВладимирМ
1. Насколько вероятна ситуация, что оператор создаст документ, некоторое время будет его редактировать, а потом удалит (или не сохранит) только что созданный документ?

2. Если оператор создал документ, но в процессе заполнения понял, что ошибся и удалил документ. Но пока он думал, другой оператор создал еще один документ. Т.е. имеем "дыру" в нумерации.

Следует ли номер документа, удаленный первым пользователем снова присвоить новому документу? Есть ли необходимость контролировать непрерывность нумерации?

3. Насколько я вижу, у Вас есть как идентификатор (napr_id), так и номер (number). Почему бы при создании нового документа не присваивать номеру значение идентификатора?

PS: формирование номера по принципу MAX()+1 - крайне порочная практика для многопользовательских приложений. По возможности, такой способ формирования номера следует избегать. Что, собственно, все и советуют, предлагая другие варианты решений.


1 - вероятность есть, но это случается редко.
2 - непрерывность необходима
3 - с каждым новым годом номер документа должен начинаться с 1, потому значение napr_id не присваиваем значению number
7 фев 11, 15:24    [10197197]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить