powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / getString не работает из Oracle
9 сообщений из 9, страница 1 из 1
getString не работает из Oracle
    #39016673
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

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
getString не работает из Oracle
    #39016874
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛьюисКэррол-- Откусишь с одной стороны -- подрастешь, с другой -- уменьшишься!
-- С одной стороны чего? -- подумала Алиса. -- С другой стороны чего?


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

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

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


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

Мисье знает толк в извращениях ( C )
...
Рейтинг: 0 / 0
getString не работает из Oracle
    #39016940
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
getString не работает из Oracle
    #39016948
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой библиотеки?

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

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

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

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

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

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

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

Возможно еще поиграться со static linked RTL и dinamic linked RTL. В своей версии MS VS (русская 2012) почему-то данных параметров найти не могу. Хотя, теоретически, быть должны )))
...
Рейтинг: 0 / 0
getString не работает из Oracle
    #39047244
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем не смог я победить эту проблему, сделал через 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
getString не работает из Oracle
    #39048314
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то.. многобукв.

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


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