Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];

Вниз

Установить 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.003 c
1-1256627612
Lionel
2009-10-27 10:13
2011.06.12
Вывод числа прописью в компонент Memo в FastReport


15-1298033535
oxffff
2011-02-18 15:52
2011.06.12
Языки и циклические зависимости между блоками компиляции(units)


15-1298551303
И. Павел
2011-02-24 15:41
2011.06.12
Регистрация regsvr32 "______.ocx"


2-1299053417
Гость
2011-03-02 11:10
2011.06.12
Как раскрасить title в DBGrid под Windows 7?


1-1233992383
Oleg_teacher
2009-02-07 10:39
2011.06.12
Equation+RxRichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский