Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Передача параметра для IBQuery

Автор: 18192123 2.12.2008 4:03

Здравствуйте!
Предположим, у меня есть компонент DBGrid2, куда будут выводятся результаты запроса компонента IBQuery2, но в тексте запроса присутствует параметр, в качестве которого хочу передавать значение поля, выделенного в другой DBGrid1....Так вот..а как прописать??


IBQuery2->Close();
//IBQuery2->Params->ParamByName("A")->AsString=DBGrid1-> а дальше не знаю...
IBQuery2->Open();




Автор: volvo 2.12.2008 4:17

Ну, если

Цитата
значение поля, выделенного в другой DBGrid1
, то
IBQuery2->Params->ParamByName("A")->AsString=DBGrid1->SelectedField->AsString;

Автор: 18192123 3.12.2008 5:29

Цитата(volvo @ 2.12.2008 0:17) *

IBQuery2->Params->ParamByName("A")->AsString=DBGrid1->SelectedField->AsString;


Ошибка...Скажите пожалуйста, как её можно устранить..?



Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: volvo 3.12.2008 6:10

Не знаю... Ошибка возникает не при чтении из DBGrid1, а при работе с IBQuery скорее всего, потому что код

ShowMessage(DBGrid1->SelectedField->AsString);
, вызванный по нажатию кнопки, прекрасно отрабатывает, если в Гриде было выбрано какое-то поле. То есть, обращение к SelectedField->AsString вполне легально. А что там у тебя творится в IBQuery я не знаю...

Если передаешь значение непосредственно:
IBQuery2->Params->ParamByName("A")->AsString="что-то";
, работает?

Автор: 18192123 3.12.2008 7:01

Цитата(volvo @ 3.12.2008 2:10) *

Если передаешь значение непосредственно:
IBQuery2->Params->ParamByName("A")->AsString="что-то";
, работает?

Да..отрабатывает без ошибок..

Автор: volvo 3.12.2008 14:30

Ну, тогда попробуй разделить эту операцию на 2: Сначала читать из ячейки Грида в дополнительную переменную (AnsiString), а потом - передавать эту строку в Query, и смотри, на каком этапе возникнет ошибка...

Автор: 18192123 4.12.2008 0:16

Цитата(volvo @ 3.12.2008 10:30) *

Ну, тогда попробуй разделить эту операцию на 2...

Вот...Попробывала..

IBQuery2->Close();
AnsiString temp;
temp=DBGrid1->SelectedField->AsString; //вот здесь мы и вылетаем...
IBQuery2->Params->ParamByName("A")->AsString=temp;
IBQuery2->Open();


т.е. что-то не так со считыванием из Grid..

Автор: volvo 4.12.2008 1:14

Интересно... Мне такую ошибку удалось воспроизвести только при условии, что свойство DataSource->DataSet->Active этого самого Грида выставлено в False, тогда действительно из Грида ничего нельзя прочесть, ведь читать, собственно, нечего. Но тогда ведь и Грид пустой, он просто ничего не содержит, поскольку источник данных неактивен (или в 6-ом Билдере как-то по другому?)

Во всех других случаях, если в Гриде что-то есть, и присутствует эта стрелочка (активная запись) слева, то обращение к SelectedField отрабатывает без сбоя, другого простого способа обратиться к выбранному элементу по-моему просто нет... Кстати, а на каком событии висит у тебя этот код? Когда он вызывается?

Автор: 18192123 4.12.2008 1:18

Удалила компоненты и создала всё заново...И заработало-таки!
Спасибо за помощь!