Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
14-1081864276
miwa
2004-04-13 17:51
2004.05.02
О LAN-мессенджерах.


8-1075559104
iudjen
2004-01-31 17:25
2004.05.02
mediaplayer


8-1075209852
Анонимщик
2004-01-27 16:24
2004.05.02
Видеозахват, грейскейл


1-1082095979
kostik78ua
2004-04-16 10:12
2004.05.02
Инсталляция компонент


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