Проблема

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Проблема

Сообщение Nikolka » 22.03.2005 (Вт) 19:50

В БД типа Access. Есть поле типа счётчик (тип Long, AutoIncrement,Required). Так вот делаю вообщем add, add, add... И на моменте X счётчи вдруг обламывается, получается что-то вроде:

1
2
3
4
5
189
190
191
192
6
7
8
9
10
...
188
193
194
...

Чё за глюк? И если не влом - объясните бедному юзверю, что за Reqired - неповторяемость символов что-ли?

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

Сообщение alibek » 22.03.2005 (Вт) 20:17

Required означает, что поле является обязательным к заполнению.
А какая тебе разница, какие значения принимает счетчик?
Lasciate ogni speranza, voi ch'entrate.

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 22.03.2005 (Вт) 20:27

Потому что моя БД организована по принципу диапазонов:
в каком-то диапазоне (допустим записи 1-10) у меня должны быть идущие в строгом порядке записи.

А насчёт Required - вроде обязательное к заполнение поле это же AllowZeroLength. :?:

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

Сообщение alibek » 22.03.2005 (Вт) 20:30

Неправильная у тебя БД.
AllowZeroLength относится к текстовым полям, это означает, что в поле можно вводить пустую строку (не Null).
Lasciate ogni speranza, voi ch'entrate.

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 22.03.2005 (Вт) 21:27

Насчёт Requred вопрос снят.

Да, стоит ли мне его применять к полю типа Счётчик?

И что по основному вопросу. Может нужно использовать какую-нить сортировку? Чтобы записи не шли вразнобой?

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

Сообщение alibek » 22.03.2005 (Вт) 21:34

Ключевое поле должно быть Required.
Для своих целей заведи дополнительное поле (Range, например) и используй его (свойство Sort в Recordset или ORDER BY в SQL).
Lasciate ogni speranza, voi ch'entrate.

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 22.03.2005 (Вт) 22:00

А поле счётчик нельзя использовать? Если по нему будет сорт, будет вссё ок.

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

Сообщение alibek » 23.03.2005 (Ср) 8:10

Можно. И это будет свидетельством того, что БД разрабатывал дилетант (не говоря уж о том, что будут баги).
Lasciate ogni speranza, voi ch'entrate.

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 23.03.2005 (Ср) 14:55

Nikolka писал(а):А поле счётчик нельзя использовать? Если по нему будет сорт, будет вссё ок.
А зачем сорт, если поле счетчик. И вообще счетчики используют как правило в справочниках

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 23.03.2005 (Ср) 15:35

в каком-то диапазоне (допустим записи 1-10) у меня должны быть идущие в строгом порядке записи.

А потом как? Подробнее можно?
Мне кажется ты усложняешь.
Хотя нет не надо. Alibek ниеж описал, то, о чем я подумал. Короче, лучше еще добавь табличку с диапазонами, а втой. где у тебя идет разбение по этим диапазонам добавь еще одно поле и свяжи эти таблички.
Последний раз редактировалось MOV 23.03.2005 (Ср) 16:49, всего редактировалось 1 раз.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 23.03.2005 (Ср) 16:27

alibek писал(а):Можно. И это будет свидетельством того, что БД разрабатывал дилетант (не говоря уж о том, что будут баги).


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

sebas<-@->mail.ru

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

Сообщение alibek » 23.03.2005 (Ср) 16:35

Sebas, ты о багах?
Ну к примеру такая ситуация. Написана прога, которая определяет диапазон, к которому принадлежат записи, по значению счетчика; допустим 1...100 это служебные записи, 101...1000 - с высоким приоритетом и 1001...--- - все остальные.
Единственным способом добавить служебную запись (когда уже существуют остальные) - удалить все записи, сжать БД, добавить предыдущие служебные, добавить нужную, добавить все остальное.
Lasciate ogni speranza, voi ch'entrate.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 23.03.2005 (Ср) 16:40

Э... какойто неправильный пример, как раз вот с "такими" разработчиками я щя работаю, которые "Додумались" связывать счётчик с диапазонами(((( Ужас !!!

ДЛя таких вещей, задается отдельная таблица с описаниями групп, и Ид которых пишется в другую колонку исходной таблицы.

А то что ты предлагаешь, за это убивать надо в детстве))) а точнее в форуме №2)
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

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

Сообщение alibek » 23.03.2005 (Ср) 16:43

И вообще, лучше не использовать счетчики :)
Автоинкремент это хорошая идея, но в Access она сделана неудачно.
В БД должна быть возможность менять любое поле, особенно ключевое.
Чисто теоретически это конечно не нужно - идентификаторы выдаются один раз и навсегда. Но практика показывает, что менять идентификаторы все-же приходится.
Lasciate ogni speranza, voi ch'entrate.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 23.03.2005 (Ср) 16:46

Ты мой враг!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

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

Сообщение alibek » 23.03.2005 (Ср) 17:08

Не враг :)
Просто убедился, что теория это одно, а на практике бывают всякие глупости.
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 24.03.2005 (Чт) 15:24

Код: Выделить всё
set identity_insert [TableName] ON
insert into TableName
  (Id, String)
values (99, 'New system message')

Или в аксессе такого нет?
Хотя, конечно, сам я такой способ не люблю, а разработчик, придумавший (и реализовавший!) такую схему, у меня вылетел бы с такой записью в трудовой книжке, что... в общем, харакири было бы лучшим вариантом для него :evil: .

Правильно подобная ситуация решается так:
Код: Выделить всё
create table TableName
  (Id int not null IDENTITY(1,1),
  Message varchar(256) null,
  Flags int)

Не знаю, как с этим в Аксессе, но в MSSQL есть операции битового сравнения, так что поле Flags можно использовать как эквивалент тридцати двух bit'ов :).

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 24.03.2005 (Чт) 19:04

ээээ.
:lol:

Не судите строго челы - пред вами всего 16 летний пацан, который пытается чему-то научиться... :-)

С таблицами понял, но сейчас мне уже не хочется полпроги переписывать. Лучше дайте примерчик с сортировкой. Я происследовал: там почему-то при выходе из проги происходит полный Unsort :-(.

А ясь никак не могу найти никакого описания как етот sort работает... :?

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

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 25.03.2005 (Пт) 10:47

Nikolka писал(а):... Я происследовал: там почему-то при выходе из проги происходит полный Unsort :-(.
Это что такое?

Nikolka писал(а):А ясь никак не могу найти никакого описания как етот sort работает... :?
Sort делается через Order By <Field> [Asc|Desc]

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

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 25.03.2005 (Пт) 11:06

Книжки... Поройся вот тут, например: ftp://ftp.runnet.ru . Не уверен, что там есть именно то, что тебе нужно, но вдруг чего интересного накопаешь...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.03.2005 (Пт) 11:53

Nikolka писал(а):Я происследовал: там почему-то при выходе из проги происходит полный Unsort :-(.

ПрЫнцЫп хранения данных в базе именно в том, что нельзя делать никаких предположений о том, как физически размещены записи. И это хорошо и правильно :)

Nikolka писал(а):А ясь никак не могу найти никакого описания как етот sort работает... :?

А никак :)
Сортировка имеет смысл при выводе или обработке. При хранении не имеет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Базы данных

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

Сейчас этот форум просматривают: Google-бот и гости: 5

    TopList