Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Ошибка при попытке присвоить значение 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.042 c
14-1122718012
Ajax
2005-07-30 14:06
2005.08.21
Экспоненциальное усреднение


1-1122892737
Proz2
2005-08-01 14:38
2005.08.21
Результат исполнения Action из TActionList


1-1122930722
Asteroid
2005-08-02 01:12
2005.08.21
Крыша едет с динмаическими массивами...


3-1120804272
Goga
2005-07-08 10:31
2005.08.21
Открытие TADODataSet внутри TService


14-1122751064
Piter
2005-07-30 23:17
2005.08.21
Ностальгия :) А правда, все это было?