Главная страница
    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.46 MB
Время: 0.011 c
3-71543
analyser
2003-08-28 10:25
2003.09.22
ADOConnection и UDL - ошибка открытия, если сначала прочитать...


14-71824
vopros
2003-09-02 10:16
2003.09.22
Из головы вылетело.


14-71857
Cyber Chaynik
2003-09-01 13:19
2003.09.22
Как я провёл лето (Сочинение)


14-71922
ruslan_as
2003-09-01 10:25
2003.09.22
Как послать сообщение (пароль) в окно открытия AcrobarReader-а


6-71787
rex
2003-07-21 13:04
2003.09.22
Ошибка при использовнии IntraWeb





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