Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Access violation при sql-запросе [D5, Paradox]


Страницы:   1 2

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?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо