Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
14-13467
Анат
2003-05-18 13:01
2003.06.05
Графический редактор.


3-13072
Nikos
2003-05-17 13:05
2003.06.05
Как программным путем создать алиас?


1-13209
Edelweiss
2003-05-27 11:05
2003.06.05
Oсновная форма создает окно. Как сделать, чтобы это окно было


1-13127
KA-87
2003-05-25 18:03
2003.06.05
Мне надо убить MessageBox....


6-13345
Puzzle
2003-04-02 12:32
2003.06.05
Как определить, что Dial-up соединение уже установлено?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский