![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
где ошибка ? [D7]
Golik © (2006-10-30 19:40:00)
datamodule3.ADOQuery1.SQL.Text := 'select * from Arenda where 1=1';
if CheckBox1.Checked =true then
datamodule3.ADOQuery1.SQL.Add('and комнат =:koll');
if CheckBox2.Checked =true then
datamodule3.ADOQuery1.SQL.Add('and комнат =:kol or комнат =:koll ');
datamodule3.ADOQuery1.Parameters.Clear;
datamodule3.ADOQuery1.Parameters.ParseSQL(datamodule3.ADOQuery1.SQL.Text,true);
if CheckBox1.Checked =true then
datamodule3.ADOQuery1.Parameters.ParamByName('koll').Value:='1';
if CheckBox2.Checked =true then
datamodule3.ADOQuery1.Parameters.ParamByName('kol').Value:='2';
datamodule3.ADOQuery1.open;
end;
выдает ошибку "неправильно определен объект Parametr , предоставленны несовместимые или неполные данные"
суть запроса такая:
если отмечен 1 чекбокс то запрос выдает 1-комнатные квартиры, если 2 то 2-х комнатные, а если оба сразу то должы выдаваться и 1-е и 2-е квартиры!
Golik (2006-10-30 23:03:00) [1]
var grpOpen:boolean;
begin
datamodule3.ADOQuery1.SQL.Text := 'select * from Arenda where 1=1';
grpOpen:=false;
if suiCheckBox11.Checked then
begin
if grpOpen then datamodule3.ADOQuery1.SQL.Add('or')
else datamodule3.ADOQuery1.SQL.Add('and (');
datamodule3.ADOQuery1.SQL.Add('комнат = 1');
grpOpen:=true;
end;
if suiCheckBox12.Checked then
begin
if grpOpen then datamodule3.ADOQuery1.SQL.Add('or')
else datamodule3.ADOQuery1.SQL.Add('and (');
datamodule3.ADOQuery1.SQL.Add('комнат = 2');
grpOpen:=true;
end;
if suiCheckBox13.Checked then
begin
if grpOpen then datamodule3.ADOQuery1.SQL.Add('or')
else datamodule3.ADOQuery1.SQL.Add('and (');
datamodule3.ADOQuery1.SQL.Add('комнат = 3');
grpOpen:=true;
end;
if suiCheckBox14.Checked then
begin
if grpOpen then datamodule3.ADOQuery1.SQL.Add('or')
else datamodule3.ADOQuery1.SQL.Add('and (');
datamodule3.ADOQuery1.SQL.Add('комнат = 4');
grpOpen:=true;
end;
if suiCheckBox15.Checked then
begin
if grpOpen then datamodule3.ADOQuery1.SQL.Add('or')
else datamodule3.ADOQuery1.SQL.Add('and (');
datamodule3.ADOQuery1.SQL.Add('комнат = 5');
grpOpen:=true;
end;
все работает!
но если добавить в этот код этот кусок
if suiCheckBox2.Checked then
begin
if grpOpen then datamodule3.ADOQuery1.SQL.Add('or')
else datamodule3.ADOQuery1.SQL.Add('and (');
datamodule3.ADOQuery1.SQL.Add('Raion = 1');
grpOpen:=true;
end;
то эффекта никакого нет ! почему ????
Anatoly Podgoretsky (2006-10-30 22:49:00) [2]datamodule3.ADOQuery1.SQL.Text := 'select * from Arenda where 1=1';
Это еще зачем?
datamodule3.ADOQuery1.SQL.Add('and комнат =: kolland комнат =: kolor комнат =: koll');
Вот это уже серьезнее, третьему параметру не присвоено значение.
Anatoly Podgoretsky (2006-10-30 22:46:00) [3]> Golik (30.10.2006 22:20:04) [4]
А можно ли строку считать числом, никто тогда не мешает записать Ю
Leonid Troyanovsky (2006-10-30 22:45:00) [4]
> Desdechado © (30.10.06 22:42) [5]
> но, думаю, клиенты не извращенцы, да и больше 9 комнат редко
> просят :)
Смешно будет, если спросят.
Я б не взялся объясняться.
--
Regards, LVT.
Desdechado (2006-10-30 22:42:00) [5]может, если число шестнадцатиричное
но, думаю, клиенты не извращенцы, да и больше 9 комнат редко просят :)
ЗЫ не на то обращаешь внимание
Golik (2006-10-30 22:20:00) [6]а что число комнат не может задаваться строкой в БД ?
MikePetrichenko (2006-10-30 20:41:00) [7]
> где ошибка ?
В ДНК
Desdechado (2006-10-30 20:34:00) [8]к сути вопроса не относится, но все же:
1. if CheckBox2.Checked =true - архаизм
2. Value:='2'; - неужто число комнат задается строкой в БД?
3. and комнат =:koll and комнат =:kol or комнат =:koll - это вообще-то 3 параметра, причем явно описанное тобой условие не сочетается с этим предикатом
Anatoly Podgoretsky (2006-10-30 20:14:00) [9]В какой строке?