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

Вниз

Добавление записи через многотабличный запрос (ADOQuery)   Найти похожие ветки 

 
Denis ©   (2004-06-02 10:14) [0]

Здравствуйте. Столкнулся с проблемой добавления записей в одну из связанных таблиц запроса. Некоторое время назад, я решал подобную задачу, используя свойства Unique Table и Update Resinc.
Сейчас попытка применить эту методику вызывает ошибку "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру". Что может вызывать такую ошибку?
Использую серверный курсор, keyset.
Запрос:
--
SELECT *  FROM PRIHODS inner join
nomrazmer on ((prihods.kodrazmer=nomrazmer.kodrazmer)
and (prihods.kodmat=nomrazmer.kodmat))
where PRIHODS.KODMAT = :"kodmat"
and prihods.kardsost=1
order by dbo.NumericFromString(namerazmer)
--
Запись нужно добавить в таблицу PRIHODs.
Собственно это объединение нужно для сортировки по типоразмеру изделий - функция dbo.NumericFromString() очищает значения namerazmer от мусора "ф", "L", "D"и прочего.


 
Ozone ©   (2004-06-02 10:49) [1]

Ну и делай запрос вида:

INSERT INTO Prihods VALUES (<*>)
SELECT <*> FROM <твой запрос>

Поля в VALUES и SELECT должны совпадать.


 
Denis ©   (2004-06-02 11:22) [2]

Ну и куда это повесить? Если ты подразумеваешь добавление записи через отдельную форму - это к сожалению не подходит, хоть и избавило бы от мучений. Завести что ли текстовое поле, куда перед Post записывать значение из справочника и сортировать по нему?


 
Denis ©   (2004-06-02 15:13) [3]

"Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру". Что может вызывать такую ошибку?


 
sniknik ©   (2004-06-02 15:45) [4]

в порядке предположения
> "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру".
нет уникального поля "ключа" по которому можно было бы организовать поиск, заначение поля которое выполняет эту роль изменилось и иесественно не существует в исходной таблице а порядковый номер в случае с твоей субд "неадекватен", для поиска непригоден.

p.s. в виду того что я не знаю как ты решал подобную задачу некоторое время назад, а также отличия нынешнего применения методики от прошлого, и собственно даже действий при которых эта ошибка проявляется и кода который при этом отрабатывает... думаю ценность предположения = 0.
и оно ничем не лутше другого предположения которое в простом отличии слов "Update Resync", но как можно утверждать? ты же скажеш что все делаеш правильно и только тут описался.


 
Denis ©   (2004-06-03 11:16) [5]

/sniknik ©   (02.06.04 15:45) [4]/
Ну будет тебе ворчать на отсутствие информации. :)

Ранее я поступал так:
Устанавливал клиентский курсор, далее :
tbPrihod.Properties["Update Criteria"].Value:= adCriteriaKey;
tbPrihod.Properties["Update Resync"].Value:= adResyncUpdates+adResyncInserts ;    ***********
tbPrihod.Properties["Unique Table"].Value:="PRIHODS";

Теперь я работаю с другой версией той же задачи. Ни запрос, ни настройки АДО не менял. Структура таблицы не менялась. Только для фильтрации вместо поисковых строк для группы, наименования и марки материала использую дерево. Но при изменении состояния дерева в запрос передаются те же параметры, что и ранее. А теперь ошибка возникает в помеченной строке.
По поводу ключа - это автоинкрементное поле.

Блин, ну не может же это на пустом месте возникнуть?

Кстати, если работать с НД только из PRIHODS, не объединяя ни с чем, не используя указанные выше свойства, то редактирование записей возможно только при клиентском курсоре.

Мыслится мне это не совсем в программе дело.


 
sniknik ©   (2004-06-03 15:10) [6]

tbPrihod.Properties["Update Criteria"].Value:= adCriteriaKey;
для обновлений используется ключевое поле.

> По поводу ключа - это автоинкрементное поле.
но признак ключа у него есть? или просто автоинкремент и все?
при использовании автоинкремента кроме того рекомендуется использование параметра adResyncAutoIncrement (иначе все вновь добавленные будут иметь значение 0 и именно с этип значением пойдут на обновление).


 
sniknik ©   (2004-06-03 15:16) [7]

> А теперь ошибка возникает в помеченной строке.
только заметил. т.е. даже свойства добавить не дает? поменяй курсор на клиентский по моему только с ним работает.


 
Denis ©   (2004-06-04 08:36) [8]

>но признак ключа у него есть? или просто автоинкремент и все?
В смысле, указано ли явно, что это ключ на сервере - да.

>только заметил. т.е. даже свойства добавить не дает? поменяй курсор на клиентский по моему только с ним работает

Менял уже. Молчит, проглатывает, но желаемого результата нет. Т.е. при удалении записи в PRIHODS удаляется связанная запись в справочнике.

Может я вообще не с той стороны взялся за решение?


 
sniknik ©   (2004-06-04 08:50) [9]

> Менял уже. Молчит, проглатывает, но желаемого результата нет.
т.е. ошибки на присвоении нет? значит так правильно (я про клиентский курсор), а вот результат... может надо поменять желания? ;о))

> Т.е. при удалении записи в PRIHODS удаляется связанная запись в справочнике.
а не должна? может срабатывает в обход твоих настроек, а может на удалиние тригер есть или внешний ключь с действием на онделите (хз. что в твоем базе может использоватся, и что это за база вообше).
а может неправильно применяеш
смотрим хелп
Update Resync Property—Dynamic (ADO)
Specifies whether the UpdateBatch method is followed by an implicit Resync method operation, and if so, the scope of that operation.


UpdateBatch - он работает при использовании параметра adLockBatchOptimistic. стоит?


 
YurikGL ©   (2004-06-04 09:14) [10]

Denis ©   (02.06.04 10:14)

ИМХО лучший вариант это - Ozone ©   (02.06.04 10:49) [1] Суешь в ADODataSet и говоришь execute (или exec точно не помню)


 
YurikGL ©   (2004-06-04 09:15) [11]

YurikGL ©   (04.06.04 09:14) [10]

После этого говоришь Refresh


 
Denis ©   (2004-06-04 11:21) [12]

2sniknik ©
>adLockBatchOptimistic. стоит?
Руками не ставил.Это LockType? Тогда стоит ltOptimistic.

2YurikGL ©
ExecSql

Согласен.Хочу просто понять в чем именно дело.


 
sniknik ©   (2004-06-04 16:11) [13]

> Руками не ставил.Это LockType? Тогда стоит ltOptimistic.
поставь ltBatchOptimistic, и для записи изменений используй UpdateBatch(-1).


 
Denis ©   (2004-06-04 16:47) [14]

Т.е. ltBatchOptimistic, насколько я знаю, включает пакетный режим обработки записей. А для записи изменений вызываем Table.UpdateBatch(arAll).

Спасибо, буду пробовать.



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

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

Наверх





Память: 0.49 MB
Время: 0.035 c
1-1087474309
jenbond
2004-06-17 16:11
2004.07.04
Помогите советом с ExpressQuantumGrid.


4-1083919701
Сашенька
2004-05-07 12:48
2004.07.04
ScreenShot


1-1087074705
Алекс А
2004-06-13 01:11
2004.07.04
Cледующий код дописывает к файлу перевод строки. Как от этого изб


4-1085480261
FireMan_Alexey
2004-05-25 14:17
2004.07.04
Desktop


14-1086979817
X9
2004-06-11 22:50
2004.07.04
Дрова на Lucent под Linux





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