![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Access violation при sql-запросе [D5, Paradox]
Lamer © (2003-05-16 12:41:00)Мастера.
Собсьвенно запрос
query1.SQL.Clear;
query1.SQL.add ("select distinct(ПОЛЕ) as CBfield from "base.db" where word="""+stimul+"""");
query1.execsql;
В таблице есть несколько полей. Запрос работает нормально по всем, кроме одного. Выдаёт "access violation". Почему это может быть.
WarLord (2003-05-16 18:44:00) [1]Не надо использовать зарезервированные слова для названий полей - типа Value, Word, Date и пр.
Chainik (2003-05-16 14:50:00) [2]Параметр там есть:
0-word.
Вы знаете, я переделал поле в таблице с Value на Value2(для эксперимента). Прощёл старый код c соответствующими изменениями.
Очевидно Наталия © права, дело в названии поля. Как это можно победить?
Соловьев (2003-05-16 14:42:00) [3]кликни на свойсво Query.Params если параметра там нет - прпробуй поновой положить компоненту и переделать все. Надо добиться чтобы параметр там появился.
Chainik (2003-05-16 14:30:00) [4]>Соловьев ©
Я уже скопировал отсюда весь ваш код. Вместе с "пробел после 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:14:00) [5]
> form1.table1
тебе же написали t1
> Теперь он пишет:
> "Paramert "word" not found".
пробел после t1."word" = :word
Chainik (2003-05-16 14:13:00) [6]Теперь он пишет:
"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;
KoluChi (2003-05-16 14:12:00) [7]поле у тебя какой тип имеет?
KoluChi (2003-05-16 14:03:00) [8]Сделай код вот таким, запусти
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 какой висит.
Соловьев (2003-05-16 14:00:00) [9]
> Переделал по "Соловьев ©". То же.
код.
select distinct(t1."Value") as CBfield
from "base.db" t1 where t1."word"=:word
Соловьев (2003-05-16 13:58:00) [10]
> Переделал по "Соловьев ©". То же.
код.
Chainik (2003-05-16 13:52:00) [11]Переделал по "Соловьев ©". То же.
Ну почему это РАБОТАЕТ с другими полями?????????
Chainik (2003-05-16 13:30:00) [12]Сейчас сменил на 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.
Соловьев (2003-05-16 13:25:00) [13]
> 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;
Наталия (2003-05-16 13:23:00) [14]А называть поля "Value" - совершенно бесперспективно и,я бы даже сказала, безнравственно.
Anatoly Podgoretsky (2003-05-16 13:20:00) [15]Ну опять ExecSQL, что же ты не веришь такому количеству народу, у тебя запрос возвращает курсор.
Johnmen (2003-05-16 13:17:00) [16]АП рекомендовал тебе сменить ник на "chainik".
Ты этого не сделал... Похоже это правильное решение...
:)))
Lamer (2003-05-16 13:11:00) [17]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 определён точно.
Наталия (2003-05-16 13:03:00) [18]Приведи полностью текст неработающего запроса с РЕАЛЬНЫМИ именами полей. И вместо execSQL надо однозначно использовать open. Смотри help.
dash78 (2003-05-16 13:02:00) [19]2 Lamer
может стоит обратить внимание на использование параметров в запросе?
код уже приводился :((
когда ты интересовался вставкой переменной stimul
Lamer (2003-05-16 13:00:00) [20]И почему, если подставить в "поле" имя любого другого столбца, то всё нормально и при execsql?