|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
При разработке распределенной БД на базе ODBC-драйвера Access возникла такая проблема: есть необходимость создания поля типа GUID, причем с автозаполнением. Поле типа GUID создать можно: CREATE TABLE TableName (FieldName guid); А вот каким образом создать поле с автозаполнением? Визуально - это очень просто, конечно. А вот программно... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2001, 07:13 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
ComboBox использовать нельзя? Там автозап. реализовано. Там в свойствах надо только отключить "ограничиться списком". Передо мной тоже недавно встала подобная задача. Собираюсь сделать так. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2001, 10:14 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Откуда у меня ComboBox? У меня вообще GUI нет и в помине... База данных сама по себе работает как сервис... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2001, 09:07 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Ага.. Сори. Тогда так: CREATE TABLE TestTable (guid counter) Или я опять не воткнул? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2001, 17:18 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Увы, к сожалению таким образом не получается... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2001, 07:01 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
А какой акцес? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2001, 14:21 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
ps: у меня 2000. Все ОК. Правдо локально и напрямую. Попробую через ОДБЦ. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2001, 14:24 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Ага... Значит все же 2000... Мда... Переход на эту платформу назрел и стал уже не столько интересен и занимателен, сколько необходим. Так, например, нет возможности создать зашифрованную базу данных средствами ODBC используя формат Access 97 (или V3). Для этого необходим формат V4 (или Access 2000). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2001, 08:10 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
А что у вас за задача? Дело в том, что секьюрити в акцесс - @*@&@#$^... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2001, 08:32 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Столкнулась с аналогичной проблемой: Как запросе создать таблицу с полем счетчика код репликации?? 2 cube: А у меня в 2000 не получилось - ни локально, ни напрямую (Acc2000 + SR1 + обновление для sql2000) Выражение CREATE TABLE Table1 (Field1 counter guid) в Acc2000 создает счетчик длинное целое, а в 97 вообще ругается на ошибку синтаксиса. В хелпе об этом вообще ни слова. Неужели его только в конструкторе создать можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2001, 07:25 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Вот вам выдержка из акцессовского хелпа: ... Replication ID Globally unique identifier (GUID) N/A 16 bytes You can set this property only from the table's property sheet. конец цитаты. no comments. зы: Уважаемые дамы и господа! Ответьте мне, пожалуйста на такой вопрос: ЗАЧЕМ в акцессовской таблице 16-байтный автоинкрементный ключ? Длинное целое занимает 4 байта, что соответствует числу 2 147 483 647. Если у вас количество записей в таблице хотябы приблизится к половине этого числа, акцесс просто загнется. Или это "семь раз отмерь..." ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2001, 14:29 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
>>ЗАЧЕМ в акцессовской таблице 16-байтный автоинкрементный ключ? Да просто эта база будет всасываться на SQL-сервер время-от-времени DTS-пакетом, или реплицироваться - пока не определились. Может, хватило бы и 4-байтового, но в SQL я не нашла генератора случайных int, а уникальность как поддерживать? Да и размер базы не известен пока даже предположительно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2001, 09:06 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
http://ssy.mccinet.ru/uid.html ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2001, 11:35 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
2 SSmirnov: Прочитала, попробовала - работает. Здорово. Но есть несколько непоняток: 1) Зачем генерить свою функцию на 16-ти символьную уникальную строку, когда есть 16-байтовый guid? 2) Для Currency при пакетной вставке диапазон 1,3 сек перекроется легко, остается работать только генератор случайных чисел. А еще надо не забыть для каждого клиента прописать свой аргумент командной строки. А если есть другие разработчики? 3) Как все это будет с SQL-сервером взаимодействовать??? Это не в обиду, а в порядке размышлений. Мысль действительно понравилась, и я ее думаю. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2001, 14:14 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
2 Erika: Я это всё придумал довольно давно для .MDB, то есть вне всякой связи с SQL сервером. И это многое объясняет 1) Наверное, я чего-то не так делаю, но поля с типом "Код репликации" Access сам заполнять не хочет, а в значение по умолчанию никакого rowid(), как в SQL'е, не напишешь. И потом, 97-й Access с GUID'ами вообще не очень дружит. 2) В общем-то я вставлял порядка 1000000 записей подряд и запросом и через рекордсет. Дублирования не было. Вероятно, на современных мощных машинах это уже не пройдет (у меня был Celeron-333). Аргументы командной строки можно хранить в той-же базе и присваивать каждому каждому вновь запущенному интерфейсу свой, уникальный. Только вот маловато их... 3) ВЗАИМОдействия с SQL сервером добиться, наверное, не выйдет. Хотя, соорудить аналогичную строку для значения по умолчанию может быть и возможно. Не пробовал. Так что, если вдруг, случайно, что-нибудь получится - пиши: очень любопытно! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2001, 18:52 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
>>поля с типом "Код репликации" Access сам заполнять не хочет Эти поля имеют тип счетчик, а размер поля - код репликации. Из-за чего собственно вопрос и возник, т.к. создать такое почему-то моно только в конструкторе таблиц, а из запроса - никак. остальное будем думать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2001, 09:02 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
А у меня в Access'97 прокатило: CurrentDB.Execute "CREATE TABLE TableName (FieldName guid);" То есть поле то с типом "Код репликации" создалось, не хочет только заполняться само ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2001, 15:19 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Так в том то и дело, что чтобы guid был с автозаполнением, тип поля д.б. вовсе не "Код репликации", а счетчик, а вот размер его д.б. не длинное целое, а "Код репликации". Можно создать CREATE TABLE Table1 (Field1 guid) - будет без автозаполнения, можно CREATE TABLE Table1 (Field1 counter) - будет длинное целое, а вот CREATE TABLE Table1 (Field1 counter guid) - увы, никак. 2 cube Кстати, выдержки из хелпа, приведенной выше, я у себя так и не нашла, и мне кажется, она немножко из другой оперы - реч то там идет не о типе полей, а о странице свойств таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2001, 15:39 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
2 Erika: Вполне возможно... А вообще, может, упершись лбом в стену, стоит сделать шаг назад (а то и два), осмотреться... Я, честно говоря, не могу представить ситуацию, когда "кровь из носа" нужно создавать таблицу из запроса с кодом репликации. Это я все к тому, чтобы узреть поблее подробное описание задачи . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2001, 10:59 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Уж и не знаю поможет ли, но у меня получилось так: DoCmd.CopyObject currentdb.Name, "NewTable", acTable, "SrcTable" В SrcTable только одно поле с GUID'ом этим проклятущим. Остальные поля можно добавлять потом ALTER'ом или ещё как-нибудь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2001, 16:40 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
2 SSmirnov: Да у них там по-моему к VBA доступа нет (обращение происходит через ОДБЦ). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2001, 12:09 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
2 cube: Да в общем-то я уже сделала на днях два шага назад. Правда, при этом еще получилось 10 шагов в обход. Интерес к вопросу уже чисто академический. 2 SSmirnov: Увы, я не из Access делаю, VBA действительно не подходит. А задачка такая: Нужно было сделать копию части БД с SQL-сервера на Access. А если создать поле guid и скоприровать туда данные, никакой возможности изменить его тип на счетчик код репликации уже нет. Поэтому пришлось делать в три этапа - 1)через DTS создать таблицы, 2)ручками изменить типы полей и проставить связи 3)вторым DTS скопировать нужные данные. Криво, долго и нудно! И непонятно - почему в конструкторе можно, а в коде нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2001, 07:55 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
А может вообще с акцессом не стоило связываться, а? А что если тот-же SQL Server - Desktop поставить и в него реплицировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2001, 11:04 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Вот, случайно вышел на эту тему. Это я ее начал. :) А потом решение нашел, но сюда не посмотрел, какие тут дебаты велись. Так вот, первоначальная задача несколько откатилась. Более глобальное описание задачи следующее: имеется несколько отдельных серверов, в которых в качестве БД используются файлы MS Access. Доступ - через ODBC-драйвер. Сервер в процессе работы должен был иметь возможность создавать новые файлы БД. Поэтому стояло условие в создании таблиц через ODBC. Через сервера проходит некоторый поток данных, кое что из которого откладывается в БД. Каждый сервер работает сам по себе. Данные могут пойти через один, а могут и через другой. Но захотелось иметь в БД на каждом сервере общую картину. Т.е. реплицировать БД. После некоторых размышлений я пришел к выводу, что мне нужно как-то уникальным образом идентифицировать каждую отдельную запись БД, причем независимо от того, на каком сервере эта запись была создана. Я уже начал было придумывать хитрый алгоритм по созданию уникальных значений, но потом спохватился и понял, что MS уже придумал это до меня: в Win32 API есть фунции по созданию GUID. А вот путь "поле GUID с автозаполнением" был неверным. Дело в том, что по этим GUID система репликации определяет, есть ли уже в локальной БД такая запись или еще нет. Когда запись принимается извне , ее GUID сохраняется в БД . Поэтому на самом деле поле "с автозаполнением" использовать просто невозможно: в него нельзя записать значение. Итак, проблема решилась посредством убиения проблемы как таковой после некоторого анализа. :) Вот так и живем. :) Искренне благодарен всем за весьма интересную дискуссию. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2002, 16:25 |
|
Создание хитрых полей
|
|||
---|---|---|---|
#18+
Мне при поиске ответа в свое время помог ERwin (соответственно, рекомендую им попользоваться): Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2002, 15:00 |
|
|
start [/forum/topic.php?fid=45&msg=32011100&tid=1610210]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 297ms |
total: | 445ms |
0 / 0 |