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

Вниз

Access violation при sql-запросе   Найти похожие ветки 

 
Lamer   (2003-05-16 12:41) [0]

Мастера.
Собсьвенно запрос
query1.SQL.Clear;
query1.SQL.add ("select distinct(ПОЛЕ) as CBfield from "base.db" where word="""+stimul+"""");
query1.execsql;
В таблице есть несколько полей. Запрос работает нормально по всем, кроме одного. Выдаёт "access violation". Почему это может быть.


 
Наталия ©   (2003-05-16 12:43) [1]

Может, query.open тебя спасёт?


 
Lamer   (2003-05-16 12:47) [2]

Нет. Не спасает. Да и не должен бы.
Дополнения (может поможет):
1) Read of adress 00000004
2) Остальные столбцы почти целиком заполнены, а в этом почти все ячейки пусты.


 
Anatoly Podgoretsky ©   (2003-05-16 12:51) [3]

у тебя же возвращается курсор, так какой к черту execsql
и что такое word и stimul


 
Lamer   (2003-05-16 12:58) [4]

Word - столбец, а stimul - переменная (string).
Смысл запроса: отобрать те записи (без повторов) из столбца "ПОЛЕ" в которых в содержимое столбца "WORD" равно переменной stimul.


 
Lamer   (2003-05-16 13:00) [5]

И почему, если подставить в "поле" имя любого другого столбца, то всё нормально и при execsql?


 
dash78 ©   (2003-05-16 13:02) [6]

2 Lamer
может стоит обратить внимание на использование параметров в запросе?
код уже приводился :((
когда ты интересовался вставкой переменной stimul


 
Наталия ©   (2003-05-16 13:03) [7]

Приведи полностью текст неработающего запроса с РЕАЛЬНЫМИ именами полей. И вместо execSQL надо однозначно использовать open. Смотри help.


 
Lamer   (2003-05-16 13:11) [8]

if radiobutton1.checked then
begin
combobox1.clear;
query1.SQL.Clear;
query1.SQL.add ("select distinct(Value) as CBfield from "base.db" where word="""+stimul+"""");
query1.execsql;
with Query1 do
begin
Close;
Open;
while not Eof do
begin
ComboBox1.Items.Add(FieldByName("CBfield").AsString);
Next;
end;
end;
end;
query1.sql.clear;
combobox1.itemindex:=0;
Form1.table1.first;
end;

Если вместо Value вставить любое другое (Tipe, Sex), то всё работает.
А стимул задаётся ранее при щелчке на одной из radiobutton(на их ONClick код: stimul:="слово";). Stimul определён точно.


 
Johnmen ©   (2003-05-16 13:17) [9]

АП рекомендовал тебе сменить ник на "chainik".
Ты этого не сделал... Похоже это правильное решение...
:)))


 
Anatoly Podgoretsky ©   (2003-05-16 13:20) [10]

Ну опять ExecSQL, что же ты не веришь такому количеству народу, у тебя запрос возвращает курсор.


 
Наталия ©   (2003-05-16 13:23) [11]

А называть поля "Value" - совершенно бесперспективно и,я бы даже сказала, безнравственно.


 
Соловьев ©   (2003-05-16 13:25) [12]


> query1.execsql;

заменить на
query1.Open;


> query1.SQL.add ("select distinct(Value) as CBfield from
> "base.db" where word="""+stimul+"""");

это лучше преобразовать так.
в Query1.SQL(дизайн-тайм):
select distinct(Value) as CBfield
from "base.db" where word=:word
а в коде проги написать:
with Query1 do
begin
Close;
ParamByName("word").AsString := stimul;
if not Prepared then Prepare;
Open;
end;


 
Chainik   (2003-05-16 13:30) [13]

Сейчас сменил на open. И всё то же.
"Access violation at address 4C5EE67E in module Idsql32.dll. Read of address 00000004".
Только стрелка теперь ставится не после
query1.SQL.add ("select distinct(Value) as CBfield from "base.db" where word="""+stimul+"""");
query1.execsql;
->with Query1 do, а после

Application.CreateForm(TForm7, Form7);
Application.Run;
->end.


 
Chainik   (2003-05-16 13:52) [14]

Переделал по "Соловьев ©". То же.
Ну почему это РАБОТАЕТ с другими полями?????????


 
Соловьев ©   (2003-05-16 13:58) [15]


> Переделал по "Соловьев ©". То же.

код.


 
Соловьев ©   (2003-05-16 14:00) [16]


> Переделал по "Соловьев ©". То же.

код.
select distinct(t1."Value") as CBfield
from "base.db" t1 where t1."word"=:word


 
KoluChi ©   (2003-05-16 14:03) [17]

Сделай код вот таким, запусти
if radiobutton1.checked then
begin
combobox1.clear;
with Query1 do
begin
Close();
SQL.Clear;
SQL.add ("select distinct(Value) as CBfield from "base.db" where word="""+stimul+"""");
Open;
end;

Если все пройдет нормально, добавь строки обратно.
Если нет - смотри может у тебя глючный обработчик на DataSet какой висит.


 
KoluChi ©   (2003-05-16 14:12) [18]

поле у тебя какой тип имеет?


 
Chainik   (2003-05-16 14:13) [19]

Теперь он пишет:
"Paramert "word" not found".
Вот как написано
select distinct(form1.table1."Value") as CBfield from "base.db" form1.table1 where form1.table1."word"=:word

а в коде:
with Query1 do
begin
Close;
ParamByName("word").AsString := stimul;
if not Prepared then Prepare;
Open;
end;


 
Соловьев ©   (2003-05-16 14:14) [20]


> form1.table1

тебе же написали t1


> Теперь он пишет:
> "Paramert "word" not found".

пробел после t1."word" = :word


 
Chainik   (2003-05-16 14:30) [21]

>Соловьев ©
Я уже скопировал отсюда весь ваш код. Вместе с "пробел после t1."word" = :word";
Реакция "Paramert "word" not found".

select distinct(t1."Value") as CBfield
from "base.db" t1 where t1."word" = :word

with Query1 do
begin
Close;
ParamByName("word").AsString := stimul;
if not Prepared then Prepare;
Open;
end;


 
Соловьев ©   (2003-05-16 14:42) [22]

кликни на свойсво Query.Params если параметра там нет - прпробуй поновой положить компоненту и переделать все. Надо добиться чтобы параметр там появился.


 
Chainik   (2003-05-16 14:50) [23]

Параметр там есть:
0-word.
Вы знаете, я переделал поле в таблице с Value на Value2(для эксперимента). Прощёл старый код c соответствующими изменениями.
Очевидно Наталия © права, дело в названии поля. Как это можно победить?


 
WarLord ©   (2003-05-16 18:44) [24]

Не надо использовать зарезервированные слова для названий полей - типа Value, Word, Date и пр.



Страницы: 1 вся ветка

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
14-13419
vidiv
2003-04-29 12:57
2003.06.05
как разобрать блок питания на котором не болтика, и


3-13006
Ш-К
2003-05-14 21:00
2003.06.05
Как проверить связь с сервером?


1-13318
HardClubber
2003-05-25 10:43
2003.06.05
Параметры к приложению


3-13060
BackStabber
2003-05-16 16:32
2003.06.05
Восстановление базы InterBase


3-13031
zaguzin
2003-05-15 14:14
2003.06.05
Потеря данных