Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / покажите, где ошибка. / 6 сообщений из 6, страница 1 из 1
18.11.2016, 19:36
    #39350106
aaryzh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите, где ошибка.
Пишу код для работы с sqlite базой в dll. Для примера взял скайп. Работаю с таблицей сообщений
База открывается, запрос обрабатывается, исторические данные выводятся. Проблема в том, что, сообщения, который приходят онлайн не отбираются запросом. если выгрузить dll и вызвать снова, то новые сообщения подхватываются.
и еще проверял в Sqlite Expert Personal, сообщени sql запросом в онлайн подхватываются.

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
wstring SQL_req ( L"select id, chatname, author, datetime( timestamp, 'unixepoch', 'localtime' ) as timestamp1, body_xml, timestamp from Messages "
 "where chatname = 'live:aaryzhikov1974' and timestamp >= " );

//      SQL_req += L"'";
      _i64tow( curtimer, SQL_1, 10 );
      SQL_req += SQL_1;
      SQL_req += L" order by id";

int sql_ret = sqlite3_prepare16_v2( db, SQL_req.c_str(), -1, &stmt, 0 );
 
 
         if ( ( ret_code == SQLITE_OK ) and ( sql_ret == SQLITE_OK ) )
         {
 
//              int num_col  = sqlite3_column_count( stmt );
 
//              int num_data = sqlite3_data_count( stmt );
              //LogFile << " Отобрано данных  столбцов " << num_col << " строк " << num_data << " \n ";
//              wsprintfW( S2, L" Отобрано данных  столбцов  %d   ", num_col );
//              WriteFileLogW( LogFile, S2 );
 
                ret_code = sqlite3_stmt_busy( stmt );
                sprintf( S1,"%s busy before step? %d\n", sqlite3_sql( stmt ), ret_code );
                WriteFileLog ( LogFile, S1 );
 
                ret_code = sqlite3_step( stmt );
                if ( ( SQLITE_DONE != ret_code ) || ( SQLITE_ROW != ret_code ) )
                {
                    sprintf( S1, "Error: %s\n", sqlite3_errmsg( db ));
                    WriteFileLog ( LogFile, S1 );
//                    exit(1);
                }
                ret_code = sqlite3_stmt_busy( stmt );
                sprintf( S1, "%s busy after step? %d\n", sqlite3_sql(stmt), ret_code );
                WriteFileLog ( LogFile, S1 );
 
              ret_code = sqlite3_reset( stmt );
              if ( SQLITE_OK != ret_code )
              {
                  sprintf( S1, "%s busy after reset? %d\n", sqlite3_sql(stmt), ret_code );
                  WriteFileLog ( LogFile, S1 );
//                  exit(1);
              }
 
              ret_code = sqlite3_stmt_busy( stmt );
              sprintf( S1, "%s busy after reset? %d ", sqlite3_sql(stmt), ret_code );
              WriteFileLog ( LogFile, S1 );
 
              while ( ( ret_code = sqlite3_step( stmt ) ) == SQLITE_ROW ) //пока в бд есть данные происходит считывание
              {
                   sprintf( S1, "ret_code in while %d ", ret_code );
                   WriteFileLog ( LogFile, S1 );
               }
...
Рейтинг: 0 / 0
18.11.2016, 20:41
    #39350130
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите, где ошибка.
aaryzhПроблема в том, что, сообщения, который приходят онлайн не отбираются запросом. если выгрузить dll и вызвать снова, то новые сообщения подхватываются.Значит они еще не записаны в базу. Или записаны, но в другую таблицу.
...
Рейтинг: 0 / 0
18.11.2016, 21:12
    #39350141
aaryzh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите, где ошибка.
White Owl, в том-то и дело, что Sqlite Expert их тем же запросом их сразу видит, как только сообщение отправлено.
...
Рейтинг: 0 / 0
18.11.2016, 22:48
    #39350164
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите, где ошибка.
aaryzh,

Проблема явно не в SQLite, а в приложении. В том же самом соединении происходит переопрос таблицы? Или каждый раз открывается заново? Версии sqlite3.dll одинаковы как для Expert так и для приложения?
...
Рейтинг: 0 / 0
19.11.2016, 06:31
    #39350217
aaryzh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите, где ошибка.
VSVLAD,
логика работы такая. В основном приложении с периодом 5 сек происходит вызов функции dll, в ҡоторой открывается база, выполняется запрос, закрывается база, возврашается тело сообщения. новые сообщения sqlite_step не видит и возвращает 101 - done.
...
Рейтинг: 0 / 0
19.11.2016, 13:12
    #39350271
aaryzh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите, где ошибка.
VSVLAD,
Спасибо. Натолкнули на мысль и ошибку исправил. Действительно проблемы была в вызывающем приложении - некорректно отрабатывал вызов функции sqlite по событию.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / покажите, где ошибка. / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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