Главная страница
    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.058 c
3-71485
Engel
2003-09-01 19:33
2003.09.22
Компоненты для переноса таблицы


14-71853
Noname_
2003-09-01 10:13
2003.09.22
DHCP сервер на Pro


1-71667
Man
2003-09-10 16:34
2003.09.22
как програмно определить к какому винчестеру относится диск


1-71674
BanderLog
2003-09-11 14:07
2003.09.22
Как в RichEdite обработать двойное нажатие мыши?


3-71509
Eagle Owl
2003-08-30 00:28
2003.09.22
Добавление поля к таблице





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