Есть у меня программка одна, еще на delphi, есть там компонент TADOQuery. Иногда с ним происходят странные глюки (ну,как мне кажется). Если его мышетыкать на форму, а потом вызывать этот query предположим в цикле несколько раз, то у него возникают странные проблемы, после первого вызова он убивается почему-то, и соответственно при втором вызове ругается - access violation. Если создавать TADOQuery руками, то таких проблем нет.
Объясните, или я что-то не понимаю, или это глюки?
Примечание:
а что, кроме минусующей школоты в этом вопросе нормальных людей не было?
Примечание:
crimaniak (Alexey Kulentsov)
очевидно. да только это не так. То есть есть форма, скажем Main на ней есть объект q - TADOQuery. предположим мы делаем простейший цикл
for i=1 to 3 do
begin
q.Close;
q.Sql.Text:= 'select блабла from бла where Sum'+ i + '=10';
q.Open;
end;
q.Close;
так вот, этот замечательный цикл 2 раза отработает, а на третьем скажет при q.Close - access violation. при этом, замечу, что q более нигде не используется, форма с компонентом не закрывается.
при этом работает:
q:=TADOQuery.Create;
for i=1 to 3 do
begin
q.Close;
q.Sql.Text:= 'select блабла from бла where Sum'+ i + '=10';
q.Open;
end;
q.Close;
Примечание:
Werewolf_ (Alex Werewolf)
вы невнимательно прочитали мой вопрос и решили что я не знаю что такое access violation. я отлично понимаю что там access violation и по какой причине. я не понимаю почему уничтожается TADOQuery ровно на третьем шаге цикла. и почему если вместо компонента на форме прописать создание TADOQuery руками, то все работает.
Примечание:
Werewolf_ (Alex Werewolf)
отвечать на ваши вопросы я не вижу смысла, потому что я знаю что объект уничтожается, я знаю на какой строке access violation, я знаю почему он там. я не знаю только одно, почему уничтожился объект.
>P.S.: на счет школоты:
>1. не надо всех судить по себе
мимо. мне 23.
Примечание:
то что сейчас он выпадает на q.Close не значит что q=nil
я проверяла. q=nil
Примечание:
superhuman
а на отработку того же самого селекта во втором случае не нужно время? как он волшебным образом успевает выполняться в отличие от точно такого же в первом? Кроме того я никогда бы не подумала что то, что селект еще выполняется, означает что объекта tadoquery не существует.
Ок, предложите вариант выполнить много однотипных запросов по полям с именами A1, A2, A3, A4 (ну что поделать, БД спроектирована некорректно несколько) без использования цикла, причем не нужно предлагать это все слепить в один запрос.
Примечание:
superhuman
два вопроса:
1. почему тогда во втором случае при том же самом цикле тот же самый запрос выполняется?
2. если объект заблокирован то, он равен nil?
Примечание:
superhuman
1. там те же методы в тех же местах и абсолютно тот же самый запрос, 1 в 1. Open и Close там тоже есть.
2. я понимаю что nil это нулевой указатель. раз q=nil значит q в данный момент не существует. почему?
может быть и разумно написать более 60 запросов руками, а написать простыню из 60 запросов подряд, но мне это почему-то не кажется слишком хорошим выходом..
Примечание:
superhuman
у меня эта чертова прога так на 2/3 написана, ни в одном месте больше нет. Мне вообще кажется несколько странным факт, что он то есть, то нет в зависимости от того как создавать объект.
А и еще, делать вложенные запросы, усложнять существующие мне нельзя, по многим причинам.
Примечание:
вобщем я вижу что дело это пустое, учить как надо делать меня продолжат, а ответа на поставленный вопрос я так и не получу. за сим закрываю вопрос
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.