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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
14-69984
Кулюкин Олег
2002-03-12 08:57
2002.04.22
DBAware компоненты - за и против


3-69731
Kirill
2002-03-28 17:15
2002.04.22
Помогите сформировать запрос


3-69708
Отчаявшийся
2002-03-28 23:49
2002.04.22
Не удается подключиться к Interbase по сети


1-69889
RAVEN
2002-04-09 11:44
2002.04.22
TBitmap в компонентах


3-69699
Jaric
2002-03-30 14:26
2002.04.22
Как общаться через ADO компоненты через SPX/IPX протокол?





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