| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #30 : 29-07-2008 13:38 »  |  | 
 
 хотя, насчёт k+1 , от тебя требуется уточнение - параметр Field - это zb индекс ? |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #31 : 29-07-2008 13:40 »  |  | 
 
 Алексей1153++, ==20503== Process terminating with default action of signal 11 (SIGSEGV)==20503==  Bad permissions for mapped region at address 0x4010DC0
 ==20503==    at 0x8049754: c_sqlplus::f_execute() (main.cpp:72)
 ==20503==    by 0x8049BBB: main (main.cpp:7)
мне массивы все равно переделывать и собственно пока заморачиваться не охото над их размером и размещением в памяти, пусть будут вектора, но я сделал что ты просил ошибка выше!   |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #32 : 29-07-2008 13:42 »  |  | 
 
 Алексей1153++, на счет к+1 думаю ты не прав, так как до создания отдельной функции рисования все работало, проблемы начались именно с появлением функции. Что за zb индекс ? |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #33 : 29-07-2008 13:49 »  |  | 
 
 Макс, а вот это чё за фигня   void c_sqlplus::f_draw(SACommand* cmd_in){
 cmd_in = new SACommand; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 
? ты же снаружи создал уже объект, а тут снова создаёшь |  
						| 
								|  |  
								| « Последнее редактирование: 29-07-2008 13:51 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #34 : 29-07-2008 13:51 »  |  | 
 
 Алексей1153++, у меня там уже все закоменчено    ВСЯ ФУНКЦИЯ!!! |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #35 : 29-07-2008 13:59 »  |  | 
 
 Макс, вот это работает, я проверил (вылетало чисто изза к+1 - у тебя в двух местах это. И изза неинициализированных массивов    ) class c_sqlplus{
 public:
 void f_execute();
 void f_draw(/*SACommand*/BYTE* cmd_in);
 
 int len_f[1024];
 int len_v[1024];
 const char* buff_value[1024];
 const char* buff_field[1024];
 
 c_sqlplus();
 ~c_sqlplus();
 };
 
 c_sqlplus::c_sqlplus()
 {
 }
 
 c_sqlplus::~c_sqlplus()
 {
 }
 
 void c_sqlplus::f_draw(/*SACommand*/BYTE* cmd_in)
 {
 //cmd_in = new SACommand;
 //    using namespace std;
 
 for(int k=0; k+1<10/*cmd_in->FieldCount()*/; k++) //
 {
 len_f[k] = strlen(buff_field[k]);
 len_v[k] = strlen(buff_value[k]);
 //        cout << "+";
 
 if(len_f[k] > len_v[k])
 {
 for(int i=0; i<len_f[k]; i++);
 //cout << "-";
 }
 
 if(len_f[k] < len_v[k])
 {
 for(int i=0; i<len_v[k]; i++);
 //cout << "-";
 }
 
 //cout << "+";
 }
 }
 
 
 
 void c_sqlplus::f_execute()
 {
 
 /*SACommand*/BYTE* cmd = new BYTE/*SACommand*/; // create command object
 
 try
 {
 // con.Connect(instance, user, passwd, SA_Oracle_Client);
 // cmd->setConnection(&con);
 
 
 //	while(cmd->FetchNext())
 //    {
 for(int k = 0; k+1 < 10/*cmd->FieldCount()*/; k++)
 {
 buff_field[k] = "111";//cmd->Field(k+1).Name();
 buff_value[k] = "222";//cmd->Field(k+1).asString();
 }
 //-----------------------------------------------------
 f_draw(cmd);
 //-----------------------------------------------------
 }
 catch(...)
 {
 int iii=1;
 }
 int iii=1;
 
 }
 
 
 c_sqlplus ttt;
 ttt.f_execute();
 
 
ещё я не использовал класс SACommand , может в нём дело |  
						| 
								|  |  
								| « Последнее редактирование: 30-07-2008 06:19 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #36 : 29-07-2008 14:06 »  |  | 
 
 если все закоментить оставить лишь выше описанное подключение, которое 100% рабочее и вот это while(cmd.FetchNext()){
 for(int k = 0; k+1 < cmd.FieldCount(); k++)
 {
 cout << ok << endl;
 //field[k] = "11";//cmd.Field(k+1).Name();
 //value[k] = "222";
 //field.push_back((const char*)cmd.Field(k+1).Name());
 //value.push_back((const char*)cmd.Field(k+1).asString());
 }
 }
то все гуд, работает, а если сделать вот так: while(cmd.FetchNext()){
 for(int k = 0; k+1 < cmd.FieldCount(); k++)
 {
 field[k] = "11";//cmd.Field(k+1).Name();
 //value[k] = "222";
 //field.push_back((const char*)cmd.Field(k+1).Name());
 //value.push_back((const char*)cmd.Field(k+1).asString());
 }
 }
то падает вот так: ==21886== Process terminating with default action of signal 11 (SIGSEGV)==21886==  Bad permissions for mapped region at address 0x400FDC0
 ==21886==    at 0x804974D: c_sqlplus::f_execute() (main.cpp:72)
 ==21886==    by 0x80499C3: main (main.cpp:7)
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #37 : 29-07-2008 14:16 »  |  | 
 
 останавливайся брекпоинтом на строкеfield[k] = "11";//
 и показывай значения:
 к== ?
 field[k] ==?
 *field[k] ==?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #38 : 29-07-2008 14:18 »  |  | 
 
 Какое значение возвращает cmd.FieldCount()? Кстати, то, что он вызывается каждую итерацию - это нормально?Какая размерность у field?
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #39 : 29-07-2008 15:08 »  |  | 
 
 Алексей1153++,    ) я же говорю что не могу воспользоваться дебагером. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #40 : 29-07-2008 15:12 »  |  | 
 
 McZim, ну а твой любимый cout для чего ? ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #41 : 29-07-2008 15:12 »  |  | 
 
 Вад,1. значение возвращается равное количеству стобцов в одной записи.
 2. а что тут не нормального, проверяем в цткле "к" больше оно общего количества или нет. обычный цикл.
 3. размерность 1024. это для тестов.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #42 : 29-07-2008 15:13 »  |  | 
 
 Алексей1153++, зачем cout когда есть хороший инструмент как valgrind, который любезно ссобщает что я херово работаю с памятью. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #43 : 29-07-2008 15:22 »  |  | 
 
 просто ты как-то неправильно используешь указатель field+k , я сейчас не могу понять
 то есть значение &(field[k]) при некотором k указывает на память, которую уже нельзя пользовать
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #44 : 29-07-2008 15:28 »  |  | 
 
 Алексей1153++, да возможно, ночекром буду разбираться. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #45 : 29-07-2008 18:44 »  |  | 
 
 В общем проблема решилась, оказалось дело в моей не внимательности. c_sqlplus* sql;sql->f_execute();
а нужно: Алексей1153++c_sqlplus* sql = new c_sqlplus();sql->f_execute();
, скажи почему ты такой упор делаешь на k+1 я никак не пойму в чем ошибка? |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #46 : 30-07-2008 04:33 »  |  | 
 
 ну смотри: к примеру, Counter() у тебя вернёт 10. у тебя в цикле: for(k=0;k<10;k++){
 GetField(k+1);
 }
 
если GetField() должно принимать zb индекс, то оно на последней итерации получит 10 (а можно только 0...9) По.тому условие должно быть k<10 && k+1<10 или просто k+1<10 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #47 : 30-07-2008 05:59 »  |  | 
 
 Алексей1153++, не ты не прав    GetField(k+1), а в моем случае cmd.Field(k+1) это номер столбца в таблице из которой я вынимаю имена столбцов и значения столбцов. Если я укажу просто cmd.Field(k), то программа упадет при первом проходе в цикле, потому как нумерация столбцов начинается не с 0 а с 1. А цикл остается обычный чтобы пройти по всем значениям. от 0 до 9 (допустим). |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #48 : 30-07-2008 06:16 »  |  | 
 
 ну тогда всё правильно, значит индекс передаётся как не zb |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #49 : 30-07-2008 06:58 »  |  | 
 
 Вад,2. а что тут не нормального, проверяем в цткле "к" больше оно общего количества или нет. обычный цикл.
 
 Ну, если там inline-подстановка выполнится, то ничего такого. Если же там идёт, скажем, трансляция вызова дальше, чтобы получить-таки общее количество откуда-то "из глубин", то, возможно, выполняется лишняя работа. Поэтому и спросил   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #50 : 30-07-2008 07:46 »  |  | 
 
 Все работает    Пока использую для хранения имен полей и значений полей: std::vector<std::string> value;std::vector<std::string> field;
для длин этих полей: unsigned int len_f[1024];unsigned int len_v[1024];
пока не определился что нужно, STL не очень люблю, но пока освобождает от думы про размерность   |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #51 : 30-07-2008 08:28 »  |  | 
 
 тоже не люблю STL, но сделал бы так struct sNL{
 std::string name;
 unsigned int len;
 sNL()
 {
 name="";
 len=0;
 }
 };
 
 std::vector<sNL> values;
 std::vector<sNL> fields;
 
(не компилил, правда, проверить не могу   ) ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #52 : 08-08-2008 08:31 »  |  | 
 
 Всем привет. В продолжение проекту. Я работаю с ораклом используя библиотеку libsqlapi.so и вот что странно. Создан проект, в линкере указана эта библиотека, все работало, я удалил эту библиотеку из списка подключаемых в проекте, не пересобирая проект, тут же ее добавил, начал собирать проект и посывались ошибки: ||=== sqlplus-new, Debug ===|/lib/../lib/libsqlapi.so||undefined reference to `dlsym'|
 /lib/../lib/libsqlapi.so||undefined reference to `dlerror'|
 /lib/../lib/libsqlapi.so||undefined reference to `dlopen'|
 /lib/../lib/libsqlapi.so||undefined reference to `dlclose'|
 ||=== Build finished: 4 errors, 0 warnings ===|
 
т.е. видно что проблема не в библиотеки и не в том что ее линкер не находит. После этого иду в консоль, выполняю: gcc main.cpp -l /lib/libsqlapi
и вижу вот такую ошибку: /usr/bin/ld: cannot find -l/lib/libsqlapicollect2: выполнение ld завершилось с кодом возврата 1
 
никак не могу понять, как оно только что работало а теперь не работает. причем заметьте, когда выполняю компиляцию в консоле линкер не может найти библиотеку, очень странно. З.Ы.: пробовал собирать под рутом, та же ситуация. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #53 : 08-08-2008 08:42 »  |  | 
 
 McZim, подключи библиотеку libdl (dynamic library --  -ldl) и добавь в сборку ключик -shared. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #54 : 08-08-2008 08:47 »  |  | 
 
 RXL, 5+ спасибо, оно самое, ключик -shared не понадобился.
 Вот только не понятно почему поведение разное??? Работало-работало, потом не работает?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #55 : 08-08-2008 09:30 »  |  | 
 
 В процессе работы делай копии и потом сравнивай, что изменилось - только так. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #56 : 26-08-2008 10:23 »  |  | 
 
 Предыстория: вектор мне нужно иметь обязательно string , положить я в него в чистом виде изField(k+1).Name()  немогу, могу через преобразование в const char* . Все хорошо, но как только мне в БД встречаются строки состоящие из русских букв, у меня рисование рамки начинает смещаться, все потому что длина русских и английских разная, т.е. мне нужно уметь работать со строками, пока что мной было принято решение воспользоваться не string  аwstring , соответственно, в такой вектор я могу положить тип const wchar_t* , но его не понимает Field(k+1).Name() , вот и решил делать через преобразование типов, конечно понимаю что лучше всего это избежать, но пока не знаю как, не работал я с кодировками и символами, может кто подскажет по лучше способ, а пока что: Вот так все замечательно работает: typedef std::vector<std::string> column_t;column_t col;col.push_back((const char*)cmd.Field(k+1).Name());
а вот так не работает, т.е. работает но на выходе я получаю не значения а адреса памяти, где то запарился с указателями, не могу понять где? typedef std::vector<std::wstring> column_t;column_t col;col.push_back(static_cast<const wchar_t*>(static_cast<const void*>(cmd.Field(k+1).Name())));
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #57 : 26-08-2008 10:32 »  |  | 
 
 McZim, Oracle у тебя возвращает в какой кодировке? Строка NLS какая? Я так понял, что utf-8.
 Соотв., в wchar_t != utf-8 - это unicode 16 бит.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #58 : 26-08-2008 10:35 »  |  | 
 
 ага utf-8, вот гадство блин   кстате не знаешь как можно раотать с разными кодировками? У меня могут встречать кодировки, utf-8, koi8-r |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #59 : 26-08-2008 17:50 »  |  | 
 
 итак: int main(){
 string str1;
 cin >> str1;
 cout << endl << "You print string: " << str1 << endl;
 cout << "length string: " << str1.length() << endl;
 
 return 0;
 }
 
результат: mczim@mczim-desktop:# ./1Input string:
 qwerty
 
 You print string: qwerty
 length string: 6
 
 mczim@mczim-desktop:# ./1
 Input string
 йцукен
 
 You print string: йцукен
 length string: 12
 
применимо к моей прграмме (sqlplus), если я считываю из базы строку состоящую из русских символов, то при том же количестве символов я получаю совершенно другую длину строки, в следствии чего у меня происходит смещение рисования таблицы, основанное на длине строки. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	|  |