Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Про ADOQuery |
Автор: Plavozont 8.8.2008, 07:00 |
У меня такой ситуэйшн: я беру ADOQuery, подцепленый к базе, делаю ему append, заполняю поля значениями(программным путём) и делаю post. Кажется всё элементарно, всё что мне нужно - это чтобы во время post'а срабатывала какая-нибудь процедура-обработчик события OnPostError, OnChange а лучше всего OnValidate! Как её назначить ? То, что я нашёл поиском в яндексе неработает, а в справочной системе Delphi считают, что тут всё так очевидно, что и объяснять не стоит... А вообще проблема в том, что я из одной аксэссовской базы с помощью ADOQuery1 перегоняю данные в другую базу с помощью ADOQuery2, и в некоторых таблицах базы есть поля, обязательные для заполнения(свойство Required которых равно true). И вот то есть когда проверяешь чему равно ADOQuery1.Fields[n].Required оно говорит FALSE, не обязательное значит, а когда делаешь POST он ругается, допустим что поле "адрес.город" не может содержать значение Null так как свойство Required имеет значение TRUE... С начала думал он просто бредит, а потом в справке прочитал: If a field is created with the Fields editor, this property is set based on the underlying table. Applications that set Required to true for fields that must have values (for example, a password or part number), but for which the underlying table does not require the field, must write an OnValidate event handler to enforce the property. Слабый перевод: Если поле создано редактором полей, то это свойство назначено на основе таблицы имеющей больший приоритет. В приложениях, которые устанавливают свойству Required значение true для полей, которые должны содержать хоть какое-то значение(на пример, поле с паролем или с "шифром компонента"), но для которых более приоритетная таблица не требует поле, нужно прописывать событие OnValidate чтобы принудительнуть это свойство. Думаю они не ведали что писали, только я теперь ошибочно полагаю, что если проверить чему равно свойство Required из процедуры-обработчика события OnValidate, он мне наконец-то скажет правду, но я не умею назначать процедуры-обработчики... И ещё маленький вопрос... если можно... чтобы шариться по таблицам базы через ADOQuery (а у меня к нему подцеплен DBGrid) я сначала выполняю SQL запрос, который загружает отдельную таблицу из базы в DBGrid а потом через Fields[n] и через RecNo шарюсь по содержимому таблицы. Только вот SQL запрос выполняется долго, и бесконечное переключение между таблицами занимает целую вечность, можно ли как-то осуществлять доступ к таблицам проще, например просто брать и писать: "ADOQuery1.Tables[m].Fields[n]..."... |