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

Вниз

midas   Найти похожие ветки 

 
GenBr ©   (2002-03-28 14:07) [0]

Здравствуйте!
Помогите пожалуйста(бьюсь целый день).
есть таблица которая отображается в ClientDataSet.
Она содержит перв. ключ ID. Но это поле заполняется на сервере и не должно быть видно на клиенте.
На сервере приложений я установил свойство поля ID Required=False.
Когда я вставляю одну запись в клиентский набор(не заполняя поля ID), то все нормально, а если вставляю следующую запись то кидается ошибка "Key violation".
Что я не так делаю?
Заранее спасибо/


 
TSV ©   (2002-03-28 15:36) [1]

А оно у тебя описано, как TAutoIncField?


 
IPisk   (2002-03-28 15:45) [2]

Все же лучше самому заполнять это поле на стороне клиента,
обрабатывая AfterInsert для табюлицы.
Насколько я знаю автоинкрементируемые поля некорректно
поддерживаются в MIDAS.



 
alexandervasjuk ©   (2002-03-28 16:20) [3]

Конкретно: При вставке второй записи ID пытается перестать быть уникальным, т.е. два пустых ID - нарушение требования уникальности.


 
Nikolay M. ©   (2002-03-28 20:01) [4]


> Все же лучше самому заполнять это поле на стороне клиента,
> обрабатывая AfterInsert для табюлицы.
> Насколько я знаю автоинкрементируемые поля некорректно
> поддерживаются в MIDAS.


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

PS.
Присоединяюсь к мнению, что производится попытка вставить две записи, нарушающими уникальность ключа.


 
GenBr ©   (2002-03-29 06:02) [5]

2all
Я генерирую первичный ключ на стороне сервера, т.к. я работаю с Ораклом и необходимо использовать оракловские последовательности.
Проблема в том, как убрать этот ID вообще из пакета данных(или отменить то, что он является уникальным).


 
IPisk   (2002-03-29 09:24) [6]

Я в этом случае поступаю следующим образом:

1. на сервере создаю последовательность Sequence
2. обрабатываю у клиента AfterInsert. обращаюсь
к этой последовательности
SELECT MYSEQ.NEXTVAL FROM DUAL. Это и будет
значение для твоего поля ID.


 
IPisk   (2002-03-29 09:49) [7]

Второй вариант:
Добавить в свойство DataSetProvider.Options значение
poPropogateChange. Это позволит всем изменениям с сервера
например в обработчике DataSetProvider.BeforeUpdateRecord
быть передаными обратно компоненту ClientDataSet.
Также следует добавить в свойство DataSetProvider.Options значение poAutoRefresh, что позволит автоматически передавать
компоненту ClientDataSet значение Autoincrement поля, а также
значения полей по умолчанию.
(Стив Тейксейра Delphi5.Руководство разработчика т.2 с.752)


 
GenBr ©   (2002-03-29 10:07) [8]

Я так и сделал, но поле ID все рвнао нужно заполнять на клиенте,
иначе Key violation( как сделать так чтобы его можно было не заполнять?)


 
IPisk   (2002-03-29 10:20) [9]

У тебя поле ID ключевое, значит чтобы его не заполнять на
клиенте нужно убрать ключевое поле, но это повлечет за
собой другие проблемы ...


 
IPisk   (2002-03-29 10:21) [10]

В догонку - либо сделать это поле ключевым, но не уникальным.
А за уникальностью следить на сервере


 
GenBr ©   (2002-03-29 11:19) [11]

2IPisk
А как его убрать?
я убираю его из списка полей ClientDataSet но ошибка все равно возникает:-(


 
IPisk ©   (2002-03-29 11:28) [12]

Я имел в виду, что нужно убрать ключевое поле на сервере, то
есть разрешить повторяющиеся записи. А на добавление в
таблицу Oracle поставить тригер, который бы изменял содержимое
данного поля из последовательности.


 
GenBr ©   (2002-03-29 11:42) [13]

Эту часть базы данных я трогать не могу.
Неужели невозможно как нибудь изменить свойсва ключа в программе?


 
IPisk ©   (2002-03-29 11:47) [14]

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


 
GenBr ©   (2002-03-29 11:54) [15]

Пока суд да дело я так и сделал.
Но все равно спасибо.



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

Текущий архив: 2002.04.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-69897
ymin
2002-04-09 13:56
2002.04.22
Есть ли Help в минимальной установке Delphi 6?


1-69877
Еще один Новичок
2002-04-09 11:24
2002.04.22
Pos() для двоичных данных


3-69717
a_a_k
2002-04-01 10:40
2002.04.22
2 ошибки Query


1-69933
inko
2002-04-09 18:17
2002.04.22
Удаление файла после перезагрузки Windows.


1-69872
Andre V.
2002-04-08 10:24
2002.04.22
Создание своих VCL