Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как создать параметры в TpFIBQuery? 
:(
    Опции темы
ksili
Дата 30.6.2006, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



В компоненте TpFIBQuery есть свойства Params (на чтение), ParamsCheck и методы ParamByName, ParamCount, ParamExist, ParamName, ParamValue, SetParamValue, SetParamValues. Не могу добавить параметры.
Если просто написать 
Код

pFIBQuery1->ParamValue("p1") = Edit2->Text;

в процессе выполнения пишет, что параметр p1 не существует.
Если написать
Код

pFIBQuery1->SQL->Add("insert into ACOMPS(KOD_A, NAZV_A) values (:p1,:p2)");
pFIBQuery1->ExecWP("p1",Edit2->Text);

то при компиляции пишет ошибку 'Could not find a match for 'TFIBQuery::ExecWP(char*,AnsiString)' 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Alex
Дата 30.6.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Код

pFIBQuery1->ParamValue("p1") = Edit2->Text;

ParamValue это функция возвращающая значение параметра.
Код

pFIBQuery1->ParamByName("p1")->Value = Edit2->Text;
 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
ksili
Дата 30.6.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Пишу
Код

             pFIBQuery1->ParamByName("p1")->Value = Edit2->Text;
             pFIBQuery1->ParamByName("p2")->Value = Edit1->Text;
             pFIBQuery1->SQL->Clear();
             pFIBQuery1->SQL->Add("insert into ACOMPS(KOD_A, NAZV_A) values (:p1,:p2)");
             pFIBQuery1->ExecQuery();

Все равно на первой же строчке приведённого кода происходит ошибка (в run-time), что параметр p1 не существует. Его в design-time нужно как-то создать! 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Alex
Дата 30.6.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



А откуда программа знает о ваших параметрах когда вы ей еще запрос не задали????

Код

pFIBQuery1->SQL->Clear();
pFIBQuery1->SQL->Add("insert into ACOMPS(KOD_A, NAZV_A) values (:p1,:p2)");
pFIBQuery1->ParamByName("p1")->Value = Edit2->Text;
pFIBQuery1->ParamByName("p2")->Value = Edit1->Text;
pFIBQuery1->ExecQuery();
 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
ksili
Дата 30.6.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Да, так оказалось правильно. Но теперь другая проблема. На самом деле в таблице три поля: KOD_A и NAZV_A текстовые. А поле ID_A автоинкрементное. Поэтому я его не указывал, думал что оно должно само сгенериться. 

При создании структуры базы пользуюсь IBExpert. насколько я понял, чтобы поле было автоинкрементным, надо создать соответствующий генератор, или триггер, или процедуру. Я создал генератор, задал ему начальное значение 1. Поставил в свойствах поля галку USE EXISTING GENERATOR и выбрал генератор. Но почему-то если закрыть таблицу и открыть заново (в IBExpert), эта установка не сохраняется. Поле остаётся не автоинкрементным. 

Как вставить запись с таким полем? Я понимаю, что вопрос банальный. Просто первый раз это делаю. Помню давно делал базу под BDE. Там по-моему такое поле заполнялось автоматически. 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Alex
Дата 30.6.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Цитата(ksili @  30.6.2006,  11:57 Найти цитируемый пост)
При создании структуры базы пользуюсь IBExpert. насколько я понял, чтобы поле было автоинкрементным, надо создать соответствующий генератор, или триггер, или процедуру. Я создал генератор, задал ему начальное значение 1. Поставил в свойствах поля галку USE EXISTING GENERATOR и выбрал генератор. Но почему-то если закрыть таблицу и открыть заново (в IBExpert), эта установка не сохраняется. Поле остаётся не автоинкрементным. 

Мда, что-то автор IBExpert ни как не поправит эту ошибку, нужно будет им еще разок напомнить о ней.
Создайте триггре перед добавлением для своей таблицы с таким кодом
Код

if (NEW.ID_A is null) then
    NEW.ID_A = GEN_ID(название_генератора, 1);

 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Ramin
Дата 17.7.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 17.7.2006
Где: Азербаиджан, Баку

Репутация: нет
Всего: нет



Цитата(Alex @ 30.6.2006,  09:41)
А откуда программа знает о ваших параметрах когда вы ей еще запрос не задали????

Код

pFIBQuery1->SQL->Clear();
pFIBQuery1->SQL->Add("insert into ACOMPS(KOD_A, NAZV_A) values (:p1,:p2)");
pFIBQuery1->ParamByName("p1")->Value = Edit2->Text;
pFIBQuery1->ParamByName("p2")->Value = Edit1->Text;
pFIBQuery1->ExecQuery();

+1 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.