Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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]..."...

Автор: morpheyushka 8.8.2008, 11:17
Цитата(Plavozont @  8.8.2008,  07:00 Найти цитируемый пост)
И ещё маленький вопрос... если можно... чтобы шариться по таблицам базы через ADOQuery (а у меня к нему подцеплен DBGrid) я сначала выполняю SQL запрос, который загружает отдельную таблицу из базы в DBGrid а потом через Fields[n] и через RecNo шарюсь по содержимому таблицы. Только вот SQL запрос выполняется долго, и бесконечное переключение между таблицами занимает целую вечность, можно ли как-то осуществлять доступ к таблицам проще, например просто брать и писать: "ADOQuery1.Tables[m].Fields[n]..."... 


Делай выборку из таблицы по условию, а не гоняй все данные туда-сюда!
А вобще, не знаю как в аксэссе, в MSQL сервере можно создавать такие штуки, как вьювы (Views). С помощью них можно вытягивать данные из нескольких таблиц, причем не все, а те, которые тебе необходимы. Ну а дальше, путем условий и сортировок можно получить только нужные данные. И нечего гонять целые таблицы! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)