Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при попытке присвоить значение ADOQuery.SQL.Text??? [D7, MySQL]


Aln ©   (2005-07-12 10:10:00) 

for i := 1 to ADOQuery1.RecordCount do
 begin
   ADOQuery2.Close;
   ADOQuery2.SQL.Clear;
   ADOQuery2.SQL.Text := 'select * from TI_VC where SCODE = ' + String(ADOQuery1.DataSource.DataSet.FieldByName('SCODE').Value); //Ошибка возникает здесь! В чем может быть дело?
   ADOQuery2.Open;
   if ADOQuery2.RecordCount = 0 then
     begin
       ADOQuery2.Close;
       ADOQuery2.SQL.Text := 'insert into TI_VC (IDI, SCODE) values (' + ADOQuery1.DataSource.DataSet.FieldByName('ID').Value + ', ' + ADOQuery1.DataSource.DataSet.FieldByName('SCODE').Value + ')';
       ADOQuery2.ExecSQL
     end
   else ADOQuery1.Next
 end


DiamondShark   (2005-07-12 19:09:00) [1]


> Вроде все в порядке, что смущает/неверно?

Вот что смущает:


> Aln   (12.07.05 10:22) [3]
> В смысле у Вас не возникает?
> Query1 содержит такой запрос (если, конечно, это надо):
> Select ID, SCODE
> from TI_IS
> where C_U = 'IIS_SERVER_SCRIPT'
> Query2 подключен (ADOCOnnection) к той же базе, запрос формируется
> динамически. Ошибка возникает в момент, когда я пытаюсь
> присвоить значение SQL.Text
> Что же делать?


Этот запрос ни к какому мастеру подключённым быть не мойшет.
И AV вылетает, скорее всего, именно потому, что ADOQuery1.DataSource = nil.


Val   (2005-07-12 18:39:00) [2]

>[17] DiamondShark ©   (12.07.05 18:19)
Это обращение к мастеру, к которому привязан ADOQuery1 как дитейл. Вроде все в порядке, что смущает/неверно?


DiamondShark   (2005-07-12 18:19:00) [3]


> ADOQuery1.DataSource.DataSet.FieldByName('ID').Value

А зачем тут обращение к DataSource.DataSet?


sniknik   (2005-07-12 17:45:00) [4]

а почему нет? там даже с десяток полей которых в этой нет может быть. связь к примеруидет по полю ID связаны ADOQuery1 с ADOQuery3 берется значение поля SCODE (из рекордсета 3, в первом такого поля например нету) и делается запрос в ADOQuery2.
почему тогда не напрямую с ADOQuery3 значения берутся? х.з. может у него несколько рекордсетов и на месте третьего может быть как 8-й так и 18-й, и чтобы не делать условий узнавать какой рекордсет в данный момент подключен мастером, значение и берется по связке...

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

тут же нет даже уверенности, что связь есть, неизвестно чего автор хочет, есть только код в котором сделано так (значит это зачемто нужно?).


ANB   (2005-07-12 17:02:00) [5]


> берется запись из связаной по мастер/детайл таблици(датасета),
>
глупый вопрос - а что в мастер дейтасете значение этого поля будет другим ?


sniknik   (2005-07-12 14:52:00) [6]

> А зачем вообще так длинно ?
это не одно и тоже, посмотри внимательнее.
изначально берется запись из связаной по мастер/детайл таблици(датасета), а не "в окружную" из самой себя (как ты "перевел").


Danilka   (2005-07-12 14:43:00) [7]

Если в ADOQuery1 нет ниодной записи, то тоже может вылетать с AV


ANB   (2005-07-12 14:40:00) [8]

ADOQuery1.DataSource.DataSet.FieldByName('SCODE').AsString
=>
ADOQuery1.FieldByName('SCODE').AsString

А зачем вообще так длинно ?


isasa   (2005-07-12 14:16:00) [9]

String(ADOQuery1.DataSource.DataSet.FieldByName('SCODE').Value) =>
ADOQuery1.DataSource.DataSet.FieldByName('SCODE').AsString


Aln   (2005-07-12 12:44:00) [10]

Ответ: нет, ждать не буду - сама справлюсь. можно закрывать топик


Плохиш   (2005-07-12 12:30:00) [11]


> Aln   (12.07.05 12:17) [8]

Как Вы думаете, для чего существует отладчик? или телепатов ждать будете?


Aln   (2005-07-12 12:17:00) [12]


> в данных то уверен?

уверена :).
Но даже если предварительно проверять текущую запись на Null, всё равно возникает ошибка при первой же попытке обратиться (хотя б почитать) к значению поля из ADOQuery1:
if not VarIsNull(ADOQuery1.DataSource.DataSet.FieldByName('SCODE').Value) then... // Здесь вылетит


sniknik   (2005-07-12 12:00:00) [13]

а если и присвоено (вся связка верная) то приведение NULL к строке, тоже может давать глюк (возможно, проверять не хочется).
в данных то уверен?


Плохиш   (2005-07-12 11:44:00) [14]

Неприсвоено ADOQuery1.DataSource.DataSet


Aln   (2005-07-12 11:42:00) [15]

Да, ошибка возникает при доступе к полю SCODE

> хотя и это может давать результат

а что еще мне может дать подобный результат? я просто других способов сделать то, что мне надо и я хочу, не знаю и не вижу


sniknik   (2005-07-12 11:30:00) [16]

> //Ошибка возникает здесь! В чем может быть дело?
вот в этом
> String(ADOQuery1.DataSource.DataSet.FieldByName('SCODE').Value);
хотя и это может давать результат, только смысл этого труднопонимаемый и поэтому у тебя скорее всего логическая ошибка здесь.

> В смысле у Вас не возникает?
в смысле - в данном коде ошибок нет, синтаксическки правилен. и если чегото и неопределено (от чего AV и бывает) то это за рамками этого куска.


Aln   (2005-07-12 10:22:00) [17]

В смысле у Вас не возникает?
Query1 содержит такой запрос (если, конечно, это надо):
Select ID, SCODE
from TI_IS
where C_U = 'IIS_SERVER_SCRIPT'
Query2 подключен (ADOCOnnection) к той же базе, запрос формируется динамически. Ошибка возникает в момент, когда я пытаюсь присвоить значение SQL.Text
Что же делать?


Anatoly Podgoretsky   (2005-07-12 10:18:00) [18]

Здесь ошибки не возникает.


Aln   (2005-07-12 10:17:00) [19]

Вылетает с сообщением: Project1.exe raised exception class EAccessViolation with message "Acess violation at adress ...."


Наверх

Титульная страница Поиск, карта сайта Написать письмо