Уважаемы Symon если вас незатруднит, можно примерчик для BLOB?
А то я никак не могу разобратса с этим CLongBinary.
В XMLTYPE есть конструктор который берет BLOB и впихивает в ячейку.
INSERT INTO TABLE (XMLFIELD) VALUES (XMLTYPE(//сдес этот сами параметр BLOB))
Вы писали:
SQLQuery (hstmt, "UPDATE [TABLE] SET [data] = ?b WHERE ([id] = ?)", pData, &iSizeData, &id);
// ?B, ?b — бинарный тип передается указатель на буффер и указатель на размер буфера;
А что из себя представляет pData?
У меня данние в CString хранятса.
Могу ли я дать просто указатель на CString, или нужно исползовать CLongBinary?
SQLQuery (hstmt, "UPDATE [TABLE] SET [data] = ?b WHERE ([id] = ?)", pData, &iSizeData, &id);
pData — это указатель на блок памяти, т.е. CString::GetBuffer ();
iSizeData — размер блока в байтах, т.е. если стринг в ANSI, то CString::GetLenght ();
но можно вот так:
SQLQuery (hstmt, "UPDATE [TABLE] SET [data] = ?s WHERE ([id] = ?)", (LPCTSTR) strData, &id);
Здравствуйте, tzragravorox, Вы писали:
T>Когда данние не превишают 4000 баит все ок, но когда болше 4000 неполучаетса. T>По моему это из SQL_CHAR. T>Вот именно по этому мне нужен блоб. T>А вот с блоб проблемма , можно именно пример с блоб?(у меня данние в CString xml),если конечно вас не затруднит T>Большое Спасибо!
Этот то вариант не подходит?
SQLQuery (hstmt, "UPDATE [TABLE] SET [data] = ?b WHERE ([id] = ?)", pData, &iSizeData, &id);
pData — это указатель на блок памяти, т.е. CString::GetBuffer ();
iSizeData — размер блока в байтах, т.е. если стринг в ANSI, то CString::GetLenght ();
T>А какои тип у pData? я пробовал LPSTR вроде неполучилось. T>Спасибо!
Так приведите явно к LPSTR
SQLQuery (hstmt, "UPDATE [TABLE] SET [data] = ?b WHERE ([id] = ?)", (LPSTR) pData, &iSizeData, &id);
Это конечно пример плохого дизайна, но как я понял сейчас главное чтоб работало, да и в данном контексте это не страшно. А вообще "неполучилось" — понятие довольно размытое. Чем четче сформулируете, тем быстрее получите ответ. Например: не компилируется, ошибка компилятора такая то и т.д.
Здравствуйте, Alexey Frolov, Вы писали:
AF>Так приведите явно к LPSTR
AF>SQLQuery (hstmt, "UPDATE [TABLE] SET [data] = ?b WHERE ([id] = ?)", (LPSTR) pData, &iSizeData, &id);
У меня другая проблемма:
если исползую ?S то ограничение в размере,
если ?B то по моему проблемма меняетса:
данние идут а БД не выполняет запрос из за не правилного исползование конструктора XMLTYPE
с параметром блоб.
AF>Это конечно пример плохого дизайна, но как я понял сейчас главное чтоб работало, да и в данном контексте это не страшно. А вообще "неполучилось" — понятие довольно размытое. Чем четче сформулируете, тем быстрее получите ответ. Например: не компилируется, ошибка компилятора такая то и т.д.
да я и сам не понимаю в чем проблемма в параметре или в конструкторе.
T>Значит ли это что с данними все в порядке т.е они доходят до БД а запрос не выполняетса T>из за неправилного исползования XMLTYPE(?b) конструктора? T>Спасибо!
Во-первых в запросе ошибка — не хватает одной закрывающей скобки
retcode=SQLQuery (hstmt, "INSERT INTOTEST(FIELD_1) VALUES(XMLTYPE(?b))",pData,&iDataSize);
Во-вторых можно попробовать так
retcode=SQLQuery (hstmt, "INSERT INTO TEST(FIELD_1) VALUES(?b)",pData, &iDataSize)
В-третьих можно увидеть текст ошибки, если после оператора вернувшего ошибку (sqlRet != SQL_SUCCESS || sqlRet != SQL_SUCCESS_WITH_INFO) вызвать SQLGetDiagRec
Здравствуйте, Alexey Frolov, Вы писали:
AF>Во-первых в запросе ошибка — не хватает одной закрывающей скобки AF>retcode=SQLQuery (hstmt, "INSERT INTOTEST(FIELD_1) VALUES(XMLTYPE(?b))",pData,&iDataSize);
извините.
это не скопированный текст(в свое оправдание )
AF>Во-вторых можно попробовать так AF>retcode=SQLQuery (hstmt, "INSERT INTO TEST(FIELD_1) VALUES(?b)",pData, &iDataSize)
Попробую, но FIELD_1 XMLTYPE типа и насколько мне известно нужно использовать XMLTYPE(...).
AF>В-третьих можно увидеть текст ошибки, если после оператора вернувшего ошибку (sqlRet != SQL_SUCCESS || sqlRet != SQL_SUCCESS_WITH_INFO) вызвать SQLGetDiagRec