Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Сохранение результата запроса Sqlite в массив


Автор: Sanderland 1.12.2011, 15:26
Здравствуйте. НАчал осваивать SQlite как собственно и Си.

Столкнулся с такой проблемой. При выполнении запроса я могу обработать и вывести на экран результат. А как сохранить его в отдельный массив ??? либо как сравнить результаты с эталоном который я ввел с клавиатуры. ?

Автор: newbee 1.12.2011, 15:31
Покажи, как ты его выводишь.

Автор: Sanderland 1.12.2011, 15:48
Эмм... ну просто ввожу данные. Это имя человека, имя группы и номер телефона.
Вообще мне необходимо следующие. 
- просмотр всех номеров телефонов для заданного человека,
– просмотр всех людей в справочнике и для заданной группы людей,

scanf("%s%s%s",&manname,&grname,&telnomber);       // ввод данных

Автор: newbee 1.12.2011, 15:56
Цитата(Sanderland @  1.12.2011,  16:26 Найти цитируемый пост)
При выполнении запроса я могу обработать и вывести на экран результат.

Цитата(Sanderland @  1.12.2011,  16:48 Найти цитируемый пост)
Эмм... ну просто ввожу данные.
Таки покажи, как ты выводишь результат запроса. Уверена, что невозможно вывести данные предварительно не сохранив их. Показывай давай)

Автор: Sanderland 1.12.2011, 16:03
Код

         sqlzap="SELECT * FROM tgr";                                                     // запрос
         rc = sqlite3_open("tel_sprav.db", &dbTelspr);                                 // открываю базу
         rc = sqlite3_exec(dbTelspr, sqlzap, callback, NULL, &errmsg);             // выполняю запрос



функция callback

Код

static int callback(void *notused, int coln, char **rows, char **colnm)
{
    /*
        coln - число столбцов в запрашиваемой таблице
        rows - массив значений в записи
        colnm - имена столбцов
    */
    int i;
    static int b = 1;
    // печать названий столбцов

    if (b) // печатать только один раз
    {
        for(i=0; i<coln; i++)
            printf("%s\t", colnm[i]);
        printf("\n");
        b = 0;
    }
    // печать разделителя строк
    for(i=0; i<coln; i++)
        printf("-------\t");
    printf("\n");
    //печать значений
    for(i=0; i<coln; i++)
        printf("%s\t|", rows[i]);
    printf("\n");

    return 0;

} // end callback


Проблема в том что я не могу передать данные из callback в основную программу.

Автор: newbee 1.12.2011, 16:26
Не можешь, потому что sqllite сама их удаляет?

Прямо внутри callback вызывай функцию-обработчик результатов или функцию-сохранялку результатов, если они тебе нужны потом.

Автор: Sanderland 1.12.2011, 16:44
Хмм....ТОЧНО!
а не подскажете как ??? а то у меня не получаеться из callback вызвать какую либо функцию :(( Где ее описать нужно ???

как вызвать функцию из static callback и сохранить данные для использования в основной программе ?

Автор: newbee 1.12.2011, 16:51
Код

void save_sqllite_result(void *notused, int coln, char **rows, char **colnm){
 ...
}

void callback(void *notused, int coln, char **rows, char **colnm){ // rename me
 ...
 save_sqllite_result(notused,coln,rows,colnm);
 ...
}


Автор: Sanderland 1.12.2011, 17:27
Не получаеться.... функция callback выполняеться только когда лна определена как static. :(

Автор: newbee 1.12.2011, 18:26
Цитата(Sanderland @  1.12.2011,  18:27 Найти цитируемый пост)
Не получаеться.... функция callback выполняеться только когда лна определена как static. :( 
Такого не бывает. Скорее всего у тебя где-то конфликты имен. Да и что мешает ей оставаться static?

Автор: Sanderland 1.12.2011, 20:08
Так.. Кажеться я уже близок. smile 

я ток не пойму теперь....

У меня запрос не хочет сохраняться в двумерном массиве.

Код

masStr=rows;


сохраняет только последнюю строчку и то ее можно прочитать только в callback.А если обращаюсь из основной программы, то там кракозябры. Как я понял что-то с указателями напутал. А мне нужна матрица из всей таблицы. Если добавляю счетчик, выбивает из программы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)