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

Вниз

Как в трех уровневом приложении получить идентификатор?   Найти похожие ветки 

 
big_bugzy   (2004-04-08 04:16) [0]

Есть идентификатор типа счетчик. Как получить его значение при добавлении новой записи без ApplyUpdates??
К серверу приложения подключаюсь через SocketServer (MIDAS) ,база  - Access 2000


 
big_bugzy   (2004-04-08 09:26) [1]

Не ужели никто не знает??


 
Nikolay M. ©   (2004-04-08 09:39) [2]

http://hiprog.com/access/article.asp?id=191
но это криво.
Можно генерить очередной ID руками, используя блокировки (в акссессе они, вроде, есть?).
Еще, поскольку у тебя трехзвенка, можно поручить это апп-серверу. Создаешь у него новый метод GetNewID, заводишь глобальную переменную ID (или массив ID-шек - для каждой таблицы), работаешь с ней из разных RDM-ов через критические секции (ну, или любой другой способ синхронизации потоков). Метод GetNewID возвращает на клиента очередную ID-шку. Не забыть поменять в таблице тип поля с "Счетчик" на "Целое".


 
big_bugzy   (2004-04-08 10:09) [3]

2 Nikolay M. ©  
у меня сейчас используется примерно то что тут -> http://hiprog.com/access/article.asp?id=191...
С этим могут возникнуть траблы при одновременном добавлении новых записей несколькими пользователями
Генерить ключи и следить чтобы у каждого пользователя сгенереный ключ не повторялся с уже сгенерированным для другого пользователя ключем - геморойное дело...
А нельзя при ApplyUpdates получить именно только что добавленый идентификатор?
Ато чегото не хочется мне самому контроь уникальности ключа придумывать...


 
Nikolay M. ©   (2004-04-08 10:19) [4]


> С этим могут возникнуть траблы при одновременном добавлении
> новых записей несколькими пользователями

И они обязательно возникнут.


> Генерить ключи и следить чтобы у каждого пользователя сгенереный
> ключ не повторялся с уже сгенерированным для другого пользователя
> ключем - геморойное дело...

А в чем геморрой-то?
В самом примитивном случае метод GetNewID на сервере занимает всего 5-10 строчек: инициализация и вход в критическую секцию, приращение глобальной переменной на 1, выход из критической секции. Ну, еще при запуске сервера эту глобальную переменную нужно проинициализировать. Все. Где здесь геморрой?


> А нельзя при ApplyUpdates получить именно только что добавленый
> идентификатор?

Это лучше делать не на AllpyUpdates, а на OnNewRecord.


 
Romkin ©   (2004-04-08 10:23) [5]

Nikolay M. ©  (08.04.04 09:39) [2] Проще можно, СОМ-объект на сервере, с моделью потоков tmSingle (все в одном). Каждый кокласс обращается к одному классу-нумератору (модулю данных), который берет значение из таблицы/переменной. Все вызовы уже сериализованы, толкьо отдавай :))


 
Nikolay M. ©   (2004-04-08 10:29) [6]


> Romkin ©   (08.04.04 10:23) [5]

Можно и так. Можно еще десяток способов придумать. Это уже на усмотрение автору.


 
big_bugzy   (2004-04-08 10:32) [7]

>А в чем геморрой-то?
Геморой в том что из синхронизаций потоков я только Synchronize знаю...
трёх уровневое приложение в первые пишу ,поэтому вопросов много возникает...

OnNewRecord немного рано возникает... На клиенте в этот момент еще нет нового идентификатора...


 
Nikolay M. ©   (2004-04-08 10:44) [8]


> Геморой в том что из синхронизаций потоков я только Synchronize
> знаю...
> трёх уровневое приложение в первые пишу ,поэтому вопросов
> много возникает...

Читай в Win32 SDK про "InitializeCriticalSection" и все, что рядом или в Using Delphi описание "TCriticalSection". Ничего трудного там нет.


> OnNewRecord немного рано возникает... На клиенте в этот
> момент еще нет нового идентификатора...

Что значит рано? Для кого рано? И что значит "нет идентификатора"? А ты сделай так, чтобы был. Тебе религия не позволяет вызвать у сервера метод AppServer.GetNewID в любом месте программы?


 
big_bugzy   (2004-04-08 11:15) [9]

>Тебе религия не позволяет вызвать у сервера метод  AppServer.GetNewID любом месте программы?

:)

Позволяет конечно
Просто я все же думал обойтись без него, но похоже лучше почитать описание "TCriticalSection"...

Спасибо всем кто откликнулся.


 
Romkin ©   (2004-04-08 11:22) [10]

А не надо... Я же говорил, сделай на сервере класс с tmSingle - все за тебя уже синхронизируют


 
Павел   (2004-04-08 14:35) [11]

а зачем CriticalSection? в большинстве случаев вполне достаточно Interlocked... функций



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

Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.036 c
1-1082309008
Скив
2004-04-18 21:23
2004.05.02
Методы сортировок


1-1082041888
Avreliy
2004-04-15 19:11
2004.05.02
Массив объектов класса TEdit


1-1081923449
Вова
2004-04-14 10:17
2004.05.02
Как определить путь к моей программе?


3-1081229956
Russko
2004-04-06 09:39
2004.05.02
Ошибка при открытии БД


1-1081945120
siriusP
2004-04-14 16:18
2004.05.02
Почему сбрасываются свойства в компоненте?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский