Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
ВнизДинамический запрос к таблице acess Найти похожие ветки
← →
Leons (2004-08-09 13:55) [0]Не работает динамический запрос. Хотя вроде все верно. Пишет неправильно определен объект Параметр... Как его тогда правильно определить? Где и что поставить?
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
k:=Edit1.Text;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM Kods where like:=k");
Memo1.Lines:=ADOQuery1.SQL;
ADOQuery1.Active:=true;
end;
← →
Sergey13 © (2004-08-09 14:01) [1]LIKE :k
И :к определить перед выполнением запроса.
← →
Leons (2004-08-09 14:02) [2]А где нужно и как определить k
← →
Sergey13 © (2004-08-09 14:04) [3]А что такое :k? Переменная? Чему равна и какого типа?
← →
Соловьев © (2004-08-09 14:07) [4]TADOQuery.Parameters+F1
← →
Leons (2004-08-09 14:13) [5]TADOQuery.Parameters+F1 Не нашел блин ни чего.
k - переменная. Тип - string. Присваивается ей значение edit
← →
Leons (2004-08-09 14:16) [6]Параметр сделал в TADOQuery, назвал kod, тип - ftString, но как и куда в мой код вставить?
← →
Соловьев © (2004-08-09 14:19) [7]TADOQuery+F1
->Using ADO datasets->Using TADODataSet->Using parameters in queries
← →
46_55_41_44 © (2004-08-09 14:21) [8]Сделай вот так:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
k:=Edit1.Text;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM Kods where Поле1 like:k");
ADOQuery1.Parameters.ParamValues["K"] := k;
ADOQuery1.Active:=true;
end;
С помощью этого запроса ты получишь все записи в таблице Kods, поле Поле1 которого похоже на к (Edit1.Text)...
Да кстати не путать К, которое ты ввел в Edit1, с К как параметр. Это две разные вещи!!!
← →
Sergey13 © (2004-08-09 14:21) [9]2[5] Leons (09.08.04 14:13)
>k - переменная. Тип - string. Присваивается ей значение edit
к - должна быть переменной ЗАПРОСА (она же параметр) а не локальной переменной твоей программы. Запрос выполняется на сервере и о твоих переменных не знает.
>Хотя вроде все верно.
Все не верно. 8-)
← →
Sergey13 © (2004-08-09 14:26) [10]2[8] 46_55_41_44 © (09.08.04 14:21)
>С помощью этого запроса ты получишь все записи в таблице Kods, поле Поле1 которого похоже на к (Edit1.Text)...
Вряд ли? Скорее точно равно.
← →
46_55_41_44 © (2004-08-09 14:28) [11]
> Вряд ли? Скорее точно равно.
нет... именно похоже )))
← →
Leons (2004-08-09 14:29) [12]46_55_41_44.
Сделал, но ругается типа параметр К не определен.
← →
Соловьев © (2004-08-09 14:30) [13]
> нет... именно похоже )))
точно.
> Сделал, но ругается типа параметр К не определен.
между like и :k есть пробел?
← →
Leons (2004-08-09 14:32) [14]Пробел есть, но ругается.
← →
46_55_41_44 © (2004-08-09 14:33) [15]Слушай допиши ВОТ это:
ADOQuery1.Parameters.ParamValues["K"] := k;
Я же тебе написал... А "к" не должна быть пустой строкой!!!!
← →
Соловьев © (2004-08-09 14:33) [16]кликни в инспекторе обьектов ADOQuery в поле Parameters - есть параметр k?
← →
Sergey13 © (2004-08-09 14:33) [17]211] 46_55_41_44 © (09.08.04 14:28)
>нет... именно похоже )))
А мне кажется для "похоже" не хватает некоторых символов. Хотя, с аксес я не работал, но сумнительно чтой-то.
← →
46_55_41_44 © (2004-08-09 14:35) [18]
> Соловьев © (09.08.04 14:33) [16]
> кликни в инспекторе обьектов ADOQuery в поле Parameters
> - есть параметр k?
Он же программно добавляет этот параметр!!! параметр не может там быть!!!
← →
Leons (2004-08-09 14:36) [19]ADOQuery1.Parameters.ParamValues["K"] := k;
К - есть в Parameters, все равно ругается.
Вот весь код на последний момент
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
k:string;
begin
k:=Edit1.Text;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.Parameters.ParamValues["K"] := k;
ADOQuery1.SQL.Add("SELECT * FROM Kods where Kod like :k");
Memo1.Lines:=ADOQuery1.SQL;
ADOQuery1.Active:=true;
end;
← →
Соловьев © (2004-08-09 14:37) [20]
> ADOQuery1.Parameters.ParamValues["K"] := k;
> ADOQuery1.SQL.Add("SELECT * FROM Kods where Kod like :k");
поменять местами
> Он же программно добавляет этот параметр!!! параметр не
> может там быть!!!
да, это я прогнал)
← →
Соловьев © (2004-08-09 14:38) [21]
> А мне кажется для "похоже" не хватает некоторых символов.
> Хотя, с аксес я не работал, но сумнительно чтой-то.
для того чтобы искать в строке на "похоже" надо добавлять символы % или * в зависимости от провайдера
← →
Leons (2004-08-09 14:49) [22]Все мои манипуляции с параметрами и сменами мест строк кода ни чего не дали. Все равно пишет - параметр К не найден.
← →
Sergey13 © (2004-08-09 14:53) [23]2[21] Соловьев © (09.08.04 14:38)
И я про то-же.
2[22] Leons (09.08.04 14:49)
А не надо в АДО (я не работал с ним) делать нечто вроде Add(Delete)Parameter? В ДОА например надо.
← →
Соловьев © (2004-08-09 14:53) [24]procedure TForm1.SpeedButton1Click(Sender: TObject);
var
k:string;
begin
k:=Edit1.Text;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM Kods where Kod like :k");
ADOQuery1.Parameters.ParamByName("K").Value := Edit1.Text;
Memo1.Lines:=ADOQuery1.SQL;
ADOQuery1.Active:=true;
end;
← →
46_55_41_44 © (2004-08-09 15:02) [25]Какого типа у тебя поле Kod?
← →
Leons (2004-08-09 15:10) [26]Тип поля - текстовый.
← →
46_55_41_44 © (2004-08-09 15:18) [27]попробуй вот так:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
k:string;
begin
k:=Edit1.Text;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM Kods where Kod like :k");
ADOQuery1.Parameters.ParamByName("K").Value := #39 + Edit1.Text + #39;
Memo1.Lines:=ADOQuery1.SQL;
ADOQuery1.Active:=true;
end;
← →
Leons (2004-08-09 15:27) [28]Теперь не ругается, но результат выборки отсутствует.
← →
46_55_41_44 © (2004-08-09 15:30) [29]Так... вот сдвинулись с места!
Просто набери такое значение в Edit1.Text, на которое хоть что-то похоже в поле! ))))
А потом вместо:
ADOQuery1.Parameters.ParamByName("K").Value := #39 + Edit1.Text + #39;
Сделай
ADOQuery1.Parameters.ParamByName("K").Value := #39 + "%" + Edit1.Text + "%" + #39;
← →
Leons (2004-08-09 15:33) [30]Изменил. Но все равно результат выборки равен 0. Значение брал, которое точно есть.
← →
Sergey13 © (2004-08-09 15:38) [31]2[30] Leons (09.08.04 15:33)
С учетом регистра?
← →
46_55_41_44 © (2004-08-09 15:39) [32]Слушай, чего ты мучаешься?
Сделай вот так:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM Kods where Kod like " + #39 + "%" + Edit1.Text + "%" + #39; );
Memo1.Lines:=ADOQuery1.SQL;
ADOQuery1.Active:=true;
end;
и все... никаких тебе параметров не надо!!!!!1
← →
Соловьев © (2004-08-09 15:39) [33]
> DOQuery1.Parameters.ParamByName("K").Value := #39 + Edit1.Text
> + #39;
> Сделай
> ADOQuery1.Parameters.ParamByName("K").Value := #39 + "%"
> + Edit1.Text + "%" + #39;
бред седой кобылы
Если параметры используешь - не надо обрамлять значение кавычками для строковых полей.
← →
46_55_41_44 © (2004-08-09 15:41) [34]сделай как показал в этом примере - 46_55_41_44 © (09.08.04 15:39) [32]
и скажи ответ!
← →
Leons (2004-08-09 15:44) [35]Работает на УРА. ОГРОМНОЕ СПАСИБО 46_55_41_44
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM Kods where Kod like " + #39 + "%" + Edit1.Text + "%" + #39; );
Memo1.Lines:=ADOQuery1.SQL;
ADOQuery1.Active:=true;
end;
и все... никаких тебе параметров не надо!!!!!1
← →
Sergey13 © (2004-08-09 15:50) [36]2[35] Leons (09.08.04 15:44)
Ну для аксеса то это по барабану вроде, что с ними что без них. Но разобраться то не мешало бы.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.034 c