Главная страница
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.036 c
3-1080281412
31512
2004-03-26 09:10
2004.05.02
Полтергейсты SQL Server или всё "намана"?


14-1081496161
Balkon
2004-04-09 11:36
2004.05.02
Полный Uninstall !


1-1081944980
AMogil
2004-04-14 16:16
2004.05.02
Предварительная обработка строк перед передачей в Format


14-1081261783
Soft
2004-04-06 18:29
2004.05.02
Есть ли Бог на Марсе?


1-1082030507
Katya_mgkit
2004-04-15 16:01
2004.05.02
StringGrid