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

Вниз

Access/ADO/Delphi7, Проблема с LookUp-полями   Найти похожие ветки 

 
Delphi7 ©   (2008-04-09 22:45) [0]

Есть таблица Сотрудники(employees):
id_employee
fio
fk_right

Есть таблица Права(rights):
id_right
title

Поле fk_right является внешним ключом и связывает таблицу Сотрудники с таблице Права.

В Delphi7 два tadoquery
query1:
select * from employees
query2:
select * from rights

Делаю в 1 lookup-поле:
name: right
component: QEmployeesAllright - это иде сама вставляет
type: string - пбавал и integer, и variant, результата одинаков
field type: lookup
key fields: fk_right
dataset: query2
lookup keys: id_right
result fields: title

Ситуация следующая:
- если я СНАЧАЛА выбираю что-то в lookup-поле, а потом заполняю остальные, то всё проходит без ошибок
- если я пытаюсь заполнить другие поля ДО того, как выбрал значение в lookup-поле, то после перехода к другой записи вылетает ошибка:
class: EOleException
message: Ошибка неизвестного типа
При этом данные сохраняются. Если закрыть приложение сразу после ошибки, то происходят жуткие тормоза у всех приложений секунд на 15 на моей машине.

Если удалить lookup-поле, всё работает замечательно.
В datasource обоих dataset"ов стоит авторедактирование, хотя даже если его убрать, результат не меняется.
Вопрос: что это и главное как с этим можно бороться?


 
Johnmen ©   (2008-04-10 09:25) [1]

Не под IDE ошибка есть?


 
Delphi7 ©   (2008-04-10 10:56) [2]

Не под IDE ошибка возникает, но другая:
"Не удаётся найти строку для обновления. Некоторые значения могли быть изменены со времени её последнего чтения"
Но и опять же странность:
- если lookup-поле не трогать, всё отлично;
- если СНАЧАЛА заполнить именно lookup-поле и попытаться перейти на другую запись вне зависимости от заполнения других полей - всё отлично;
- если СНАЧАЛА заполнить НЕ lookup-поле, а потом его и  попытаться перейти на другую запись - возникает указанная ошибка.


 
sniknik ©   (2008-04-10 11:31) [3]

> Некоторые значения могли быть изменены со времени её последнего чтения
вполне могли бы... т.к. у FOREIGN KEY может быть с UPDATE CASCADE ... т.е. при редактировании записи сам движок тебе значения связанных по внешнему ключу обновит. а на клиенте то значения остались прежние... а если ты не указал, что апдейт должен проходить по ключу (главному) то запрос на обновление(условие) собирается из всех значений записи. одно из которых в базе поменялось...

или, если там стоит дефаултное значение, на новую запись... тоже при создании записи (и пустом значении поля) дается дефаултное опять таки движком, про что клиентских набор данных не в курсе. естественно при заполненном lookup-поле вместо дефаултного попадает значение с клиентского и в дальнейшем они одинаковы.

короче для начала я бы убрал внешний ключ, проверил. и добавил бы обновление записей по ключу (для условия на обновление) - Properties["Update Criteria"].Value:= adCriteriaKey;
и рефреш данных при новой записи для всех значений, "подтянуть" дефаултные
Properties["Update Resync"  ].Value:= adResyncAll;
(по умолчанию только автоинкремент обновляется)


 
Delphi7 ©   (2008-04-10 12:14) [4]

sniknik, спасибо, уже почти всё.
после открытия dataset"a прописал:
QEmployeesAll.Properties["Update Criteria"].Value := adCriteriaKey;
QEmployeesAll.Properties["Update Resync"  ].Value:= adResyncAll;

в итоге не под IDE ошибка пропала, но в IDE всё по прежнему.
если это возможно, хотелось бы починить полностью.



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

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

Наверх





Память: 0.46 MB
Время: 0.035 c
2-1220798634
BioStaR
2008-09-07 18:43
2008.10.12
Мелкие вопросы


15-1219565619
Kostafey
2008-08-24 12:13
2008.10.12
С днем рождения ! 24 августа


2-1220874482
aaandy21
2008-09-08 15:48
2008.10.12
как связать написанную на Delphi DLL c VC?


2-1220529187
KirillRepin
2008-09-04 15:53
2008.10.12
помогите с DBComboBox


15-1218750606
Германн
2008-08-15 01:50
2008.10.12
ММП





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