powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Visual C++ + ADO + хранимая процедура=ошибка?
10 сообщений из 10, страница 1 из 1
Visual C++ + ADO + хранимая процедура=ошибка?
    #32398421
У меня в приложении есть CAdodc. В Command type стоит 8-adCmdUnknown. Когда пишу обычный запрос у меня все нормально работает. Кагда хочу запустить хранимую процедуру ничего не выходит.
Когда пишу вместо запроса:

"EXECUTE addstat ...параметры всякие" он выдает ошибку при
m_adodc.Refresh();

(где qstr -- строка с запросом или вызовом процедуры.)

Ошибка такая:
Operation is not allowed when object is closed.
Интересно то, что сама хранимая процедура выполняется (т.е.запись в таблицу добавляется). Но ошибка то все равно выскакивает.

Причем когда стороку qstr записываешь и выполняешь в Query Analizer при SQL Server 2000 все нормально работает. Да и в Делфи всегда работает через EXECUTE.
Пример кода:

qstr = "SELECT * FROM main WHERE Number LIKE '"+(CString)(cinfo->CalledID)+"%'";
m_adodc.SetRecordSource((LPCTSTR)qstr);
m_adodc.Refresh();
C_Recordset cRS=m_adodc.GetRecordset(); //пока все работает
....
qstr = "EXECUTE addstat 'none', 'none', '"+(CString)(cinfo->CallerID)+"'";
m_adodc.SetRecordSource((LPCTSTR)qstr);
m_adodc.Refresh(); //тут возникает ошибка


У кого-то вообще есть примеры запуска хранимых процедур на вижуале...
С удовольствием посмотрел бы.
И кто знает где можно почитать про все эти вещи.
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32398961
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык...

Надо Command ставить в adCmdStoredProc.
Тоже самое, когда делаешь выборку из таблицы
ставишь в adCmdTable
и т.д.
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32399559
Когда делаю так:

qstr = "EXECUTE addstat 'none', 'none', 'none'";
m_adodc.SetCommandType(4);
m_adodc.SetRecordSource((LPCTSTR)qstr);
m_adodc.Refresh();

то ошибка такая:

Syntax error or access violation

и запись не добавляется.

Когда m_adodc.SetCommandType(8); или m_adodc.SetCommandType(1); --ошибка:

Operation is not allowed when object is closed

Когда m_adodc.SetCommandType(2); -- ошибка:

Incorrect syntax near the keyword 'EXECUTE'.

В query analizer и Delphi все нормально, как обычно работает.
А в вижуале хранимую процедуру до использования надо может как-то инициализировать? (хотя запись добавляется и так... )
Ничего не понимаю....
Кто-то может показать пример...асоциативное мышление, так сказать, может поможет :-)
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32400370
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКогда m_adodc.SetCommandType(2); -- ошибка:
Incorrect syntax near the keyword 'EXECUTE'.

Блин, ты думаешь, когда пишешь или просто флаги перебором ставишь?
Конечно, ошибка! :)

char *szNone[]="None";

_CommandPtr pCmd = NULL;

try
{
TESTHR (pCmd.CreateInstance(__uuidof(Command)));
pCmd->ActiveConnection = pConnection;
}
catch(...)
{ return FALSE; // "облом"
}

pCmd->CommandType = adCmdStoredProc;
pCmd->CommandText = "addstat";

_ParameterPtr prm1 = NULL;
_ParameterPtr prm2 = NULL;
_ParameterPtr prm3 = NULL;

_variant_t vtPrm1, vtPrm2, vtPrm3;

vtPrm1.vt = vtPrm2.vt = vtPrm3.vt = VT_BSTR;
vtPrm1.bstrVal = vtPrm2.bstrVal = vtPrm3.bstrVal = (_bstr_t)szNone;

pCmd->Parameters->Append(pCmd->CreateParameter("1st",adBSTR,adParamInput,strlen(szNone),vtPrm1));

pCmd->Parameters->Append(pCmd->CreateParameter("2nd",adBSTR,adParamInput,strlen(szNone),vtPrm1));

pCmd->Parameters->Append(pCmd->CreateParameter("3rd",adBSTR,adParamInput,strlen(szNone),vtPrm1));

try
{
pCmd->Execute(NULL,NULL,adCmdStoredProc);
}
catch(...)
{...
}
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32400943
А можно ли нормально выполнить хранимую процедуру как запрос, тоесть:
EXECUTE addstat 'pram1', 'param2'.....

Я так пытался, но возникает ошибка о которой я уже писал. Хотя хранимая процедура выполняется (нужная запись в таблицу добавляется). Тоесть это возможно...
Может кто-то знает где это можно почитать. У меня в MSDN по ADO вообще почти ничего нет.
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32401088
Как запустить хранимую процедуру, используя только CAdodc.
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32402235
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед Refresh надо сказать
Open.

Кстати, что за класс CAdodc? Искал, не нашёл...
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32403216
У меня в MSDN тоже почему-то ничего нет. И у Microsoft на сайте почти ничего.
CAdodc - "Microsoft ADO Data Control, version 6.0 (OLEDB)" официальное название. Add To Project->Components and controls->Registered ActiveX Controls.
Open не пренадлежит классу CAdodc (нет там такой функции).
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32403698
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумал...

Похоже, через SetRecordSource не получится. (а может и получится)
Ибо там как раз указывается источник записей и Refresh соответственно обновляет объект согласно этому запросу.
С сохранённой процедурой всё иначе, её надо _выполнить_. То есть возможно есть метод типа Execute. А потом пытаться делать Refresh (а может и не пытаться)

На rsdn ни чего не искал?
...
Рейтинг: 0 / 0
Visual C++ + ADO + хранимая процедура=ошибка?
    #32408003
На rsdn тоже ничего конкретного нет. Есть кое-какие упоминания.
Я пробовал в хранимую процедуру вставлять запрос, чтоб ее результатом был RecordSet. Всеравно ничего не выходило. Депло в том, что процедура выполняется, а при Refresh падает. А без него не выполняется.
Я поищу еще чего-нибудь.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Visual C++ + ADO + хранимая процедура=ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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