Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / getString не работает из Oracle / 9 сообщений из 9, страница 1 из 1
27.07.2015, 13:09:17
    #39016673
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
Добрый день!

getInt() работает, а getString() выдает ошибку:
Код: plaintext
1.
Необработанное исключение в "0x5cd4ad7a (msvcp100d.dll)" в "sinhroniseThreads.exe": 0xC0000005: Нарушение прав доступа при чтении "0xccccccd0".


Вот такая вот проблема, хз что делать.

До этого такая проблема возникала при извлечении IP адресов из базы, но я его вот так вот элегантно решил:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
	string s = "SELECT e.ID_EMPLOYEE, ";
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\1'), ";
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\2'), ";
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\3'), ";
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\4'), ";
	s = s + ' ' + "e.IP_ADDRESS ";
	s = s + ' ' + "FROM EMPLOYEE e ";
	s = s + ' ' + "WHERE EXISTS(SELECT 1 FROM SCAN_EMPLOYEE se WHERE se.ID_EMPLOYEE_FK = e.ID_EMPLOYEE) ";
	//s = s + ' ' + "AND ROWNUM < 200 ";
	s = s + ' ' + "AND e.IP_ADDRESS in ('10.2.3.30') ";
	const char* sql = s.c_str();
	Statement* stmt = conn->createStatement(sql);

	int t1 = 0, t2 = 0, t3 = 0, t4 = 0;
	string babac = "";
	string t;
	stringstream ss;
	ResultSet *rs;
	rs = stmt->executeQuery();
	while (rs->next()!= NULL)
	{
		t1  = rs->getInt (2);
		t2  = rs->getInt (3);
		t3  = rs->getInt (4);
		t4  = 170;
		ss << t1 << "." << t2 << "." << t3 << "." << t4;
		t = ss.str();
		babac = rs->getString(5);
	.....
	}



Теперь так не получиться, необходимо вытаскивать сетевые папки и названия файлов.

Ошибка возникает в строке babac = rs->getString(5);
...
Рейтинг: 0 / 0
27.07.2015, 15:30:02
    #39016874
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
ЛьюисКэррол-- Откусишь с одной стороны -- подрастешь, с другой -- уменьшишься!
-- С одной стороны чего? -- подумала Алиса. -- С другой стороны чего?


АвторgetInt() работает, а getString() выдает ошибку:

getInt() чего ? и getString() чего ?

Авторя его вот так вот элегантно решил


Элегантный
(франц. elegant) - изящный, изысканный; изящно, со вкусом одетый, держащийся с изяществом.

Мисье знает толк в извращениях ( C )
...
Рейтинг: 0 / 0
27.07.2015, 16:02:55
    #39016940
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
Leonid KudryavtsevЛьюисКэррол-- Откусишь с одной стороны -- подрастешь, с другой -- уменьшишься!
-- С одной стороны чего? -- подумала Алиса. -- С другой стороны чего?


АвторgetInt() работает, а getString() выдает ошибку:

getInt() чего ? и getString() чего ?

Посмотрите внимательно.
В коде же все прописано, как склеиваются IP адреса и как я пытаюсь его вытащить сразу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
		t1  = rs->getInt (2);
		t2  = rs->getInt (3);
		t3  = rs->getInt (4);
		t4  = 170;
		ss << t1 << "." << t2 << "." << t3 << "." << t4;
		t = ss.str();
		babac = rs->getString(5);




Leonid KudryavtsevАвторя его вот так вот элегантно решил


Элегантный
(франц. elegant) - изящный, изысканный; изящно, со вкусом одетый, держащийся с изяществом.

Мисье знает толк в извращениях ( C )

Уважаемый, это был сарказм над самим собой, ибо так проблемы не решаются:
Код: plaintext
1.
2.
3.
4.
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\1'), ";
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\2'), ";
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\3'), ";
	s = s + ' ' + "REGEXP_REPLACE(e.IP_ADDRESS, '(.*)\\.(.*)\\.(.*)\\.(.*)', '\\4'), ";
...
Рейтинг: 0 / 0
27.07.2015, 16:09:29
    #39016948
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
Какой библиотеки?

Названия ф-ций / методов getInt, getString ничего не говорят. Так же как и названия класса Statement. Библиотек с такими методами и классами - как грязи.
...
Рейтинг: 0 / 0
27.07.2015, 16:15:38
    #39016957
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
Leonid KudryavtsevКакой библиотеки?

Названия ф-ций / методов getInt, getString ничего не говорят. Так же как и названия класса Statement. Библиотек с такими методами и классами - как грязи.

тынц
...
Рейтинг: 0 / 0
27.07.2015, 17:04:59
    #39017016
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
Я бы первым делом полез проверять параметры линковки в проекте.

Если есть работающий example сравнить параметры линковки в нем и в Вашем проекте.

IMHO & AFAIK
...
Рейтинг: 0 / 0
27.07.2015, 17:17:16
    #39017022
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
Именно такой ошибки на metalink нет, зато есть пара нот по совместимости версии компилятора (Вами НЕ указана) и версии OCCI (Вами тоже НЕ указана).

Т.ч. очередной уточняющий вопрос:
1. Какой компилятор (подозреваю MS VS) и какая версия компилятора
2. Какая версия OCCI

Я бы проверил, что в debug ветки проекте используется debug версия OCCI библиотеки. В release ветки release версия OCCI библиотеки.

Возможно еще поиграться со static linked RTL и dinamic linked RTL. В своей версии MS VS (русская 2012) почему-то данных параметров найти не могу. Хотя, теоретически, быть должны )))
...
Рейтинг: 0 / 0
09.09.2015, 17:04:34
    #39047244
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
В общем не смог я победить эту проблему, сделал через XML в ОС.
Дебильное решение, а что поделаешь.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
FUNCTION MONITOR.MORED_XML(NUM IN NUMBER)
RETURN NUMBER
IS
  file_id UTL_FILE.FILE_TYPE;
BEGIN
  file_id := utl_file.FOPEN ('MOREDDIR','Mored.xml','w');
  utl_file.PUT_LINE( file_id, '<?xml version="1.0" encoding="utf-8" ?>' );
  utl_file.PUT_LINE( file_id, '<Start>' );
  FOR emp IN (SELECT m.ID_MORED,
                     e.IP_ADDRESS,
                     m.MODEL_MORED
                FROM EMPLOYEE e 
                     INNER JOIN MORED m ON m.ID_EMPLOYEE_FK = e.ID_EMPLOYEE 
               WHERE m.STATUS = 1 
                     AND m.MODEL_MORED IS NOT NULL 
              ORDER BY e.ID_EMPLOYEE )
  LOOP
    utl_file.PUT_LINE( file_id, '<Row>' );
    utl_file.PUT_LINE( file_id, '<ID_MORED>' || emp.ID_MORED || '</ID_MORED>' );
    utl_file.PUT_LINE( file_id, '<IP_ADDRESS>' ||emp.IP_ADDRESS || '</IP_ADDRESS>' );
    utl_file.PUT_LINE( file_id, '<MODEL_MORED>' ||emp.MODEL_MORED || '</MODEL_MORED>' );
    utl_file.PUT_LINE( file_id, '</Row>' );
  END LOOP;
  utl_file.PUT_LINE( file_id, '</Start>' );
  utl_file.fCLOSE(file_id);
  RETURN 1;
END MORED_XML;



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
	//извлекаем пути к Моред файлам
	string mor = "select MONITOR.MORED_XML(1) from dual";
	const char* sql1 = mor.c_str();
	Statement* stmt1 = conn->createStatement(mor);
	ResultSet *rs;
	ResultSet *rsb;
	rs  = stmt->executeQuery();
	rsb = stmt1->executeQuery();

	XmlTextReader ^ reader = gcnew XmlTextReader ("C:\\Mored\\Mored.xml");
	char* nameXMLRow = "";

    while (reader->Read()) 
    {
		MORED_PATH mored_path;
        switch (reader->NodeType) 
        {
			case XmlNodeType::Element: // The node is an element.
				if (reader->Name == "ID_MORED") {
					nameXMLRow = "ID_MORED";
				} else if (reader->Name == "IP_ADDRESS") {
					nameXMLRow = "IP_ADDRESS";
				} else if (reader->Name == "MODEL_MORED") {
					nameXMLRow = "MODEL_MORED";
				}
                break;
			case XmlNodeType::Text: //Display the text in each element.
				if (strcmp(nameXMLRow, "ID_MORED") == 0) {
					mored_path.id_mored = (char*)(void*)Marshal::StringToHGlobalAnsi(reader->Value);
				} else if (strcmp(nameXMLRow, "IP_ADDRESS") == 0) {
					mored_path.ip_mored = (char*)(void*)Marshal::StringToHGlobalAnsi(reader->Value);
				} else if (strcmp(nameXMLRow, "MODEL_MORED") == 0) {
					mored_path.model_mored = (char*)(void*)Marshal::StringToHGlobalAnsi(reader->Value);
					mored_path_list.push(mored_path);
				}
                break;
			case XmlNodeType::EndElement: //Display the end of the element.
                break;
        }
    }
...
Рейтинг: 0 / 0
10.09.2015, 16:43:58
    #39048314
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getString не работает из Oracle
Как-то.. многобукв.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if (reader->Name == "ID_MORED") {
					nameXMLRow = "ID_MORED";
				} else if (reader->Name == "IP_ADDRESS") {
					nameXMLRow = "IP_ADDRESS";
				} else if (reader->Name == "MODEL_MORED") {
					nameXMLRow = "MODEL_MORED";
				}



Можно так написать?
Код: plaintext
1.
2.
3.
if (reader->Name in(".....","...)){
   nameXMLRow = reader->Name; 
}



Или так если нет исключений.
Код: plaintext
1.
nameXMLRow = reader->Name;
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / getString не работает из Oracle / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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