Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
 
1 / 1 / 1
Регистрация: 14.05.2015
Сообщений: 29
1

Некорректная работа приложения с БД на других ПК

15.05.2015, 16:10. Просмотров 393. Ответов 2
Метки нет (Все метки)

Еще раз здравствуйте!
Помогите, пожалуйста, разобраться в следующей проблеме. Есть небольшая программа, которая корректно работает на моей машине, где она была откомпилирована. У другого пользователя программа работает некорректно:
программа открывается без ошибок, но после того, как пользователь ввел данные для поиска (в частности заполняется одно поле с указанием ИНН организации) и нажал кнопку для отправки запроса к источнику данных (access), возвращается пустая строка (тогда как точно должна вернуться 1 строка).

C++
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
char d[21];                                        
                        SQLCHAR sqlText_prov_inn[]="SELECT cod_reg, kod_city, inn_to, name_to, date_obraz, cod_net_work, kol_tt, bank_konk, internet_sales, site_inter_sales, komm_to, cod_uk, cod_sotr_sb, date_rez, cod_rez, post_otp  FROM reestr_to  WHERE inn_to = ?  ORDER BY 1;";
                        SQLHSTMT    hstmt_prov_inn      = SQL_NULL_HSTMT;                     
                        SendMessage(hwnd_edit_inn_TO, EM_GETLINE, 0, (LPARAM)d);
                        
                        SQLAllocHandle(SQL_HANDLE_STMT,hDbc,&hstmt_prov_inn); //версия ODBC 3.0
                        for(int x=0;d[x]!='\0'||x<=20;++x){if(d[x]=='0'||d[x]=='1'||d[x]=='2'||d[x]=='3'||d[x]=='4'||d[x]=='5'||d[x]=='6'||d[x]=='7'||d[x]=='8'||d[x]=='9'||d[x]=='\0') {;} else {d[x]='\0';}}  
                       
                        SQLSetStmtAttr(hstmt_prov_inn, SQL_ATTR_CURSOR_SCROLLABLE ,(SQLPOINTER) SQL_NONSCROLLABLE , 0);
                        SQLSetStmtAttr(hstmt_prov_inn, SQL_ATTR_CURSOR_SENSITIVITY,(SQLPOINTER) SQL_INSENSITIVE , 0);
                        SQLINTEGER sql_nts = SQL_NTS;
                        retcode =SQLPrepare (hstmt_prov_inn,sqlText_prov_inn , SQL_NTS);
                            retcode=SQLBindParameter(
                            hstmt_prov_inn,     //Идентификатор оператора
                            1,                  //Номер параметра, упорядоченный слева направо. Нумерация начинается с 1.
                            SQL_PARAM_INPUT,    //Тип параметра. Может принимать одно из следующих значений: SQL_PARAM_INPUT, SQL_PARAM_OUTPUT, SQL_PARAM_INPUT_OUTPUT
                            SQL_C_CHAR,         //тип данных, из которых происходит конвертирование
                            SQL_CHAR,           //тип данных в которые происходит конвертирование, и он должен совпадать с SQL – типом столбца
                            20,                 //размер столбца источника данных
                            0,                  //точность столбца источника данных
                            d,                  //буфер с данными
                            sizeof(d),          //размер буфера
                            &sql_nts         //длина буфера(параметра)
                            );
                        
                        /*SQLDescribeCol(SQLHSTMT,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);   
                       SQLCHAR c[40]; SQLSMALLINT tr,tt,u6,u7; SQLUINTEGER io;
                       SQLDescribeCol(hstmt_prov_inn,3,c,sizeof(c),&tr,&tt,&io,&u6,&u7);*/
             
                       if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
                        {     
                            //retcode = SQLExecDirect(hstmt_prov_inn,sqlText_prov_inn, SQL_NTS);
                            retcode =SQLExecute (hstmt_prov_inn);
                            DiagnosHSTMT(retcode, hstmt_prov_inn); //поиск ошибок
                            while (TRUE) {
                                                retcode = SQLFetch(hstmt_prov_inn);
                                            
                                                if (retcode == SQL_NO_DATA) {
                                                        MessageBox(hwnd,"ТО в базе данных не найдена.","Проверка ИНН",MB_OK);
                                                }
                                                if (retcode == SQL_ERROR) {
                                                        MessageBox(hwnd,"Ошибка при продвижении курсора на следующую запись результирующего набора.","Error SQLFetch",MB_OK);
                                                }
                                                if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
                                                    MessageBox(hwnd,"ТО найдена в базе", "Проверка ИНН", MB_OK);
                                                    
                                                 {
                                                    char    a1[5],         //cod_reg
                                                            a2[5],         //kod_city
                                                            a3[13],         //inn_to, 
                                                            a4[80],         //name_to, 
                                                            a5[20],         //date_obraz, 
                                                            a6[5],         //cod_net_work, 
                                                            a7[4],          //kol_tt, 
                                                            a8[40],         //bank_konk, 
                                                            a9[5],         //internet_sales, 
                                                            a10[40],        //site_inter_sales,  
                                                            a11[65535],     //komm_to,    
                                                            a12[120],        //cod_uk, 
                                                            a13[5],        //cod_sotr_sb, 
                                                            a14[20],        //date_rez, 
                                                            a15[20],        //cod_rez,    
                                                            a16[40];        //post_otp
                                                   
                                                            a1[0]='\0',    //cod_reg
                                                            a2[0]='\0',         //kod_city
                                                            a3[0]='\0',         //inn_to, 
                                                            a4[0]='\0',         //name_to, 
                                                            a5[0]='\0',         //date_obraz, 
                                                            a6[0]='\0',         //cod_net_work, 
                                                            a7[0]='\0',          //kol_tt, 
                                                            a8[0]='\0',         //bank_konk, 
                                                            a9[0]='\0',         //internet_sales, 
                                                            a10[0]='\0',        //site_inter_sales,  
                                                            a11[0]='\0',     //komm_to,    
                                                            a12[0]='\0',        //cod_uk, 
                                                            a13[0]='\0',        //cod_sotr_sb, 
                                                            a14[0]='\0',        //date_rez, 
                                                            a15[0]='\0',        //cod_rez,    
                                                            a16[0]='\0';        //post_otp
                                                    
                                                    SQLGetData(hstmt_prov_inn, 1, SQL_C_CHAR, a1, 5, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 2, SQL_C_CHAR, a2, 5, &int_hstmt1);    
                                                    SQLGetData(hstmt_prov_inn, 3, SQL_C_CHAR, a3, 13, &int_hstmt1);     
                                                    SQLGetData(hstmt_prov_inn, 4, SQL_C_CHAR, a4, 80, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 5, SQL_C_CHAR, a5, 20, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 6, SQL_C_CHAR, a6, 5, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 7, SQL_C_CHAR, a7, 4, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 8, SQL_C_CHAR, a8, 40, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 9, SQL_C_CHAR, a9, 5, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 10, SQL_C_CHAR, a10, 40, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 11, SQL_C_CHAR, a11, 65535, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 12, SQL_C_CHAR, a12, 120, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 13, SQL_C_CHAR, a13, 5, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 14, SQL_C_CHAR, a14, 20, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 15, SQL_C_CHAR, a15, 20, &int_hstmt1);
                                                    SQLGetData(hstmt_prov_inn, 16, SQL_C_CHAR, a16, 40, &int_hstmt1);
                
                                                    p (a1, a2, a3, a4, a5, a6, a7, a8,
                                                    a9, a10, a11, a12, a13, a14, a15, a16); 
                                                }    
                                              
                                                        break;
                                                } else {break;}
                                        }
                            SQLFreeHandle(SQL_HANDLE_STMT,hstmt_prov_inn);
                            hstmt_prov_inn = SQL_NULL_HSTMT;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2015, 16:10
Ответы с готовыми решениями:

Некорректная работа с Microsoft.office.interop.excel.dll на других ПК
Всем добра! Понимаю, тема уже избита и много раз обсуждалась, но все же хотелось уточнить раз и...

Некорректная работа приложения
Решил оптимизировать работу своего приложения по парсингу пользователей VK. Решил использовать...

Некорректная работа приложения
Доброго времени суток ребята. Т.к. опыта у меня еще маловато, то если не сложно объясните мне одну...

Некорректная работа подписанного приложения
Доброго времени суток. Создаю приложение которое использует некоторые возможности Firebase. При...

2
1460 / 1032 / 143
Регистрация: 23.07.2010
Сообщений: 5,724
15.05.2015, 16:31 2
а источник данных не забыл перенести?
0
1 / 1 / 1
Регистрация: 14.05.2015
Сообщений: 29
16.05.2015, 00:13  [ТС] 3
Уважаемый, pincet! Нет, вроде) Судя по строке соединения, программа успешно соединяется с источником данных. Также при открытии программы (по событии WM_CREATE) автоматически в ряд органов управления окна из источника данных подгружается информация. Что-то типа справочников. Так вот у другого пользователя данные запросы выполняются успешно, т.е. органы управления наполняются данными, справочники не пустые.

Добавлено через 6 часов 28 минут
Методом тыка увидел следующую особенность. Если я запускаю программу на одном компьютере, но под разными учетными записями, то проблема таже. При этом, когда я запускаю программу от имени пользователя (который откомпилировал прогу) и направляю запрос к источнику данных, то в переменную
C++
1
char d[21]
копируются данные из edit. Если же я запускаю программу под учетной записью другого пользователя, то данные из edit в переменную не попадают.
Не пойму почему так. Может быть, кто-то с подобным сталкивался?

Добавлено через 28 минут
Опять же методом научного тыка заменил
C++
1
SendMessage(hwnd_edit_inn_TO, EM_GETLINE, 0, (LPARAM)d);
на
C++
1
GetWindowText(hwnd_edit_inn_TO,d,21);
и заработало.
Проблема решена.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2015, 00:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Навигатор дополненной реальности - некорректная работа приложения
Здравствуйте, я Дмитрий, обычно пишу под iOS, но сейчас требуется переделать под свои нужды андроид...

Работа приложения на других ПК
Создал приложение Windows Forms Visual Studio 2013 на С++. Программа прекрасно работает при запуске...

Корректная работа приложения на других ПК
Сделал простенькую программу, сделал тестовый дизайн в фш и толкнул его на бекграунд. Столкнулся...

FoxPro, некорректная выборка по датам на других ПК
Доброго времени суток УВАЖАЕМЫЕ форумчане. 2-ой день бьюсь с датами, и пока перевес в этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.