|
|
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
У меня в приложении есть 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(); //тут возникает ошибка У кого-то вообще есть примеры запуска хранимых процедур на вижуале... С удовольствием посмотрел бы. И кто знает где можно почитать про все эти вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2004, 17:36 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
Дык... Надо Command ставить в adCmdStoredProc. Тоже самое, когда делаешь выборку из таблицы ставишь в adCmdTable и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 10:55 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
Когда делаю так: 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 все нормально, как обычно работает. А в вижуале хранимую процедуру до использования надо может как-то инициализировать? (хотя запись добавляется и так... ) Ничего не понимаю.... Кто-то может показать пример...асоциативное мышление, так сказать, может поможет :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2004, 15:29 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
авторКогда 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(...) {... } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 10:37 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
А можно ли нормально выполнить хранимую процедуру как запрос, тоесть: EXECUTE addstat 'pram1', 'param2'..... Я так пытался, но возникает ошибка о которой я уже писал. Хотя хранимая процедура выполняется (нужная запись в таблицу добавляется). Тоесть это возможно... Может кто-то знает где это можно почитать. У меня в MSDN по ADO вообще почти ничего нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 15:09 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
Как запустить хранимую процедуру, используя только CAdodc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2004, 16:26 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
Перед Refresh надо сказать Open. Кстати, что за класс CAdodc? Искал, не нашёл... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 10:30 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
У меня в MSDN тоже почему-то ничего нет. И у Microsoft на сайте почти ничего. CAdodc - "Microsoft ADO Data Control, version 6.0 (OLEDB)" официальное название. Add To Project->Components and controls->Registered ActiveX Controls. Open не пренадлежит классу CAdodc (нет там такой функции). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 17:26 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
Подумал... Похоже, через SetRecordSource не получится. (а может и получится) Ибо там как раз указывается источник записей и Refresh соответственно обновляет объект согласно этому запросу. С сохранённой процедурой всё иначе, её надо _выполнить_. То есть возможно есть метод типа Execute. А потом пытаться делать Refresh (а может и не пытаться) На rsdn ни чего не искал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 10:34 |
|
||
|
Visual C++ + ADO + хранимая процедура=ошибка?
|
|||
|---|---|---|---|
|
#18+
На rsdn тоже ничего конкретного нет. Есть кое-какие упоминания. Я пробовал в хранимую процедуру вставлять запрос, чтоб ее результатом был RecordSet. Всеравно ничего не выходило. Депло в том, что процедура выполняется, а при Refresh падает. А без него не выполняется. Я поищу еще чего-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2004, 08:14 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32400943&tid=2035410]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
103ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 469ms |

| 0 / 0 |
