|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть форма для заполнения таблицы city.dbf(c полями idcity,ccity). Первое значение idcity=1, все последующие начинаются с 101 и должны далее заполняться авт. Т.е. если занеслась запись с idcity=101, при следующем вводе на форме должно быть dcity=102. Сначало я как понимаю нужно получить значение idcity в последней строке таблицы Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 11:18 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982Здравствуйте. Есть форма для заполнения таблицы city.dbf(c полями idcity,ccity). Первое значение idcity=1, все последующие начинаются с 101 и должны далее заполняться авт. Т.е. если занеслась запись с idcity=101, при следующем вводе на форме должно быть dcity=102. Сначало я как понимаю нужно получить значение idcity в последней строке таблицы Код: plaintext 1. 2. 3. 4.
Вообще, не так это надо делать. Надо завести локальную/сетевую таблицу (назовём её MISC.DBF), где кроме прочего хранится последний использованный idcity. При необходимости открываем её SHARED, читаем последний idcity, увеличиваем его на 1, записываем его в MISC.DBF и юзаем в своём приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 12:00 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982Здравствуйте. Есть форма для заполнения таблицы city.dbf(c полями idcity,ccity). Первое значение idcity=1, все последующие начинаются с 101 и должны далее заполняться авт. Т.е. если занеслась запись с idcity=101, при следующем вводе на форме должно быть dcity=102. Сначало я как понимаю нужно получить значение idcity в последней строке таблицы Код: plaintext 1. 2. 3.
Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 12:05 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Дело в том, что нужно перед записью последнего idCity в таблицу misc, нужно ее очищать. А вот с удалением всех записей проблемка, выдает ошибку " File is in use " ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:02 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982 Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Дело в том, что нужно перед записью последнего idCity в таблицу misc, нужно ее очищать. А вот с удалением всех записей проблемка, выдает ошибку " File is in use " Блин, ну почему все лезут на одни грабли? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:25 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
IgorNG, какие грабли? Код: plaintext 1. 2. 3.
Может все-таки так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:28 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982, Так всем и везде пишут. Если предполагается использование программы несколькими пользователями, НЕЛЬЗЯ использовать открытие файлов в Exckusiv и использование таких команд, как PACK, т.е. использующие монопольное открытие таблицы. Иногда бывает в этом необходимость, но это как бы админский инструмент и пользуются им как правило в нерабочее время. Скорее всего у вас с логикой программы что-то неверно. Зачем удалять все записи и тут же записывать новую ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:32 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
IgorNG, тогда смысл от таблицы MISC.DBF ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:45 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
IgorNG, а все понял, нужно сделать еще одно поле idcity+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:49 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
1. Создать таблицу, где поле id имеет тип Integer 2. Создать первую запись таблицы с кодом 1 3. Модифицировать структуру таблицы изменив поле id с типа integer на поле типа Integer(AutoIncrement) и установить значение свойства NextValue = 101 Собственно, все. Теперь автоматически при создании новой записи поле id будет заполняться значениями начиная со 101 и дальше. Никакого кода по заполнению этого поля писать не надо. Относительный недостаток заключается в том, что в случае удаления записей счетчик не сбрасывается. Т.е. если создали запись с кодом 101, затем ее удалили, то новая запись получит код 102. Будут "дыры" в нумерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:03 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
ВладимирМ, так в том то и дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:15 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
На фоме в кнопке Добавить в valid прописал Код: plaintext 1. 2.
В таблице misc сдел еще одну колонку lnIdcity1=lnIdcity+1. При нажатии на кнопку добавить открывается форма editcity, где есть textbox txtidcity который должен быть равен MAX(lnIdcity1) таблицы misc. Как сделать, чтобы на форме в txtidcity отбражалось MAX(lnIdcity1) ? Процедура Init: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:26 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982, Что бы не было дыр, то всего 2 варианта: 1. Запрет на удаление. 2. Очистка полей записи с последующим использованием. Но здесь могут возникнуть сложности при имеющихся связях с другими таблицами. А вообще, чем смущают дыры. Не все ли равно какой ID - это же как бы внутренняя нумерация. Пользователь её все равно не видит. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:30 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
IgorNG, это я понимаю. Но ведь нужно довести до конца этот способ. Осталось присвоить this.txtIdcity=max(lnIdCity) from misc, но как правильно это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:37 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Ну, во-первых, не вижу никаких проблем из-за наличия дыр в нумерации. С какой стати вообще использовать код удаленной записи? Как Вы собираетесь поддерживать исторические данные? Например, год назад код 101 соответствовал "Улице 1", находящейся на севере города, а сегодня соответствует "Улице 2", которая находится на юге города? А у Вас год назад были заведены данные на улицу с кодом 101. Как будете разбираться? Во-вторых, если Вы хотите-таки использовать "дыры" в нумерации, то все становится очень сложно. Необходима еще дополнительная таблица, которая будет хранить эти самые дыры. Ведь Вы не можете ни изменить значение счетчика, ни сделать выборку. Поясню. Например, были записи с кодами 101, 102, 103. Вы удалили запись с кодом 102. Каким образом при создании новой записи Вы узнаете, что ей надо присвоить не код 104, а код 102? В-третьих, а какая Вам, собственно, разница, какое значение идентификатора будет внутри системы? Какие выгоды Вы хотите получить от этой самой непрерывности номеров? Наконец, "дыры" в нумерации неизбежны при любом варианте. Например, удалили записи, а новые еще не создали. ============================= Насчет таблицы, Вы не поняли. Имелся в виду аналог автоинкрементных полей. Сделайте поиск по ключевому слову NewId. Ну, например, вот была тема Вставка в таблицу записи с уникальным id ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:41 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982IgorNG, это я понимаю. Но ведь нужно довести до конца этот способ. Осталось присвоить this.txtIdcity=max(lnIdCity) from misc, но как правильно это сделать? Никак не сделать. Сам подход не правильный. Разумеется, если только Вы не собираетесь разрабатывать программу для единоличного использования. Для программы, с которой одновременно могут работать несколько пользователей, подобный подход не правильный по самой сути. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:44 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982, При нажатии на кнопку добавить открывается форма editcity, где есть textbox txtidcity который должен быть равен MAX(lnIdcity1) таблицы misc. Как сделать, чтобы на форме в txtidcity отбражалось MAX(lnIdcity1) ? Например в Init txtidcity: SELECT MAX(lnIdcity1) AS MaxIdCity FROM misc INTO CURSOR MyCursor SELECT MyCursor THISFORM.txtidcity.Value = MyCursor.MaxIdCity ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:47 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982, А Вы точно понимаете разницу между "ID" и "Номером по порядку"? Или хотя бы осознаете, что это две различных сущности? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 14:47 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
IgorNG, а можно ли поменять значение MaxIdCity в MyCursor ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 15:44 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Спасибо, разобрался. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 15:59 |
|
значение поля последней записи
|
|||
---|---|---|---|
#18+
Сергей1982Дело в том, что нужно перед записью последнего idCity в таблицу misc, нужно ее очищать. А вот с удалением всех записей проблемка, выдает ошибку " File is in use " Так-с, три шага назад, глубокий вдох и приседание. Вы кнопки давно нажимаете ? Мда, зря я спросил... Итак, если вам на экране пишут, что "File is in use", значит так оно и есть. Надо таблу закрывать после юзания. Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 17:43 |
|
|
start [/forum/topic.php?fid=41&msg=37429546&tid=1584162]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
3ms |
others: | 283ms |
total: | 425ms |
0 / 0 |