powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание хитрых полей
29 сообщений из 29, показаны все 2 страниц
Создание хитрых полей
    #32008840
Alex Fogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При разработке распределенной БД на базе ODBC-драйвера Access возникла такая проблема: есть необходимость создания поля типа GUID, причем с автозаполнением. Поле типа GUID создать можно:

CREATE TABLE TableName (FieldName guid);

А вот каким образом создать поле с автозаполнением? Визуально - это очень просто, конечно. А вот программно...
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32008865
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ComboBox использовать нельзя? Там автозап. реализовано. Там в свойствах надо только отключить "ограничиться списком". Передо мной тоже недавно встала подобная задача. Собираюсь сделать так.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32009037
Alex Fogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Откуда у меня ComboBox? У меня вообще GUI нет и в помине... База данных сама по себе работает как сервис...
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32009094
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага.. Сори. Тогда так:

CREATE TABLE TestTable (guid counter)

Или я опять не воткнул?
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32009407
Alex Fogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Увы, к сожалению таким образом не получается...
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32009582
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какой акцес?
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32009610
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ps: у меня 2000. Все ОК. Правдо локально и напрямую. Попробую через ОДБЦ.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32009999
Alex Fogol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага... Значит все же 2000... Мда... Переход на эту платформу назрел и стал уже не столько интересен и занимателен, сколько необходим. Так, например, нет возможности создать зашифрованную базу данных средствами ODBC используя формат Access 97 (или V3). Для этого необходим формат V4 (или Access 2000).
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32010002
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что у вас за задача? Дело в том, что секьюрити в акцесс - @*@&@#$^...
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32010729
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулась с аналогичной проблемой:
Как запросе создать таблицу с полем счетчика код репликации??

2 cube:
А у меня в 2000 не получилось - ни локально, ни напрямую (Acc2000 + SR1 + обновление для sql2000)
Выражение
CREATE TABLE Table1 (Field1 counter guid)
в Acc2000 создает счетчик длинное целое, а в 97 вообще ругается на ошибку синтаксиса. В хелпе об этом вообще ни слова. Неужели его только в конструкторе создать можно?
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32010906
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот вам выдержка из акцессовского хелпа:

...
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. Если у вас количество записей в таблице хотябы приблизится к половине этого числа, акцесс просто загнется. Или это "семь раз отмерь..." ?
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32010965
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>ЗАЧЕМ в акцессовской таблице 16-байтный автоинкрементный ключ?
Да просто эта база будет всасываться на SQL-сервер время-от-времени DTS-пакетом, или реплицироваться - пока не определились. Может, хватило бы и 4-байтового, но в SQL я не нашла генератора случайных int, а уникальность как поддерживать? Да и размер базы не известен пока даже предположительно.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32010978
SSmirnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://ssy.mccinet.ru/uid.html
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32010986
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SSmirnov:
Прочитала, попробовала - работает. Здорово. Но есть несколько непоняток:
1) Зачем генерить свою функцию на 16-ти символьную уникальную строку, когда есть 16-байтовый guid?
2) Для Currency при пакетной вставке диапазон 1,3 сек перекроется легко, остается работать только генератор случайных чисел. А еще надо не забыть для каждого клиента прописать свой аргумент командной строки. А если есть другие разработчики?
3) Как все это будет с SQL-сервером взаимодействовать???
Это не в обиду, а в порядке размышлений. Мысль действительно понравилась, и я ее думаю. Спасибо.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32010999
SSmirnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Erika:
Я это всё придумал довольно давно для .MDB, то есть вне всякой связи с SQL сервером. И это многое объясняет
1) Наверное, я чего-то не так делаю, но поля с типом "Код репликации" Access сам заполнять не хочет, а в значение по умолчанию никакого rowid(), как в SQL'е, не напишешь. И потом, 97-й Access с GUID'ами вообще не очень дружит.
2) В общем-то я вставлял порядка 1000000 записей подряд и запросом и через рекордсет. Дублирования не было. Вероятно, на современных мощных машинах это уже не пройдет (у меня был Celeron-333). Аргументы командной строки можно хранить в той-же базе и присваивать каждому каждому вновь запущенному интерфейсу свой, уникальный. Только вот маловато их...
3) ВЗАИМОдействия с SQL сервером добиться, наверное, не выйдет. Хотя, соорудить аналогичную строку для значения по умолчанию может быть и возможно. Не пробовал.

Так что, если вдруг, случайно, что-нибудь получится - пиши: очень любопытно!
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011034
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>поля с типом "Код репликации" Access сам заполнять не хочет

Эти поля имеют тип счетчик, а размер поля - код репликации. Из-за чего собственно вопрос и возник, т.к. создать такое почему-то моно только в конструкторе таблиц, а из запроса - никак.
остальное будем думать.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011076
SSmirnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у меня в Access'97 прокатило:

CurrentDB.Execute "CREATE TABLE TableName (FieldName guid);"

То есть поле то с типом "Код репликации" создалось, не хочет только заполняться само
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011078
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в том то и дело, что чтобы guid был с автозаполнением, тип поля д.б. вовсе не "Код репликации", а счетчик, а вот размер его д.б. не длинное целое, а "Код репликации".
Можно создать CREATE TABLE Table1 (Field1 guid) - будет без автозаполнения,
можно CREATE TABLE Table1 (Field1 counter) - будет длинное целое,
а вот CREATE TABLE Table1 (Field1 counter guid) - увы, никак.

2 cube
Кстати, выдержки из хелпа, приведенной выше, я у себя так и не нашла, и мне кажется, она немножко из другой оперы - реч то там идет не о типе полей, а о странице свойств таблицы.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011097
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Erika:
Вполне возможно...

А вообще, может, упершись лбом в стену, стоит сделать шаг назад (а то и два), осмотреться... Я, честно говоря, не могу представить ситуацию, когда "кровь из носа" нужно создавать таблицу из запроса с кодом репликации. Это я все к тому, чтобы узреть поблее подробное описание задачи
.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011100
SSmirnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уж и не знаю поможет ли, но у меня получилось так:

DoCmd.CopyObject currentdb.Name, "NewTable", acTable, "SrcTable"

В SrcTable только одно поле с GUID'ом этим проклятущим.
Остальные поля можно добавлять потом ALTER'ом или ещё как-нибудь.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011120
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SSmirnov:
Да у них там по-моему к VBA доступа нет (обращение происходит через ОДБЦ).
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011151
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 cube:
Да в общем-то я уже сделала на днях два шага назад. Правда, при этом еще получилось 10 шагов в обход. Интерес к вопросу уже чисто академический.
2 SSmirnov:
Увы, я не из Access делаю, VBA действительно не подходит.

А задачка такая: Нужно было сделать копию части БД с SQL-сервера на Access. А если создать поле guid и скоприровать туда данные, никакой возможности изменить его тип на счетчик код репликации уже нет. Поэтому пришлось делать в три этапа - 1)через DTS создать таблицы, 2)ручками изменить типы полей и проставить связи 3)вторым DTS скопировать нужные данные. Криво, долго и нудно! И непонятно - почему в конструкторе можно, а в коде нельзя.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32011176
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может вообще с акцессом не стоило связываться, а? А что если тот-же SQL Server - Desktop поставить и в него реплицировать?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Создание хитрых полей
    #32048883
The Lex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, случайно вышел на эту тему. Это я ее начал. :) А потом решение нашел, но сюда не посмотрел, какие тут дебаты велись.

Так вот, первоначальная задача несколько откатилась. Более глобальное описание задачи следующее: имеется несколько отдельных серверов, в которых в качестве БД используются файлы MS Access. Доступ - через ODBC-драйвер. Сервер в процессе работы должен был иметь возможность создавать новые файлы БД. Поэтому стояло условие в создании таблиц через ODBC.

Через сервера проходит некоторый поток данных, кое что из которого откладывается в БД. Каждый сервер работает сам по себе. Данные могут пойти через один, а могут и через другой. Но захотелось иметь в БД на каждом сервере общую картину. Т.е. реплицировать БД.

После некоторых размышлений я пришел к выводу, что мне нужно как-то уникальным образом идентифицировать каждую отдельную запись БД, причем независимо от того, на каком сервере эта запись была создана. Я уже начал было придумывать хитрый алгоритм по созданию уникальных значений, но потом спохватился и понял, что MS уже придумал это до меня: в Win32 API есть фунции по созданию GUID. А вот путь "поле GUID с автозаполнением" был неверным.

Дело в том, что по этим GUID система репликации определяет, есть ли уже в локальной БД такая запись или еще нет. Когда запись принимается извне , ее GUID сохраняется в БД . Поэтому на самом деле поле "с автозаполнением" использовать просто невозможно: в него нельзя записать значение.

Итак, проблема решилась посредством убиения проблемы как таковой после некоторого анализа. :)

Вот так и живем. :)

Искренне благодарен всем за весьма интересную дискуссию.
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32049110
Фотография ТиБиБи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне при поиске ответа в свое время помог ERwin (соответственно, рекомендую им попользоваться):
Код: plaintext
1.
Set ERwinField = ERwinTableDef.CreateField( "SomeId" , DB_GUID)
ERwinField.DefaultValue =  "GenGUID()" 
...
Рейтинг: 0 / 0
Создание хитрых полей
    #32049111
Фотография ТиБиБи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне при поиске ответа в свое время помог ERwin (соответственно, рекомендую им попользоваться):
Код: plaintext
1.
Set ERwinField = ERwinTableDef.CreateField( "SomeId" , DB_GUID)
ERwinField.DefaultValue =  "GenGUID()" 
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Создание хитрых полей
    #36085614
jtt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jtt
Гость
...
Рейтинг: 0 / 0
Создание хитрых полей
    #36085615
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
jtt http://emmnew.narod.ru
Сорри, а разве в этом топике было что-то про Эксель?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Создание хитрых полей
    #39932246
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


А куда делся этот сайт ?
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание хитрых полей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]