Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.12;
Скачать: CL | DM;

Вниз

Установить Primary Key = 0   Найти похожие ветки 

 
petvv   (2011-02-28 10:57) [0]

Собственно вопрос, как после удаления всей информации из таблицы установить Primary Key = 0


 
petvv   (2011-02-28 11:01) [1]

Например в MS SQL есть команда которую мона выполнить, чтобы учтановить PK в 0

DELETE ATP
if @@error = 0
dbcc checkident(ATP,RESEED,0)
go


 
Palladin ©   (2011-02-28 12:18) [2]

если у пк стоит автогенерация, не все ли равно с какого значения она начнется?


 
sniknik ©   (2011-02-28 12:32) [3]

это же парадокс!... ;)
у нас проблема на старом была (в прошлом веке еще :)), значений авто инкременту не хватало (там были версии с до 32тыс значений), ну вот если у него такой... тоды ой.


 
sniknik ©   (2011-02-28 12:38) [4]

> как после удаления всей информации из таблицы
а как удаляется? DbiEmptyTable в принципе должно все чистить, т.к. делается пересозданием (самый быстрый способ, удалить и создать, чем миллион "делитов" с перераспределением страниц...).


 
Anatoly Podgoretsky ©   (2011-02-28 13:00) [5]

EmptyTable вроде бы сбрасывает в 0 и как сказали самый быстрый метод


 
Германн ©   (2011-02-28 13:28) [6]


> это же парадокс!... ;)
Даже в парадоксе с такой проблемой не сталкивался. Автоинкремент там давно 4-х байтный.


 
sniknik ©   (2011-02-28 13:51) [7]

> Автоинкремент там давно 4-х байтный.
в прошлом веке? в dos версии?


 
Германн ©   (2011-02-28 14:36) [8]


> в dos версии?

Во времена Dos Дельфи не было. А что касается времен Дельфи, то это Парадокс 5 (или может 4 в Д1). А там уже 4-х байтный.


 
sniknik ©   (2011-02-28 14:50) [9]

> Во времена Dos Дельфи не было.
dos и ныне живой (пройди по окрестным магазинам по заглядывай в монитор, повезет встретишь "в живую"), и некоторым с ним приходилось работать аж до 2006г. и с таблицами им/прогой на нем сделанными в Дельфе работать.

> А что касается времен Дельфи, то это Парадокс 5 (или может 4 в Д1). А там уже 4-х байтный.
вопрос твой? ты точно знаешь версию, или просто "лишь бы ляпнуть"?


 
Германн ©   (2011-02-28 14:55) [10]


> вопрос твой? ты точно знаешь версию

Нет. Вопрос не мой. И версию не знаю.
Просто вспоминая молодость помню, что у меня тоже "чесалось" сбрасывать автоинкремент в ноль при очистке таблицы. Но это была только "моя личная проблема", а не проблема Парадокса.
:)


 
sniknik ©   (2011-02-28 15:08) [11]

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


 
Jeer ©   (2011-02-28 16:22) [12]

Избегать авто-инкремента всеми силами - делов-то.


 
sniknik ©   (2011-02-28 20:10) [13]

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


 
_Юрий   (2011-02-28 21:15) [14]


> Избегать авто-инкремента всеми силами - делов-то.


А что же вместо них использовать?


 
Противный   (2011-02-28 22:15) [15]

>_Юрий   (28.02.11 21:15) [14]
>> Избегать авто-инкремента всеми силами - делов-то.
>А что же вместо них использовать?


Мануальные декременты. Разве не понятно?

А если серьезно, то можно и свой автоинкремент сделать. Ничего сложного, зато полный контроль зад генерацией ключей.

Стандалон, при создании получающий max(ID) from tablename, и выполняющий автоинкремент программно.  А если очень хочется, можно поглубже копнуть, например, при старте просканировать таблицу на предмет присутствия "окон" в последовательности имеющихся первичных ключей с целью последующего выделения новых ключей из этих "окон", дабы рациональнее использовать числовой диапазон.

А если надо работать в многопользовательском окружении, то завести специальную табличку, в которой хранить NextID для каждой таблицы, либо общий для всей БД. В транзакции получать NextID, инкрементировать его (возможно, больше чем на 1, как вариант пакетного выделения первичных ключей), записывать значение обратно в таблицу ключей, а полученный ключ (группу ключей) использовать по назначению.


 
Игорь Шевченко ©   (2011-02-28 22:38) [16]

Противный   (28.02.11 22:15) [15]

О сколько нам открытий чудных
Готовит просвещенья дух


 
_Юрий   (2011-02-28 22:40) [17]


> Противный   (28.02.11 22:15) [15]
>


А зачем все это? Все ж уже сделано. Собственноручно изготовленный из подручных материалов велосипед всяко хуже серийного получится, да и времени лишнего съест


 
Противный   (2011-02-28 23:37) [18]

>> _Юрий   (28.02.11 22:40) [17] А зачем все это? Все ж уже сделано. Собственноручно изготовленный из подручных материалов велосипед всяко хуже серийного получится, да и времени лишнего съест

Сам подумай. Это не сложно, поверь. Надо только постараться. А потом даже легко и интересно станет.

>> Игорь Шевченко ©   (28.02.11 22:38) [16] О сколько нам открытий чудных Готовит просвещенья дух

Век живи, век учись. Ты пока еще только на половине пути. Так что... еще все спереди!

P.S. Ты, Игорь, лентяй и сноб.


 
Amoeba_   (2011-03-01 00:19) [19]


> Во времена Dos Дельфи не было.

Это и ежику известно/ясно. Но Paradox уже не просто был, но даже поддердживался Borland Pascal  через DLL (естественно, толькои в защищенном режимеме) от ParadoxEngine.


 
Германн ©   (2011-03-01 03:26) [20]


>  Amoeba_   (01.03.11 00:19) [19]
>
>
> > Во времена Dos Дельфи не было.
>
> Это и ежику известно/ясно. Но Paradox уже не просто был,
>  но даже поддердживался Borland Pascal  через DLL (естественно,
>  толькои в защищенном режимеме) от ParadoxEngine.
>

Поясни.
Парадокс, конечно был во времена DOS. Но как он мог поддерживаться "Borland Pascal  через DLL", если самого механизма "Dynamic-link library" ещё не было?
Ну и тут ещё нужно спросить АП - когда Борланд купил (как всегда урезанную) версию Парадокс.


 
Palladin ©   (2011-03-01 04:21) [21]

если уж такие траблы с идентити пк, тогда куда надежней createguid в качестве пк использовать...


 
sniknik ©   (2011-03-01 08:01) [22]

> тогда куда надежней createguid в качестве пк использовать...
надежнее всего перейти с парадокса на что то современное, более "дуракозащищенное".


 
Противный   (2011-03-01 09:39) [23]

createguid

Который даст 128 недетерминированных псевдоуникальных бит. 16 байт для первичного ключа. 16 байт для каждого внешнего ключа. Индексы растут, производительност падает, пользователи в перерывах между запросами чаи гоняют.

А еще сплошь и рядом системы, где при вводе данных не значения из выпадающих списков выбираются, а вручную, с клавиатуры, внешние ключи вводятся, и, при использовании GUID, упадет в разы скорость, будет куча опечаток, эффективность системы упадет в разы.

Но это так, брюзжания о неэффективности GUID.

А если реально, то реально автор уже давно написал бы свой, самый хитровыкрученный генератор первичных ключей, который решал бы все его задачи. И тема была бы закрыта.


 
Amoeba_   (2011-03-01 17:31) [24]


> Германн ©   (01.03.11 03:26) [20]
>
>
> >  Amoeba_   (01.03.11 00:19) [19]
> >
> >
> > > Во времена Dos Дельфи не было.
> >
> > Это и ежику известно/ясно. Но Paradox уже не просто был,
>
> >  но даже поддердживался Borland Pascal  через DLL (естественно,
>
> >  толькои в защищенном режимеме) от ParadoxEngine.
> >
>
> Поясни.
> Парадокс, конечно был во времена DOS. Но как он мог поддерживаться
> "Borland Pascal  через DLL", если самого механизма "Dynamic-
> link library" ещё не было?
> Ну и тут ещё нужно спросить АП - когда Борланд купил (как
> всегда урезанную) версию Парадокс.

В BP7 появилась версия компилятора для создания программ, работающих в защищенном режиме DOS, а также и DLL для него. Так что механизм "Dynamic-link library" уже поддерживался, единственно задействовался еще т.н. DOS-расширитель.
А соответствующая DLL с API для доступа к таблицам Paradox была в комплекте.


 
petvv   (2011-03-02 07:06) [25]

Люди Paradox 7 + D2006-DXE любая. Вы тут развели демогогию, а конкретных решений нема. Мона конешно такой код юзать:


 Res := FindFirst(ExtractFilePath(paramstr(0))+"DB\*.DB",faAnyFile,SearchRec);
 while Res = 0 do
 begin
   try
     tbSource.DatabaseName:=ExtractFilePath(paramstr(0))+"DB\";
     tbSource.TableName:=UpperCase(SearchRec.Name);
     tbSource.Open;
     tbTarget.DatabaseName:=ExtractFilePath(paramstr(0))+"TEMP\";
     tbTarget.TableName:=UpperCase(SearchRec.Name);
     tbSource.StoreDefs := True;
     tbTarget.StoreDefs := True;
     tbSource.FieldDefs.Update;
     tbSource.IndexDefs.Update;
     tbTarget.FieldDefs := tbSource.FieldDefs;
     tbTarget.IndexDefs := tbSource.IndexDefs;
     tbTarget.CreateTable;
   except
     on EDBEngineError do
       begin
         ShowMessage("Не удалось переиндексировать "+Temp.TableName);
       end;
   end;
   tbSource.Close;
   tbTarget.Close;
   Res :=FindNext(SearchRec);
 end;
 ReindexDB("TEMP");


Но при этом не переносятся связи таблиц.

Может быть их как то мона перенести ?


 
petvv   (2011-03-03 06:19) [26]

DbiEmptyTable тоже не помагает только зачищает таблицу :(


 
Anatoly Podgoretsky ©   (2011-03-03 09:46) [27]


> Противный   (01.03.11 09:39) [23]

Автору ничего не надо писать, особо хитрозавороченного, надо просто перейти на промышленную СУБД, на бесплатную, с развитым набором типов и функций.


 
Anatoly Podgoretsky ©   (2011-03-03 09:50) [28]


> Германн ©   (01.03.11 03:26) [20]

Не важно когда купил, в ДОС не было механизма ДЛЛ, только механизм оверлеев.

И если в Парадоксе и был автоинкримент в 16 бит, то в версии 3.0, а там вообще ничего не было, так даже язык программирования был макрорекордер. Жуть страшная. Нормальный, если можно так сказать Парадокс получился в версии 4.0

Ну его нафиг и нормальный и ненормальный, в скопе.


 
Anatoly Podgoretsky ©   (2011-03-03 09:52) [29]

Кстати Борланд никогда не имел своей СУБД, Интернет компонент, Генераторов отчетов - это было или куплено (СУБД) или халява, когда решили, что на фиг покупать, когда вот оно бесплатное валяется.

Из СУБД они купили Парадокс, dBase, к которому в придачу дали ИБ (таже кадость как и Парадокс).


 
sniknik ©   (2011-03-03 11:36) [30]

> DbiEmptyTable тоже не помагает только зачищает таблицу :(
тоды осталось "дропнуть" поле автоинкремента, и восстановить его после. с помощью alter table например.


 
sniknik ©   (2011-03-03 11:41) [31]

кстати DbiEmptyTable не единственная функция там, там есть еще типа DbiTableRestructre... тоже меняет структуру типа alter table но возможностей должно быть больше, может удастся не удаляя поменять структуру.
да и с alter table можно не удалять, может получится, а просто поменять тип на простой int а после на автоинкремент... тогда индекс по этому полю не нужно будет восстанавливать.



Страницы: 1 вся ветка

Текущий архив: 2011.06.12;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.01 c
2-1299749151
laby
2011-03-10 12:25
2011.06.12
TcxGrid - автоскрол к первой записи


2-1298919160
Fr
2011-02-28 21:52
2011.06.12
TWebBrowser + как узнать адрес ссылки


15-1298323795
Юрий
2011-02-22 00:29
2011.06.12
С днем рождения ! 22 февраля 2011 вторник


15-1296229392
madmech
2011-01-28 18:43
2011.06.12
Перестала работать среда разработки


2-1299748160
ZV
2011-03-10 12:09
2011.06.12
Как отключть авто скролинг в Memo