powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с bind - переменными
13 сообщений из 13, страница 1 из 1
Проблема с bind - переменными
    #34755904
Biosi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я написал прогу на Builder C++, которая формирует запросы в БД Oracle с использованием оператора SELECT. Мне сказали переделать её с использованием bind-переменных.
Пишу:
Vaiable a number;
exec :a := 472;

select * from TABLE1 where RG = :a;

Скажите, это имелось в виду? :) Я новичок в SQL.
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34756002
да
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34756122
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие компоненты используются для доступа?
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34757235
Zigzag2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй http://otl.sourceforge.net
otl_stream
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34757450
Biosi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для доступа использую компонент ADOQuery. Я знаю, что это не совсем подходящее решение, но переделывать программу - уже нет времени :(
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34760075
mikola1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем otl_stream, ловчее ADOQuery? и как его прекрутить к билдеру?
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34762249
Zigzag2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OTL работает напрямую через OCI
OTL - это просто wrapper над OCI + кроссплатформенность + интуитивно понятный интерфейс использования.
Все, что требуется:

otl_connect::otl_initialize();
otl_connect db;

db.rlogon("user/passwd@sid",1/* thread mode*/);

otl_stream s(1, "select a,b from TABLE1 where RG = :a<int,in>", db);
// предположим, что выбираем a - number, b - varchar2
while (s.eof())
{
int a;
std::string b;
s >> a >> b;
}

Прикрутить: попробуй просто подключить otlv4.h
1. Должен быть установлен Oracle Client
2. Добавь к путям поиска include: к примеру C:\oracle\ora92\oci\include
3. Добавь к путям поиска lib: к примеру C:\oracle\ora92\oci\lib\bc
4. Добавь в зависимость проекта oci.lib

Дальше смотри на сайте если не заработает.
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34762732
Zigzag2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перед while (s.eof())
int i = 1;
s << i;
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34763231
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не пользуюсь билдером, но по старой дельфовой памяти (которой я, впрочем тоже не пользуюсь) - нужно копать в сторону ADOQuery.Parameters. Выглядеть это будет примерно так:

ADOQuery q;

q.sql = "select * from TABLE1 where RG = :a";
q.Parameters[0].DataType = ftInteger;
q.Parameters[0].Value = 472;

...

Переменные в оракле заявлять не нужно.
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34764626
Biosi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я делаю всё так (с помощью ADOQuery), но возникает ошибка, выдаваемая отладчиком Builder, что "параметр не найден" (Parameter not found).
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34766159
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Google: "ADOQuery.Parameters Parameter not found'.
Из первых:
http://www.sql.ru/forum/actualthread.aspx?tid=336791
http://www.delphi32.com/info_facts/faq/faq_932.asp
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34771193
Biosi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё равно не работает :(
Когда я пишу:
ADOQuery1->Parameters->ParseSQL(ADOQuery1->SQL->Text,true);
Ssql = “Select * from Tbl where RG = :pRG”;
ADOQuery1->Parameters->ParamByName("pRG")->Value = 1;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(ssql);
ADOQuery1->Open();
На этапе Value = 1 пишет «Parameter ‘pRG’ not found»

Когда пишу:
ADOQuery1->Parameters->ParseSQL(ADOQuery1->SQL->Text,true);
ADOQuery1->Parameters->AddParameter();
ADOQuery1->Parameters->Items[0]->Name = "pRG";
Ssql = “Select * from Tbl where RG = :pRG”;
ADOQuery1->Parameters->ParamByName("pRG")->Value = 1;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(ssql);
ADOQuery1->Open();
На этапе Open() выдаётся сообщение «Неправильно определён объект Parameter. Предоставлены несовместимые или неполные сведения»
...
Рейтинг: 0 / 0
Проблема с bind - переменными
    #34772093
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BiosiВсё равно не работает :( А вариант с
ADOQuery1->Parameters->Refresh; вместо
ADOQuery1->Parameters->ParseSQL(ADOQuery1->SQL->Text,true); тоже не работает?

Во втором случае проблема, возможноЮ в неопределенном типе параметра?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с bind - переменными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]