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

Вниз

Delphi 7, Insert записи в подчиненную таблицу Аccess, через ADO   Найти похожие ветки 

 
bernard   (2003-08-28 16:10) [0]

Господа – есть проблема. Из Delphi 7 через ADO подключаюсь к Ассеss 2000. В Ассеss создал две таблицы: balans (id, row_name) и balans_amount (id, balans_id, begin_value). Таблицы создал руками в Access. Таблица balans является справочной и не изменятся. Первичные ключи в таблицах определены – id (счетчики, пробовал и просто числовые поля с подстановкой нужных значений). Главной является Balans (в ней поле row_name содержит название строки отчета, само же значение строки должно помещаться в balans_amount.begin_value). В balans_amount поле balans_id должно содержать ссылку на balans.id (зафиксировано в схеме данных Access). Скрипт выглядит так :
SELECT balans.id, balans.row_name, balans_amount.id, balans_amount.balans_id, balans_amount.begin_value
FROM balans LEFT JOIN balans_amount ON balans.id = balans_amount.balans_id;
Суть вопроса. Если в Access создать этот запрос и начать редактировать поле balans_amount.begin_value то проблем не возникает. Для записей которых не существует в balans_amount Access нормально подставляет значение в balans_amount.balans_id с указанием на balans.id и инсертит запись в balans_amount.
Если тот же трюк сделать из Delphi7 через TADODataset то возникает ошибка: Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения. Понятно что ошибка возникает на уровне ADO. На сколько я понял запись изменяет сам Access прописывая значение в balans_amount.balans_id, т.к. других полей с дефолтными значеними я не использую. Помогите, как быть?


 
SiJack   (2003-08-28 16:18) [1]

http://www.delphimaster.ru/cgi-bin/links.pl?get=40


 
SiJack   (2003-08-28 16:20) [2]

извиняюсь
http://delphi.vitpc.com/helloworld/ado02.htm


 
bernard   (2003-08-28 17:14) [3]

Прочел. Вот что пробовал:
DST.Properties["Update Resync"].Value := adResyncInserts (или adResyncAll);
DST.Properties["Unique Table"].Value:="balans_amount";
DST.Properties["Resync Command"].Value:=
"SELECT balans.id, balans.row_name, balans_amount.id as balans_amount_id, balans_amount.balans_id, balans_amount.begin_value "+
"FROM balans LEFT JOIN balans_amount ON balans.id = balans_amount.balans_id where balans_amount.balans_id = ?"
Результат тот же. Ошибка - значения изменены с момента последнего чтения.


 
ItMan   (2003-08-28 18:35) [4]

Читай еще раз.кодовое слов: adCriteriaKey
Суть проблемы:
При изменении выполняется запрос: Update ля ля ля where Name=1.
Но если кто-то изменил значение, то запрос приведет 0 результатов. Поэтому лучше всего производить поиск по ключевому полю.

ОNOpen:
DST.Properties["Update Criteria"].Value = adCriteriaKey.


 
bernard   (2003-08-29 10:23) [5]

DST.Properties["Update Criteria"].Value := adCriteriaKey тоже не лечит. Та же ошибка.
С другой стороны если в гриде создать новую запись и указать руками значения только для balans_amount.id, balans_amount.balans_id, balans_amount.begin_value, где balans_amount.balans_id = id существующей записи в balans, то инсерт проходит без проблем.
Господа, объясните, что происходит. Может кто-нибудь смоделировать подобное у себя? При необходимости могу выслать неработающий пример :(



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

Форум: "Базы";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.012 c
14-71933
Universe
2003-09-02 17:48
2003.09.22
Предлагаю каждую фишку написанную вносить сюда может так проще


1-71605
Namor
2003-09-09 15:50
2003.09.22
Уважаемый All, как определить размерность двумерного массива?


6-71811
Sasha NT
2003-07-21 01:43
2003.09.22
Програмный разрыв соединения?


14-71946
Dmitriy O.
2003-09-02 16:28
2003.09.22
Как можно получить палитру 256 цветов Виндовс


1-71714
alpine
2003-09-09 20:19
2003.09.22
Как сохранить HTML загруженную с помощью TWebBrowser ?





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