Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 23:01   #1
Oyoume
 
Аватар для Oyoume
 
Регистрация: 19.11.2012
Сообщений: 8
Восклицание синтаксис AddParam

Здравтсвуйте!Помогите пожалуйста разобраться с синтаксисом AddParam.
Работала c TADOQuery и добавляла параметр
Код:
		DataModule1->ProjectsTable->Parameters->AddParameter()->Name="n";
DataModule1->ProjectsTable->Parameters->ParamByName("n")->Value = "%%";
теперь задание по учебе перейти на IBQuery и загвоздка в том как правильно указать name и value в AddParam()???

DataModule1->IBQuery1->Params->AddParam()...
то ли в () надо прописывать, в инете пишут
void AddParam(
String^ name,
String^ namespaceUri,
Object^ parameter
)
Может кто знает как в строке прописать?

Последний раз редактировалось Stilet; 19.11.2012 в 23:09.
Oyoume вне форума Ответить с цитированием
Старый 19.11.2012, 23:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
DataModule1->IBQuery1->SQL->Text="Select ... From... where поле такоето=:n";
Сдесь :n и есть параметр, который ты задаешь ранее в ParamByName.
P.S. AddParameter() выполнять не надо, ParamByName сам разберется с заданием.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2012, 01:11   #3
Oyoume
 
Аватар для Oyoume
 
Регистрация: 19.11.2012
Сообщений: 8
По умолчанию

Спасибо,за ответ!
Наверно немного не так вопрос сформулировала.
что я делаю:
1.добавляю 4 параметра
2.присваиваю %% значения
3.при определённых условиях меняю значения параметров на содержимое Edit ов
4.и уже потом запрос по 4м параметрам.
код такой
Код:
DataModule1->ProjectsTable->Active = false;
DataModule1->ProjectsTable->SQL->Clear();

		DataModule1->ProjectsTable->Parameters->AddParameter()->Name="n";
				DataModule1->ProjectsTable->Parameters->AddParameter()->Name="sd";
				DataModule1->ProjectsTable->Parameters->AddParameter()->Name="ed";
				DataModule1->ProjectsTable->Parameters->AddParameter()->Name="z";

				DataModule1->ProjectsTable->Parameters->ParamByName("n")->Value = "%%";
				DataModule1->ProjectsTable->Parameters->ParamByName("sd")->Value = "%%";
				DataModule1->ProjectsTable->Parameters->ParamByName("ed")->Value = "%%";
				DataModule1->ProjectsTable->Parameters->ParamByName("z")->Value = "%%";
				
if(CheckBox1->Checked && BNameEdit->Text!="") DataModule1->ProjectsTable->Parameters->ParamByName("n")->Value = "%"+BNameEdit->Text+"%";

if(CheckBox2->Checked)DataModule1->ProjectsTable->Parameters->ParamByName("sd")->Value = "%"+BSDateEdit->Date.DateString()+"%";
				
if(CheckBox3->Checked)DataModule1->ProjectsTable->Parameters->ParamByName("ed")->Value = "%"+BEDateEdit->Date.DateString()+"%";
				
if (CheckBox4->Checked && BCustomerEdit->Text!="") DataModule1->ProjectsTable->Parameters->ParamByName("z")->Value = "%"+BCustomerEdit->Text+"%";

DataModule1->ProjectsTable->SQL->Add("select * from projects where (fullname like :n) and (start_date like :sd) and (end_date like :ed) and (zakaz like :z)");

DataModule1->ProjectsTable->Active = true;
В TADOQuery работает-всё хорошо. Если работать c IBQuery вместо Parameters-Params, вместо AddParameter-AddParam и как-то по-другому name и value надо прописывать,только как?

Последний раз редактировалось Stilet; 20.11.2012 в 13:06.
Oyoume вне форума Ответить с цитированием
Старый 20.11.2012, 13:12   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Все там точно так же:
Код:
IBQuery1->ParamByName('sd')->Value="%"+BSDateEdit->Date.DateString()+"%"
Не надо никакие AddParameter использовать вообще, это устаревшая схема
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2012, 14:59   #5
Oyoume
 
Аватар для Oyoume
 
Регистрация: 19.11.2012
Сообщений: 8
По умолчанию

Скажите,пожалуйста, а почему тогда выдается ошибка IBQuery1:Parameter 'n' not found?
Oyoume вне форума Ответить с цитированием
Старый 20.11.2012, 15:12   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код в студию )
Возможно ты тело запроса раньше описания параметров определяешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2012, 15:25   #7
Oyoume
 
Аватар для Oyoume
 
Регистрация: 19.11.2012
Сообщений: 8
По умолчанию

Код:
void __fastcall TProjectsForm::Search2Click(TObject *Sender)
{

  if(!CheckBox1->Checked && !CheckBox2->Checked && !CheckBox3->Checked && !CheckBox4->Checked)
	{
		ShowMessage("Set criteria of search!");
	}
	else
	{
		if((CheckBox1->Checked && BNameEdit->Text=="") || (CheckBox4->Checked && BCustomerEdit->Text==""))
			{
				ShowMessage("Field of criteria must be filled!");
			}
			else
			{  
			 

			 
				if (CheckBox1->Checked && BNameEdit->Text!="") DataModule1->IBQuery1->Params->ParamByName("n")->Value = "%"+BNameEdit->Text+"%";
				if (CheckBox2->Checked)DataModule1->IBQuery1->Params->ParamByName("sd")->Value = "%"+BSDateEdit->Date.DateString()+"%";
				if (CheckBox3->Checked)DataModule1->IBQuery1->Params->ParamByName("ed")->Value = "%"+BEDateEdit->Date.DateString()+"%";
				if (CheckBox4->Checked && BCustomerEdit->Text!="") DataModule1->IBQuery1->Params->ParamByName("z")->Value = "%"+BCustomerEdit->Text+"%";

				DataModule1->IBQuery1->SQL->Add("select * from projects where (fullname like :n) and (start_date like :sd) and (end_date like :ed) and (zakaz like :z)");

			
			}
	}

}

Последний раз редактировалось Stilet; 20.11.2012 в 15:54.
Oyoume вне форума Ответить с цитированием
Старый 20.11.2012, 16:01   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну-у-у... Кто же так делает? Это же собрание багов )
Что будет если у тебя ни одно условие не выполнится?
В твоем случае видимо нужно описывать условия примерно так:

Код:
if (CheckBox1->Checked && BNameEdit->Text!="") 
 DataModule1->IBQuery1->Params->ParamByName("n")->Value = "%"+BNameEdit->Text+"%";
else
 DataModule1->IBQuery1->Params->ParamByName("n")->Value = "%%";
Однако я бы собирал саму строку запроса динамически:
Код:
String s="";
DataModule1->IBQuery1->Params->Clear();

if (CheckBox1->Checked && BNameEdit->Text!=""){
 DataModule1->IBQuery1->Params->ParamByName("n")->Value = "%"+BNameEdit->Text+"%";
 s+="(fullname like :n)";
}

if (CheckBox2->Checked){
 DataModule1->IBQuery1->Params->ParamByName("sd")->Value = "%"+BSDateEdit->Date.DateString()+"%";
 if(s!="") s+=" and ";
 s+="(start_date like :sd)";
}
if (CheckBox3->Checked){
DataModule1->IBQuery1->Params->ParamByName("ed")->Value = "%"+BEDateEdit->Date.DateString()+"%";
 if(s!="") s+=" and ";
 s+="(end_date like :ed)";
}
if (CheckBox4->Checked && BCustomerEdit->Text!="") {
 DataModule1->IBQuery1->Params->ParamByName("z")->Value = "%"+BCustomerEdit->Text+"%";
 if(s!="") s+=" and ";
 s+=" (zakaz like :z)";
}
 if(s!="") s+=" where ";

DataModule1->IBQuery1->SQL->Add("select * from projects "+s);
Тогда если не введен один из параметров он просто не попадет в строку запроса
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2012, 16:14   #9
Oyoume
 
Аватар для Oyoume
 
Регистрация: 19.11.2012
Сообщений: 8
По умолчанию

Так делают плохие программисты как я)
Попробовала ваш вариант-наверно так и лучше,но ошибка та же(
Может я что-то упустила и в свойствe IBQuery Params надо что-то указать, просто ADOQuery и без этого фурычет
Oyoume вне форума Ответить с цитированием
Старый 20.11.2012, 17:03   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
наверно так и лучше,но ошибка та же
Ну тогда извини - что-то ты не то делаешь, потому что у меня все работает.
Возможно ты совсем не там ошибку ищещь.
Попробуй тогда без параметров совсем. Неужели прям край параметризацию делать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксис Надежда)) Общие вопросы C/C++ 1 26.12.2011 20:55
Синтаксис KrockodilL Общие вопросы Delphi 1 21.11.2011 17:08
синтаксис boomeer Общие вопросы C/C++ 5 09.09.2011 15:25
Синтаксис си dr.Chas Общие вопросы C/C++ 3 04.01.2010 18:25