|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.10.2011, 20:13 | #1 |
Пользователь
Регистрация: 23.10.2011
Сообщений: 12
|
Проблема с добавлением записей (сервер приложений + clientdataset)
Вступление (для более полного понимания проблемы):
Имеется сервер приложений, подключенный через ADO к таблицам в MS Access (LichData, Doljnost, Telephones, Adres). Поле ключ в таблице LichData автоинкрементное - через него организуется связь "главная-подчиненная" между таблицами. Doljnost, Telephones и Adres связаны с LichData по этому полю. Связь клиентского приложения с удаленным модулем данных организуется посредством модуля: DCOM. Для связи с наборами данных используется компонент ClientDataSet. Вот мы соединились с сервером: Код:
Код:
Теперь проблема: когда пытаюсь записать данные на сервер Код:
В общем прошу помощи, уважаемые форумчане. Последний раз редактировалось Stilet; 23.10.2011 в 20:28. |
24.10.2011, 09:42 | #2 | ||
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
||
24.10.2011, 16:48 | #3 | ||
Пользователь
Регистрация: 23.10.2011
Сообщений: 12
|
Цитата:
В принципе главное чтобы добавлялись записи, а поле ключ все равно будет не видимым для пользователя. Цитата:
На сервере приложений я добавил один DataSource, в его свойстве DataSet выбрал TLichData (нашу главную таблицу) . Сама организация связи производится в подчиненных таблицах (TTelephones, TDoljnost, TAdres), то бишь в MasterSource выбрано dsLichData, а в MasterFields выбираются нужные поля для связи: Сами подчиненные таблицы подключены к серверу через главную таблицу, а не напрямую. |
||
24.10.2011, 18:13 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Не понял как на сервере приложений можно организовать такую связь. У вас там должно быть 4 AdoQuery, для каждого их них свой DataSetProvider, на каждый из которых из клиентской части ссылается свой ClientDataSet. На клиентской части это возможно. Теперь дальше. Выполняется CDSLichData.ApplyUpdates - в базе создается запись и появляется значение ключа, о котором ни сервер приложений, ни клиент не имеют ни малейшего понятия. Выполняете CDSTelephones.ApplyUpdates - ключ в нем NULL, и будет таким пока вы не засунете туда его значение. Откуда его брать - это проблема. Решить ее можно выбрав MAX ключа запросом после вставки родительской записи. И вообще сама идея Access и трех-звенка вызывает недоумение, имхо. У вас что, предполагается многопользовательский режим? Тогда в RemoteDateModule нужно организовывать синхронизацию для чтения-обновления данных с другими копиями RemoteDateModule. Сама Access не предполагает использования в таком режиме
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
24.10.2011, 19:26 | #5 | ||||
Пользователь
Регистрация: 23.10.2011
Сообщений: 12
|
Цитата:
Цитата:
Цитата:
Цитата:
P.S.: сама БД на всякий пожарный: http://ifolder.ru/26535743 пароль: 125 Последний раз редактировалось Hayaname; 24.10.2011 в 19:29. |
||||
24.10.2011, 20:41 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Насчет использования AdoTable на сервере приложений. В жизни его там не использовал и затрудняюсь сказать правомочно ли вообще его использование в таком качестве. Как минимум очевидный недостаток - тянет все записи из таблицы, пока их мало нет проблем, но когда много - проблемы. Что касается базы - ищите нормальную СУБД поддерживающую многопользовательский режим, триггера, пользовательские процедуры и функции, транзакции, без них нормальная эксплуатация - гроб с музыкой. Есть платные, есть бесплатные. Какую? Я в основном по MSSQL, очень мощная, но не бесплатная. Хотя какая-то версия сейчас бесплатно распространяется, про ее возможности не скажу. Достоточно много других СУБД, гуглите, что-то найдете.
Что касается автоинкриментных ключей - их использование при создании много-табличных документов не рационально, удобнее создавать уникальные ключи другими средствами, по крайней мере для таблиц-родителей, имхо. Я по началу тоже пытался их использовать, но набив шишки полностью отказался
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 24.10.2011 в 20:51. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с добавлением стиля | Tradua | JavaScript, Ajax | 1 | 21.07.2011 02:38 |
Добавление FieldDefs в ClientDataSet без потери записей | shock-in | Общие вопросы Delphi | 1 | 04.12.2009 01:18 |
Проблема с добавлением | ILOR | БД в Delphi | 11 | 21.05.2009 18:35 |
Проблема с добавлением столбца | Аццкий прогер | БД в Delphi | 3 | 27.02.2009 08:45 |
Проблема с добавлением в БД | VenMaster | БД в Delphi | 8 | 03.06.2008 21:02 |