Конференция "Начинающим" » Установить Primary Key = 0 [Paradox]
 
  • petvv (28.02.11 10:57) [0]
    Собственно вопрос, как после удаления всей информации из таблицы установить Primary Key = 0
  • petvv (28.02.11 11:01) [1]
    Например в MS SQL есть команда которую мона выполнить, чтобы учтановить PK в 0

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

  • Palladin © (28.02.11 12:18) [2]
    если у пк стоит автогенерация, не все ли равно с какого значения она начнется?
  • sniknik © (28.02.11 12:32) [3]
    это же парадокс!... ;)
    у нас проблема на старом была (в прошлом веке еще :)), значений авто инкременту не хватало (там были версии с до 32тыс значений), ну вот если у него такой... тоды ой.
  • sniknik © (28.02.11 12:38) [4]
    > как после удаления всей информации из таблицы
    а как удаляется? DbiEmptyTable в принципе должно все чистить, т.к. делается пересозданием (самый быстрый способ, удалить и создать, чем миллион "делитов" с перераспределением страниц...).
  • Anatoly Podgoretsky © (28.02.11 13:00) [5]
    EmptyTable вроде бы сбрасывает в 0 и как сказали самый быстрый метод
  • Германн © (28.02.11 13:28) [6]

    > это же парадокс!... ;)
    Даже в парадоксе с такой проблемой не сталкивался. Автоинкремент там давно 4-х байтный.
  • sniknik © (28.02.11 13:51) [7]
    > Автоинкремент там давно 4-х байтный.
    в прошлом веке? в dos версии?
  • Германн © (28.02.11 14:36) [8]

    > в dos версии?

    Во времена Dos Дельфи не было. А что касается времен Дельфи, то это Парадокс 5 (или может 4 в Д1). А там уже 4-х байтный.
  • sniknik © (28.02.11 14:50) [9]
    > Во времена Dos Дельфи не было.
    dos и ныне живой (пройди по окрестным магазинам по заглядывай в монитор, повезет встретишь "в живую"), и некоторым с ним приходилось работать аж до 2006г. и с таблицами им/прогой на нем сделанными в Дельфе работать.

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

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

    Нет. Вопрос не мой. И версию не знаю.
    Просто вспоминая молодость помню, что у меня тоже "чесалось" сбрасывать автоинкремент в ноль при очистке таблицы. Но это была только "моя личная проблема", а не проблема Парадокса.
    :)
  • sniknik © (28.02.11 15:08) [11]
    а у нас была именно проблема парадокса, т.к. из-за этого кассы "вставали", пока не нашли и не "пофиксили".
    + это была проблема стиля работы, т.к. кассовая прога вместо создания новых справочников "таскала их с собой", для "надежности", и по нужде распаковывала в готовое каталог. ну а так как в архив клали тоже "проверенное/надежное" то попадали туда таблицы тестеров "проверенные/перепроверенные" с установленным авто инкрементом например на 28 тыс... (хотя хороший магазин, и с "0" забивал за пару месяцев, т.что это не основное). в общем пока не сделали "помесячное"/"понедельное" логирование, с действительно чистым автоинкрементом, проблемы вылазили довольно регулярно (+ ко всему не всегда превышение приводило к ошибкам, иногда просто сбрасывалось в минус).
  • Jeer © (28.02.11 16:22) [12]
    Избегать авто-инкремента всеми силами - делов-то.
  • sniknik © (28.02.11 20:10) [13]
    ага, а еще были проблемы со строками - избегать всеми силами строк, проблемы с бекапами - избегать бекапов, указателями-указателей, базами, операционкой, ... ets.
    в итоге единственное что остается, это счеты... ну до первого раза когда разгневанный "бух" ими тебя по "чайнику" долбанет (ага, проблема)... после остается только увольняться, и в дворники.
  • _Юрий (28.02.11 21:15) [14]

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


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


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

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

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

    А если надо работать в многопользовательском окружении, то завести специальную табличку, в которой хранить NextID для каждой таблицы, либо общий для всей БД. В транзакции получать NextID, инкрементировать его (возможно, больше чем на 1, как вариант пакетного выделения первичных ключей), записывать значение обратно в таблицу ключей, а полученный ключ (группу ключей) использовать по назначению.
  • Игорь Шевченко © (28.02.11 22:38) [16]
    Противный   (28.02.11 22:15) [15]

    О сколько нам открытий чудных
    Готовит просвещенья дух
  • _Юрий (28.02.11 22:40) [17]

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


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

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

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

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

    P.S. Ты, Игорь, лентяй и сноб.
  • Amoeba_ (01.03.11 00:19) [19]

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

    Это и ежику известно/ясно. Но Paradox уже не просто был, но даже поддердживался Borland Pascal  через DLL (естественно, толькои в защищенном режимеме) от ParadoxEngine.
  • Германн © (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" ещё не было?
    Ну и тут ещё нужно спросить АП - когда Борланд купил (как всегда урезанную) версию Парадокс.
  • Palladin © (01.03.11 04:21) [21]
    если уж такие траблы с идентити пк, тогда куда надежней createguid в качестве пк использовать...
  • sniknik © (01.03.11 08:01) [22]
    > тогда куда надежней createguid в качестве пк использовать...
    надежнее всего перейти с парадокса на что то современное, более "дуракозащищенное".
  • Противный (01.03.11 09:39) [23]
    createguid

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

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

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

    А если реально, то реально автор уже давно написал бы свой, самый хитровыкрученный генератор первичных ключей, который решал бы все его задачи. И тема была бы закрыта.
  • Amoeba_ (01.03.11 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 (02.03.11 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 (03.03.11 06:19) [26]
    DbiEmptyTable тоже не помагает только зачищает таблицу :(
  • Anatoly Podgoretsky © (03.03.11 09:46) [27]

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

    Автору ничего не надо писать, особо хитрозавороченного, надо просто перейти на промышленную СУБД, на бесплатную, с развитым набором типов и функций.
  • Anatoly Podgoretsky © (03.03.11 09:50) [28]

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

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

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

    Ну его нафиг и нормальный и ненормальный, в скопе.
  • Anatoly Podgoretsky © (03.03.11 09:52) [29]
    Кстати Борланд никогда не имел своей СУБД, Интернет компонент, Генераторов отчетов - это было или куплено (СУБД) или халява, когда решили, что на фиг покупать, когда вот оно бесплатное валяется.

    Из СУБД они купили Парадокс, dBase, к которому в придачу дали ИБ (таже кадость как и Парадокс).
  • sniknik © (03.03.11 11:36) [30]
    > DbiEmptyTable тоже не помагает только зачищает таблицу :(
    тоды осталось "дропнуть" поле автоинкремента, и восстановить его после. с помощью alter table например.
  • sniknik © (03.03.11 11:41) [31]
    кстати DbiEmptyTable не единственная функция там, там есть еще типа DbiTableRestructre... тоже меняет структуру типа alter table но возможностей должно быть больше, может удастся не удаляя поменять структуру.
    да и с alter table можно не удалять, может получится, а просто поменять тип на простой int а после на автоинкремент... тогда индекс по этому полю не нужно будет восстанавливать.
 
Конференция "Начинающим" » Установить Primary Key = 0 [Paradox]
Есть новые Нет новых   [134432   +19][b:0][p:0.002]