Привет!
CBuilder5, ODAC5, Oracle 9.2.0.4
Есть ли у кого пример использования на С++ — как именно передать параметр как массив?
Спасибо!
05.08.04 22:10: Перенесено модератором из 'C/C++'. Андрей Тарасевич (30) в COM/DCOM/ActiveX Lorenzo_LAMAS (8) в COM/DCOM/ActiveX — Павел Кузнецов
Здравствуйте, Eugenie, Вы писали:
E>Привет!
E>CBuilder5, ODAC5, Oracle 9.2.0.4
E>Есть ли у кого пример использования на С++ — как именно передать параметр как массив?
E>Спасибо!
function(array[]); — это, если массив не многомерный.
Если массив многомерынй, то необходимо делать так:
function(array[][5][3]);
т.е. необходимо указывать все полследующие размерности, кроме первой.
если массив динамический, т.е., например определeн так:
int **array;
то просто передавай этот указатель:
function(array);
И вообще, попробуй почитать книжки по С...
Здравствуйте, Stea1z, Вы писали:
S>И вообще, попробуй почитать книжки по С...
да ему в Oracle массив как параметр передать надо. книжки по С тут не помогут
S>>И вообще, попробуй почитать книжки по С...
ssm>да ему в Oracle массив как параметр передать надо. книжки по С тут не помогут
Тех книжек еще не написано (или уже да? плиз, ткните носом).
Конкретизирую вопрос.
Исходный код:
1 DM1->SP_IN->StoredProcName="sACC.AdmClient";
2 DM1->SP_IN->Prepare();
3 DM1->SP_IN->ParamByName("PACTION")->AsString="I";
4 DM1->SP_IN->ParamByName("pV")->AsArray->OCISvcCtx=DM1->Database1->OCISvcCtx;
5 DM1->SP_IN->ParamByName("pV")->AsArray->AllocObject(DM1->Database1->OCISvcCtx,"CFBTYPE_CLAR");
6 DM1->SP_IN->ParamByName("pV")->AsArray->ItemAsString[0] = lv->Strings[0];
валится на строке номер 5 в приведенном выше варианте с сообщением OCI function is not linked.
Если строку 5 переделать как
5 DM1->SP_IN->ParamByName("pV")->AsArray->AllocObject(CFBTYPE_CLAR");
то вываливается access violation.
Кстати, если кто сможет объяснить, когда какую функцию надо вызывать, было бы хорошо!
Regards,
Eugenie
Здравствуйте, Eugenie, Вы писали:
S>>>И вообще, попробуй почитать книжки по С...
ssm>>да ему в Oracle массив как параметр передать надо. книжки по С тут не помогут
E>Тех книжек еще не написано (или уже да? плиз, ткните носом).
E>Конкретизирую вопрос.
E>Исходный код:
E>E> 1 DM1->SP_IN->StoredProcName="sACC.AdmClient";
E> 2 DM1->SP_IN->Prepare();
E> 3 DM1->SP_IN->ParamByName("PACTION")->AsString="I";
E> 4 DM1->SP_IN->ParamByName("pV")->AsArray->OCISvcCtx=DM1->Database1->OCISvcCtx;
E> 5 DM1->SP_IN->ParamByName("pV")->AsArray->AllocObject(DM1->Database1->OCISvcCtx,"CFBTYPE_CLAR");
E> 6 DM1->SP_IN->ParamByName("pV")->AsArray->ItemAsString[0] = lv->Strings[0];
E>
E>валится на строке номер 5 в приведенном выше варианте с сообщением OCI function is not linked.
E>Если строку 5 переделать как
E>E> 5 DM1->SP_IN->ParamByName("pV")->AsArray->AllocObject(CFBTYPE_CLAR");
E>
E>то вываливается access violation.
E>Кстати, если кто сможет объяснить, когда какую функцию надо вызывать, было бы хорошо!
E>Regards,
E>Eugenie
да, действительно... я-то подумал, что проблема в другом. И к тому же я допустил ошибку — массивы в С передаются просто как указатель на 1-ый элемент. function(array);