|
|
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
У меня такая проблема: есть таблица Склад(номер_склада,название),как мне сделать, чтобы при добавлении в склад нового названия, ему автоматически присваивался следующий номер склада.Например: у нас имеются записи в таблице (номер_склада:1,2,3 название:Склад1,Склад2,Склад3)вот и мне надо, чтобы,когда я добавляю склад4 ему присваивался номер_склада=4 и.т.д как это сделать????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 12:31:59 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
ДенгУ меня такая проблема: есть таблица Склад(номер_склада,название),как мне сделать, чтобы при добавлении в склад нового названия, ему автоматически присваивался следующий номер склада.Например: у нас имеются записи в таблице (номер_склада:1,2,3 название:Склад1,Склад2,Склад3)вот и мне надо, чтобы,когда я добавляю склад4 ему присваивался номер_склада=4 и.т.д как это сделать????? Hi, Денг! Один из выходов из ситуации. В базе иметь таблицу с установками/настройками, в которой иметь поле с последним номером склада (Например: Setting.N_sklad). Следовательно следующий номер склада: New_n_sklad = 'Склад'+LTRIM(STR(Setting.N_sklad+1)) Только незабыть в таблице Setting увеличить номер склада для дальней работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 13:06:10 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Для таких вещеё неплохо подходит идеология NewID - присвоение первичного ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 13:35:54 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Calcukate Max(номер_склада) To max_nomer new_nomer = max_nomer + 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 15:54:37 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Calcukate - конечно же - CALCULATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 15:55:50 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2Crispy а если между Calcukate Max(номер_склада) To max_nomer new_nomer = max_nomer + 1 и insert .... кто-то или что-то вклиниться?? типа к королю англии пришел мужик с лопатой и говорит: - мы с братом прокопаем тунель под ломаншем. Я начну сдесь, а он во франции. Встретимся посередине. - а если не встретитесь - ну тогда у Вас будет два тонеля под ломаншем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 16:23:24 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
А еще лучше перейти на VFP8 или VFP9 там есть поле автоинкреминент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 20:59:22 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Ну если буквально по вопросу, то ... Insert into Склад (номер_склада,название) values (INT(RIGHT(M.название,1)),M.название) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 04:21:15 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
MaestroEvНу если буквально по вопросу, то ... Insert into Склад (номер_склада,название) values (INT(RIGHT(M.название,1)),M.название) Где RTRIM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 07:41:06 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
А еще здесь есть кнопка поиск. Поиск надо вести по слову NEWID. Ну, или автоинкремент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 07:42:22 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Hi, leaf ! leaf а если между Calcukate Max(номер_склада) To max_nomer new_nomer = max_nomer + 1 и insert .... кто-то или что-то вклиниться?? Ага! Сидят у них там 40 пользователей - и все новые склады создают... - чип-и-дейлы, какие-то, что ли ИМХО этим всегда занимается кто-то один - тот, кто достаточно упал-намоченный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 12:16:43 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
CrispyHi, leaf ! leaf а если между Calcukate Max(номер_склада) To max_nomer new_nomer = max_nomer + 1 и insert .... кто-то или что-то вклиниться?? Ага! Сидят у них там 40 пользователей - и все новые склады создают... - чип-и-дейлы, какие-то, что ли ИМХО этим всегда занимается кто-то один - тот, кто достаточно упал-намоченный не надо утрировать задачу, просто leaf показал порочность такого метода, на самом деле , скажем при автонумерации документов можно запросто получить дубликаты номеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 12:23:14 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
можно использовать 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 12:42:04 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Сорри, вклеивал просмотрел, что получились крокозяблы :-), в строке с WAIT WINDOW NOWAIT 'Попытка добавления записи' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 12:45:14 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Hi, PaulWist ! Метод не может быть порочен или непорочен... Просто к каждой задаче нужно подходить индивидуально. Бывают и локальные версии. Бывают и жесткие ограничения на доступ к информации, когда только один человек имеет право ее править. Нельзя же каждый раз пытаться создавать решение "на века", "на все случаи жизни". Все равно все учесть невозможно. А иногда, как мне кажется, например, в данном случае, можно попытаться сделать все попроще. Хотя, полностью согласен, что в других случаях - такая простота может оказаться и совершенно неуместна. Поэтому наверно и не бывает универсальных решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 13:34:47 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
CrispyHi, PaulWist ! Метод не может быть порочен или непорочен... Просто к каждой задаче нужно подходить индивидуально. Бывают и локальные версии. Бывают и жесткие ограничения на доступ к информации, когда только один человек имеет право ее править. Нельзя же каждый раз пытаться создавать решение "на века", "на все случаи жизни". Все равно все учесть невозможно. А иногда, как мне кажется, например, в данном случае, можно попытаться сделать все попроще. Хотя, полностью согласен, что в других случаях - такая простота может оказаться и совершенно неуместна. Поэтому наверно и не бывает универсальных решений. Даже не знаю, что и сказать. Пожалуй отвечу цитатой Леса Пинтера: "Ошибок не бывает в природе, есть ситуации для которых программист не предусмотрел проверку" , исходя из такого тезиса, необходимо делать ф-ий программы, которые в дальнейшем приносили бы меньше головной боли. PS если мои слова вызвали у Вас чувство обиды, тогда прошу прощения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 13:50:27 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2WORKSNS оригинально. тоже способ .... это в смысле идеи а сам цикл где файл создается... короче я бы над ним поработал по крайней мере на первый взляд я бы всё таки на вашем месте выбрал блокировочку строки в таблице только не таблицы а строки в ней причем табличка не эта а соседняя и сама функция calculate вряд ли здесь умесна имхо так как файл имеет идекс по ключевому полю,что для таблиц логично ожидать, то ... правильно юзаем : go top или go bottom по ситуации и подбираем искомый максимум Но опять же кто как любит работать "Изящным движение руки брюки превращаются в шорты" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 14:29:35 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2Crispy извените ради бога... но вы зря обижаетесь здесь у вас врагов нет. Слишком уж всё виртуально. А в споре рождается истина Код ваш скопировал потому что писать лень, а не потому что поддеть хотел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 14:34:19 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2PaulWist : Да нет, думаю, все было вполне корректно. :) Единственное, что я пытался сказать - всего лишь - о сущностях Окамы :) В остальном же полностью согласен. Кстати, собственные программы Леса Пинтера, которые мне довелось однажды посмотреть в одной из его книг, честно говоря, произвели на меня впечатление... - своей убогостью мысли :). Хотя, конечно же, это только мое личное мнение - на данный момент. 2leaf : OK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 14:38:13 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2 Leaf Не спорю, кому что нравится, какая ситуация и так далее :-), я просто подкинул идею как приостановить других пока один толкает данные в таблицу, но меня такой способ не подводил. Если насчет скорости, то мне не приходилось работать с очень большими справочниками :-). И у Calculate есть все же небольшой плюс - он не зависит от корректности индекса и наличия оного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 19:41:24 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Hi WORKSNS! Способ (с блокировкой) также не работает при использовании буферизации и/или представлений (писать же программу, даже НЕ сетевую, без использования этих механизмов - это конечно порочная практика, даже во времена FPD делали "эмуляцию" этих полезнейших вещей через SCATTER/GATHER или временные таблицы/курсоры). Теоретически можно "перенести" формирование кода на момент физической записи (написав не в пример более сложный код в точке сохранения конечно), однако практически всегда легче использовать подход NewID. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 02:43:08 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Hi, Igor Korolyov ! Igor Korolyov /topic/145680&hl=newid- я вообще не пользуюсь AUTOINC по ряду причин, и ничего :) А интересно, что - вместо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 14:42:00 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Дык, Игорь вроде написал ;-) Igor Korolyov...однако практически всегда легче использовать подход NewID.Я прав, Игорь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 16:44:56 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Или у вас уже сплошь КС со своими сиквенсами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 16:46:12 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Можно просто поставить в поле праймери индекса табдицы default=reccount() и после аппенда делать replace sklad with 'склад'+alltr(str(id)). Тогда точно не будет совпадающих номеров складов Но тут уж такой прикол получится: если есть 3 склада и удалишь второй, то потом склад2 уже не создашь - только склад4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 20:27:33 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
lo-pataМожно просто поставить в поле праймери индекса табдицы default=reccount() и после аппенда делать replace sklad with 'склад'+alltr(str(id)). Тогда точно не будет совпадающих номеров складов Но тут уж такой прикол получится: если есть 3 склада и удалишь второй, то потом склад2 уже не создашь - только склад4. И будет тебе счастье... До первого PACK'а ;-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 23:33:43 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Hi Urri! Да, NewID. А Sequence в Oracle - это идеологический родственник NewID :) 2 lo-pata Делаем PACK и ... отправляем твой способ в сад :) Кроме того при работе с представлениями это опять таки вызовет совсем ненужные проблемы... Чего мудрить то - NewID уже много лет существует и доказал свою надёжность - так ведь нет, надо поизобретать всякий ерунды - от SYS(2015) и прочих самопальных GUID-ов до CALCULATE MAX, RECCOUNT() - ещё бы RECNO() вспомнили :) Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 02:26:02 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
NewID - не вопрос, но только для тех, кто работает с фоксом после семерки. Я обычно юзаю именно такой метод, какой я описал - именно реккаунт. Но!!!! всегда в программе делается пункт меню "сервис" - в котором есть и конфиг программы (пути к базам прописать) и всегда есть пункт (я так всегда делаю) - типа переиндексация базы или чистка, если хотите. Так там висит код, после которого и записи удаленные убираются и происходит ВСЕГДА проверка остающихся в базе данных. А там уже можно при проверке любые варианты рассмотреть - тут уж от задачи зависит, какие резы и данные, кот в дальнейшем вводиться будут. Так что реккоунт работает гут, но только при условии, что не программер местный каждый раз будет паки запускать и гробить всю нумерацию, а цивильно - юзер жмет пункт меню и выполняется чистка базы, переиндексация - да че угодно, но главное это в сервисах предусмотреть. Если такие вещи (типа переиндексации и пака) в меню предусмотреть - то вмешиваться в базу ручками и не надо будет. Единственное - пишешь инстракшен на листике и раздаешь юзерам, а лучше только юзерам с правами админов, и все. Они знают - раз в месяц надо запустить такой-то пункт меню и все будет супер гут, база будет почищена и раотать будет быстрее. Так что здесь проблем не метода, каким я пользуюсь, а именно сервсных функций, кот будут в программе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 04:20:04 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2lo-pata Вообще-то существует такая идеология проектирования баз данных, при которой delete отбрасывается напрочь, и все делается в основном через insert, ну а update остается только для того, чтобы помечать устаревшие записи как утратившие актуальность. Я даже нахожу такой подход очень привлекательным. Но практически он у меня применения не находит, так как всегда находятся ситуации, когда данные проще просто удалить, чем обеспечивать их версионность. Так, для справочника складов (который мы тут мусолим) удалить ненужный склад проще, чем объявить его закрытым для операций (ликвидированным), до тех пор, пока по этому складу не было ни одной складской проводки. Отсюда можно сделать вывод, что delete в реальной жизни встречаться будет. А описанный тобой подход несет в себе родовые травмы. Потому что если даже программа не предусматривает ни одного pack'а, ситуация, когда pack произойдет, рано или поздно случится. Вот уедут все админы и программеры ваши разом в отпуск - а база в это время упадет. Пригласят человека со стороны для восстановления. А он увидит, что туча удаленных записей в таблицах болтается - и какой будет его первая реакция? Пакануть, конечно. Смешно предполагать при этом, что он предварительно ознакомится с вашей инструкцией, в которой может быть даже 48-м кеглем написано, что этого делать нельзя ни в коем случае. Не тот человек и не та ситуация. А человек еще будет при этом над вами потешаться, что вы все - такие лохи, что даже базу не чистите, он так и не поймет, что такова была идеология ;-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 12:30:09 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2 Urri Да все такой метод предусматривает - пакуй и удаляй на здоровье. Только я еще раз говорю - не ручками через фокс, а напиши сервисную функцию в проге. Привожу пример: есть таблица "справочник материалов", есть вторая таблица "сметы". Метериалы: mat_id mat_name 1 цемент м400 2 цемент м500 3 кирпич Сметы: smet_id smet_name mat_id 1 смета1 1 1 смета1 2 1 смета1 3 2 смета2 1 2 смета2 2 Удаляем цемент м500. перепаковали базу, после пака пробежали по табличке и последовательно перенумеровали коды: mat_id mat_name 1 цемент м400 2 кирпич Теперь если дефолт в материалах стоит reccount()+1, то будет снова добавляться материал с кодом 3. Так вот: после пака материалов нужно просто еще пробежать по таблице сметы, удалить все материалы с кодом 2 и там где материалы с кодом 3 - заменить его на 2. Все - работать будет великолепно. А основание делать паки и переиндексации программно есть, причем очень веское! Если ты написал прогу для своей компании и она только у вас активно используется - то можно и ручками перепаковывать. А если ты ее сделал на заказ и она используется где-то далеко компанией, в кот и программеров-то нет? Кто там и что ручками будет через фокс делать? А перепаковывать и переиндексировать базу время от времени надо. И че делать-то? Они тебе по почте будут несколькогигабайтную базу слать? Не выход. А если есть сервисная функция такая - то даже распоследний юзер (секретарша шефа ) сможет нажать кнопочку "переиндексация", если у него будет в инструкции это написано. ЗЫМ насчет примера - никто конечно же со сметами так не работает Если в ней был цемент, то он и должен остаться, а не на песок заменяться или удаляться вообще, так что не судите строго Это просто первый пример, кот пришел в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 14:26:01 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2lo-pata А, теперь понял устройство несколько больше. Нет, все равно не одобряю. Слишком много накладных расходов, таких, как ресурсов, затрачиваемых на перепаковку, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2005, 14:56:02 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
Hi lo-pata! Это называется "... голова рукам покою не даёт" :) Т.е. дабы отстоять ВЕСЬМА спорное проектное решение (а не сделать нечто более нормальное и универсальное), приводится дикой код перекодирования :) Опять-же ты лишь на ОДИН момент ответил - про PACK - про работу НЕ напрямую с таблицей (а скажем с банальным представлением, особенно если надо СРАЗУ и основную запись вводить и подчинёные - для справочника складов это неактуально, а вот для всяких там накладных и прочего - очень даже нужно) - не ответил... Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2005, 03:15:49 |
|
||
|
Проблема помогите!
|
|||
|---|---|---|---|
|
#18+
2 Igor Korolyov А что там отвечать даже? Вообще не вижу проблемы - сделал себе представление, добавляй и удаляй что надо. Надо сохранить эти изменения в главной таблице и подчиненных? чем вопрос: никаких проблем нет. Делаешь аппенд в главную, в подчиненные - можно триггеры для таблиц прописать или в самом коде указать что и куда повставлять, где сложность? Удаление - то же самое. Может я и не прав, конечно, но приведи хоть пример, где могут вылезти партаки? Или воопрос сформулируй поконкретнее - отвечу более предметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 14:10:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=41&tid=1593878]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
217ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 533ms |

| 0 / 0 |
