![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при попытке присвоить значение 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 ...."