powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема помогите!
25 сообщений из 33, страница 1 из 2
Проблема помогите!
    #33151928
Денг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня такая проблема:
есть таблица Склад(номер_склада,название),как мне сделать, чтобы при добавлении в склад
нового названия, ему автоматически присваивался следующий номер склада.Например:
у нас имеются записи в таблице (номер_склада:1,2,3 название:Склад1,Склад2,Склад3)вот и мне надо,
чтобы,когда я добавляю склад4 ему присваивался номер_склада=4 и.т.д как это сделать?????
...
Рейтинг: 0 / 0
Проблема помогите!
    #33152059
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДенгУ меня такая проблема:
есть таблица Склад(номер_склада,название),как мне сделать, чтобы при добавлении в склад
нового названия, ему автоматически присваивался следующий номер склада.Например:
у нас имеются записи в таблице (номер_склада:1,2,3 название:Склад1,Склад2,Склад3)вот и мне надо,
чтобы,когда я добавляю склад4 ему присваивался номер_склада=4 и.т.д как это сделать?????
Hi, Денг!
Один из выходов из ситуации.
В базе иметь таблицу с установками/настройками, в которой иметь поле с последним номером склада (Например: Setting.N_sklad).
Следовательно следующий номер склада:
New_n_sklad = 'Склад'+LTRIM(STR(Setting.N_sklad+1))
Только незабыть в таблице Setting увеличить номер склада для дальней работы.
...
Рейтинг: 0 / 0
Проблема помогите!
    #33152140
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для таких вещеё неплохо подходит идеология NewID - присвоение первичного ключа.
...
Рейтинг: 0 / 0
Проблема помогите!
    #33152555
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Calcukate Max(номер_склада) To max_nomer
new_nomer = max_nomer + 1
...
Рейтинг: 0 / 0
Проблема помогите!
    #33152558
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Calcukate - конечно же - CALCULATE
...
Рейтинг: 0 / 0
Проблема помогите!
    #33152676
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Crispy
а если между
Calcukate Max(номер_склада) To max_nomer
new_nomer = max_nomer + 1

и insert ....

кто-то или что-то вклиниться??

типа к королю англии пришел мужик с лопатой и говорит:
- мы с братом прокопаем тунель под ломаншем. Я начну сдесь, а он во франции. Встретимся посередине.
- а если не встретитесь
- ну тогда у Вас будет два тонеля под ломаншем
...
Рейтинг: 0 / 0
Проблема помогите!
    #33153265
Grin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше перейти на VFP8 или VFP9 там есть поле автоинкреминент
...
Рейтинг: 0 / 0
Проблема помогите!
    #33153409
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если буквально по вопросу, то ...

Insert into Склад (номер_склада,название) values (INT(RIGHT(M.название,1)),M.название)
...
Рейтинг: 0 / 0
Проблема помогите!
    #33153452
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaestroEvНу если буквально по вопросу, то ...

Insert into Склад (номер_склада,название) values (INT(RIGHT(M.название,1)),M.название)
Где RTRIM?
...
Рейтинг: 0 / 0
Проблема помогите!
    #33153454
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще здесь есть кнопка поиск.
Поиск надо вести по слову NEWID.

Ну, или автоинкремент.
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154179
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, leaf !
leaf а если между
Calcukate Max(номер_склада) To max_nomer
new_nomer = max_nomer + 1

и insert ....

кто-то или что-то вклиниться??

Ага! Сидят у них там 40 пользователей - и все новые склады создают... - чип-и-дейлы, какие-то, что ли
ИМХО этим всегда занимается кто-то один - тот, кто достаточно упал-намоченный
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154205
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrispyHi, leaf !
leaf а если между
Calcukate Max(номер_склада) To max_nomer
new_nomer = max_nomer + 1

и insert ....

кто-то или что-то вклиниться??

Ага! Сидят у них там 40 пользователей - и все новые склады создают... - чип-и-дейлы, какие-то, что ли
ИМХО этим всегда занимается кто-то один - тот, кто достаточно упал-намоченный

не надо утрировать задачу, просто leaf показал порочность такого метода, на самом деле , скажем при автонумерации документов можно запросто получить дубликаты номеров.
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154286
WORKSNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно использовать calculate max() без последствий типа дублирования уникального номера, я поступаю так:

DO WHILE .t.
WAIT WINDOW NOWAIT [Ïîïûòêà äîáàâëåíèÿ çàïèñè....]
ResultCreate=FCREATE('append')
IF ResultCreate>0
EXIT
ENDIF
ENDDO
WAIT CLEAR
CALCULATE MAX(IdRec) TO MaxIdRec
INSERT INTO Test (IdRec,...) VALUES (MaxIdRec+1,...)
=FCLOSE(ResultCreate)
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154302
WORKSNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, вклеивал просмотрел, что получились крокозяблы :-), в строке с WAIT WINDOW NOWAIT
'Попытка добавления записи'
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154476
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, PaulWist !

Метод не может быть порочен или непорочен... Просто к каждой задаче нужно подходить индивидуально. Бывают и локальные версии. Бывают и жесткие ограничения на доступ к информации, когда только один человек имеет право ее править. Нельзя же каждый раз пытаться создавать решение "на века", "на все случаи жизни". Все равно все учесть невозможно. А иногда, как мне кажется, например, в данном случае, можно попытаться сделать все попроще. Хотя, полностью согласен, что в других случаях - такая простота может оказаться и совершенно неуместна. Поэтому наверно и не бывает универсальных решений.
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154526
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrispyHi, PaulWist !

Метод не может быть порочен или непорочен... Просто к каждой задаче нужно подходить индивидуально. Бывают и локальные версии. Бывают и жесткие ограничения на доступ к информации, когда только один человек имеет право ее править. Нельзя же каждый раз пытаться создавать решение "на века", "на все случаи жизни". Все равно все учесть невозможно. А иногда, как мне кажется, например, в данном случае, можно попытаться сделать все попроще. Хотя, полностью согласен, что в других случаях - такая простота может оказаться и совершенно неуместна. Поэтому наверно и не бывает универсальных решений.

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

PS если мои слова вызвали у Вас чувство обиды, тогда прошу прощения.
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154671
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2WORKSNS
оригинально. тоже способ .... это в смысле идеи
а сам цикл где файл создается... короче я бы над ним поработал по крайней мере на первый взляд
я бы всё таки на вашем месте выбрал блокировочку строки в таблице только не таблицы а строки в ней причем табличка не эта а соседняя
и сама функция calculate вряд ли здесь умесна имхо
так как файл имеет идекс по ключевому полю,что для таблиц логично ожидать, то ...
правильно юзаем :
go top или go bottom по ситуации и подбираем искомый максимум
Но опять же кто как любит работать

"Изящным движение руки брюки превращаются в шорты"
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154693
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Crispy
извените ради бога...
но вы зря обижаетесь здесь у вас врагов нет. Слишком уж всё виртуально.
А в споре рождается истина
Код ваш скопировал потому что писать лень, а не потому что поддеть хотел
...
Рейтинг: 0 / 0
Проблема помогите!
    #33154720
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2PaulWist :

Да нет, думаю, все было вполне корректно. :)
Единственное, что я пытался сказать - всего лишь - о сущностях Окамы :)
В остальном же полностью согласен. Кстати, собственные программы Леса Пинтера, которые мне довелось однажды посмотреть в одной из его книг, честно говоря, произвели на меня впечатление... - своей убогостью мысли :). Хотя, конечно же, это только мое личное мнение - на данный момент.

2leaf :

OK!
...
Рейтинг: 0 / 0
Проблема помогите!
    #33155659
WORKSNS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Leaf
Не спорю, кому что нравится, какая ситуация и так далее :-), я просто подкинул идею как приостановить других пока один толкает данные в таблицу, но меня такой способ не подводил. Если насчет скорости, то мне не приходилось работать с очень большими справочниками :-). И у Calculate есть все же небольшой плюс - он не зависит от корректности индекса и наличия оного.
...
Рейтинг: 0 / 0
Проблема помогите!
    #33155839
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi WORKSNS!

Способ (с блокировкой) также не работает при использовании буферизации и/или представлений (писать же программу, даже НЕ сетевую, без использования этих механизмов - это конечно порочная практика, даже во времена FPD делали "эмуляцию" этих полезнейших вещей через SCATTER/GATHER или временные таблицы/курсоры). Теоретически можно "перенести" формирование кода на момент физической записи (написав не в пример более сложный код в точке сохранения конечно), однако практически всегда легче использовать подход NewID.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Проблема помогите!
    #33157065
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, Igor Korolyov !
Igor Korolyov /topic/145680&hl=newid- я вообще не пользуюсь AUTOINC по
ряду причин, и ничего :)
А интересно, что - вместо?
...
Рейтинг: 0 / 0
Проблема помогите!
    #33157424
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык, Игорь вроде написал ;-)
Igor Korolyov...однако практически всегда легче использовать подход NewID.Я прав, Игорь?
...
Рейтинг: 0 / 0
Проблема помогите!
    #33157433
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или у вас уже сплошь КС со своими сиквенсами?
...
Рейтинг: 0 / 0
Проблема помогите!
    #33157720
lo-pata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно просто поставить в поле праймери индекса табдицы default=reccount() и после аппенда делать replace sklad with 'склад'+alltr(str(id)). Тогда точно не будет совпадающих номеров складов Но тут уж такой прикол получится: если есть 3 склада и удалишь второй, то потом склад2 уже не создашь - только склад4.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема помогите!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]