Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > параметр Query


Автор: meta 24.12.2007, 08:42
Не пойму как передать объекту Query параметр и как им воспользоваться. 

Автор: Syrex 24.12.2007, 09:13
Код

AnsiString Q="select * from Table  where A=:val";

ADOQuery->Parameters->Items[0]->Value=val

Автор: meta 24.12.2007, 10:16
Спасибо, за помощь.

Я попробывал со своими компонентами:
Код

int val = 1;
 Form2->Query1->Params->Items[0]->Value=val;


и запрос у меня Select * From Food Where FoodID=:val

получил ошибку: field val not found :(


А вот ещё вопрос. Как лучше организовать ввод/редактирование/удаление  записей из таблицы? Использовать запросы с параметрами или есть какие то другие способы через bdgrid?[quote]


Автор: meta 24.12.2007, 17:43
Народ, не подскажите в чём проблема?

Автор: Rodman 24.12.2007, 18:24
Код

ADOQuery->Close;
ADOQuery->SQL->Clear;
ADOQuery->SQL->Add("select A from Table  where A=:val;");
ADOQuery->Parameters->ParamByName("val")->Value=Znachenie;
ADOQuery->Open;


Добавлено через 49 секунд
[quote=meta, 24.12.2007,  10:16, post1359400]А вот ещё вопрос. Как лучше организовать ввод/редактирование/удаление  записей из таблицы? Использовать запросы с параметрами или есть какие то другие способы через bdgrid?
Цитата


M
Rodman
Модератор: Пожалуйста, один топик - один вопрос.

Автор: meta 24.12.2007, 18:52
Странно, запрос обновляется, а вот  изменения  в таблице не происходят..

Код

        int i= getNumber();

        Form2->Query2->Close();
        Form2->Query2->SQL->Clear();
        Form2->Query2->SQL->Add(" SELECT * FROM Products WHERE InvoiceID=:val");
        Form2->Query2->Params->ParamByName("val")->Value=i;
        Form2->Query2->Open();
        Form2->DBGrid3->Refresh();

Автор: Anark1 24.12.2007, 19:47
meta, откуда браться изменениям ?

Автор: meta 24.12.2007, 20:44
Anark1, япытаюсь изменить запрос на который привязан датасорс1, а на даатасорс1 привязан дбгрид.

Я представляю так, что если мы изменим запрос  и потом вызовим метод рефреш нашего дбгрида то он по идее должен обновится..

P.S. Может быть я вставил код не туда? Я его положил в DBGrid1Enter 

Автор: Anark1 24.12.2007, 20:46
meta, читай основы бд... запрос нужно прежде всего выполнить

Добавлено через 15 секунд
500ый пост smile

Автор: meta 24.12.2007, 20:50
Цитата

запрос нужно прежде всего выполнить
Добавлено через 15 секунд
500ый пост smile 


выполнил, всё равно не обновляется. 

Код

Form2->Query2->Close();
        Form2->Query2->SQL->Clear();
        Form2->Query2->SQL->Add(" SELECT * FROM Products WHERE InvoiceID=:val");
        Form2->Query2->Params->ParamByName("val")->Value=2;
        Form2->Query2->Open();
        Form2->Query2->ExecSQL();
        Form2->DBGrid3->Refresh();


P.S. 52 постsmile

Автор: Anark1 24.12.2007, 21:06
meta, читай основы ! ты понимаешь что ты пишешь ?

1. Если вызывается метод 
Form2->Query2->SQL->Clear();
то
Form2->Query2->Close(); не нужен

2. Form2->Query2->Open(); и Form2->Query2->ExecSQL();
вместе существовать не могут в принципе. ExecSQL для запросов, которые не возвращают набор записей, Open - для запросов, которые возвращают.

3. Что значит не обновляется ? Ты выполняешь запрос, изменяя какой то параметр, в результате будет набор записей, который удовлетворяет новому условию отбора.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)