Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.049 c
3-1121236824
Ирина
2005-07-13 10:40
2005.08.21
DBGrid


14-1122620079
Ёжик
2005-07-29 10:54
2005.08.21
Net use


4-1119763511
Гость2
2005-06-26 09:25
2005.08.21
Как недоаустить повторного открытия моего приложения?


14-1122362835
VID
2005-07-26 11:27
2005.08.21
Привет


1-1122575548
Андрей Молчанов
2005-07-28 22:32
2005.08.21
наследники





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский