Печать SQL в C - PullRequest
       81

Печать SQL в C

0 голосов
/ 29 ноября 2018

Мне нужна помощь с выводом результатов оператора SQL на языке C. Я пытаюсь не указывать в каждой переменной указатель, а затем использовать этот указатель для вывода переменной.Если бы я сделал, я бы хотел пару сотен переменных.Это то, что я пробовал до сих пор.Я буквально заблудился о том, как заставить это выводить правильно.Любая помощь будет оценена.

int hstmt = DBActivateSQL(hdbc, "SELECT * FROM REG_RESULTSTABLE");
if (hstmt <= 0)
{
    ShowError();
}

sprintf(uutNum, "%s \n", hstmt);
while((resCode = DBFetchNext(hstmt)) == DB_SUCCESS) {
    SetCtrlVal(panelHandle, PANEL_lstregulator, uutNum);
}

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Требуются следующие функции: DBFetchNext и DBGetCol* (DBGetColChar, DBGetColDouble, ...).Согласно странице документации на DBGetColChar, поток должен быть примерно таким, где вам нужна только одна переменная на столбец:

void print_MyTable(int hdbc)
{
    char *var1;
    int var2;
    float var3;

    int statement = DBActivateSQL(hdbc, "SELECT col1, col2, col3 FROM MyTable");
    int resultCode;
    while ((resultCode = DBFetchNext(statement)) == DB_SUCCESS) {
        if ((resultCode = DBGetColChar(statement, 1, &var1, "")) != DB_SUCCESS) {
            // Handle the error
            break;
        }
        if ((resultCode = DBGetColInt(statement, 2, &var2)) != DB_SUCCESS) {
            // Handle the error
            DBFree(var1);
            break;
        }
        if ((resultCode = DBGetColFloat(statement, 3, &var3)) != DB_SUCCESS) {
            // Handle the error
            DBFree(var1);
            break;
        }

        // Print the values
        printf("col1: %s, col2: %d, col3: %f\n", var1, var2, var3);

        // Free the string's memory
        DBFree(var1);
    }
    statement = DBDeactivateSQL(statement);
}
0 голосов
/ 29 ноября 2018

Прототип DBActivateSQL равен

  int DBActivateSQL (int connectionHandle, char SQLStatement[]);

Возвращает int.

Следовательно, hstmt должен быть объявлен как int тип.

int hstmt = DBActivateSQL(hdbc, "SELECT * FROM REG_RESULTSTABLE");

Для печати в строку необходимо использовать %d, а не %s, поскольку hsmt имеет тип int.

sprintf(uutNum, "%d",hstmt);
                  ^^------------------------//Using %d instead of %s here
...