Форум: "Базы";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизОшибка при попытке присвоить значение ADOQuery.SQL.Text??? Найти похожие ветки
← →
Aln (2005-07-12 10:10) [0]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
← →
Aln (2005-07-12 10:17) [1]Вылетает с сообщением: Project1.exe raised exception class EAccessViolation with message "Acess violation at adress ...."
← →
Anatoly Podgoretsky © (2005-07-12 10:18) [2]Здесь ошибки не возникает.
← →
Aln (2005-07-12 10:22) [3]В смысле у Вас не возникает?
Query1 содержит такой запрос (если, конечно, это надо):
Select ID, SCODE
from TI_IS
where C_U = "IIS_SERVER_SCRIPT"
Query2 подключен (ADOCOnnection) к той же базе, запрос формируется динамически. Ошибка возникает в момент, когда я пытаюсь присвоить значение SQL.Text
Что же делать?
← →
sniknik © (2005-07-12 11:30) [4]> //Ошибка возникает здесь! В чем может быть дело?
вот в этом
> String(ADOQuery1.DataSource.DataSet.FieldByName("SCODE").Value);
хотя и это может давать результат, только смысл этого труднопонимаемый и поэтому у тебя скорее всего логическая ошибка здесь.
> В смысле у Вас не возникает?
в смысле - в данном коде ошибок нет, синтаксическки правилен. и если чегото и неопределено (от чего AV и бывает) то это за рамками этого куска.
← →
Aln (2005-07-12 11:42) [5]Да, ошибка возникает при доступе к полю SCODE
> хотя и это может давать результат
а что еще мне может дать подобный результат? я просто других способов сделать то, что мне надо и я хочу, не знаю и не вижу
← →
Плохиш © (2005-07-12 11:44) [6]Неприсвоено ADOQuery1.DataSource.DataSet
← →
sniknik © (2005-07-12 12:00) [7]а если и присвоено (вся связка верная) то приведение NULL к строке, тоже может давать глюк (возможно, проверять не хочется).
в данных то уверен?
← →
Aln (2005-07-12 12:17) [8]
> в данных то уверен?
уверена :).
Но даже если предварительно проверять текущую запись на Null, всё равно возникает ошибка при первой же попытке обратиться (хотя б почитать) к значению поля из ADOQuery1:
if not VarIsNull(ADOQuery1.DataSource.DataSet.FieldByName("SCODE").Value) then... // Здесь вылетит
← →
Плохиш © (2005-07-12 12:30) [9]
> Aln (12.07.05 12:17) [8]
Как Вы думаете, для чего существует отладчик? или телепатов ждать будете?
← →
Aln (2005-07-12 12:44) [10]Ответ: нет, ждать не буду - сама справлюсь. можно закрывать топик
← →
isasa © (2005-07-12 14:16) [11]String(ADOQuery1.DataSource.DataSet.FieldByName("SCODE").Value) =>
ADOQuery1.DataSource.DataSet.FieldByName("SCODE").AsString
← →
ANB © (2005-07-12 14:40) [12]ADOQuery1.DataSource.DataSet.FieldByName("SCODE").AsString
=>
ADOQuery1.FieldByName("SCODE").AsString
А зачем вообще так длинно ?
← →
Danilka © (2005-07-12 14:43) [13]Если в ADOQuery1 нет ниодной записи, то тоже может вылетать с AV
← →
sniknik © (2005-07-12 14:52) [14]> А зачем вообще так длинно ?
это не одно и тоже, посмотри внимательнее.
изначально берется запись из связаной по мастер/детайл таблици(датасета), а не "в окружную" из самой себя (как ты "перевел").
← →
ANB © (2005-07-12 17:02) [15]
> берется запись из связаной по мастер/детайл таблици(датасета),
>
глупый вопрос - а что в мастер дейтасете значение этого поля будет другим ?
← →
sniknik © (2005-07-12 17:45) [16]а почему нет? там даже с десяток полей которых в этой нет может быть. связь к примеру идет по полю ID связаны ADOQuery1 с ADOQuery3 берется значение поля SCODE (из рекордсета 3, в первом такого поля например нету) и делается запрос в ADOQuery2.
почему тогда не напрямую с ADOQuery3 значения берутся? х.з. может у него несколько рекордсетов и на месте третьего может быть как 8-й так и 18-й, и чтобы не делать условий узнавать какой рекордсет в данный момент подключен мастером, значение и берется по связке...
вполне может быть так. чужая логика мне недоступна, но то что так можно я догадываюсь ;о)), и не пытаюсь домысливать то чего нет, и давать ответы на то как могло бы быть, если бы...
(в твоем варианте (догадка о твоей догадке ;о)) ты решил что связь по SCODE. так? (что неоглашено и неизвестно). да, так будет одно и тоже)
тут же нет даже уверенности, что связь есть, неизвестно чего автор хочет, есть только код в котором сделано так (значит это зачемто нужно?).
← →
DiamondShark © (2005-07-12 18:19) [17]
> ADOQuery1.DataSource.DataSet.FieldByName("ID").Value
А зачем тут обращение к DataSource.DataSet?
← →
Val © (2005-07-12 18:39) [18]>[17] DiamondShark © (12.07.05 18:19)
Это обращение к мастеру, к которому привязан ADOQuery1 как дитейл. Вроде все в порядке, что смущает/неверно?
← →
DiamondShark © (2005-07-12 19:09) [19]
> Вроде все в порядке, что смущает/неверно?
Вот что смущает:
> 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.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.031 c