Итак, я не программист по профессии, однако, мне была поручена программа, которая опрашивает индикатор по протоколу Modbus, а затем записывает информацию в базу данных. Однако я смог заставить его работать, пытаясь уточнить мой код и сделать так, чтобы основные части программы (открытое соединение Modbus, запись в базу данных, открытие / создание базы данных) были функциями, вызываемыми во время основного цикл, я столкнулся с проблемой при открытии базы данных. Когда я вызываю функцию, я получаю нулевые значения, когда печатаю значение rc, как при открытии базы данных, так и при создании частей кода в таблице.
Так было до того, как я попытался очистить код и сделать все это, вызвав функцию:
int main(int argc, char*argv[]){
sqlite3 *db;
//open database
int rc = sqlite3_open(db_name, &db);
if (rc != SQLITE_OK){
fprintf(stderr, "Cannot open database: %s\n",
sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char sql_query[1024];
// create sqlite table
snprintf(sql_query,sizeof(sql_query), "CREATE TABLE IF NOT EXISTS %s(%s INTEGER PRIMARY KEY,%s TEXT NOT NULL, %s TEXT NOT NULL, %s TEXT NOT NULL,%s REAL NOT NULL, %s REAL NOT NULL, %s REAL NOT NULL);",tbl_id1,tbl_col1,tbl_col2,tbl_col3,tbl_col4,tbl_col5,tbl_col6,tbl_col7);
rc = sqlite3_exec(db, sql_query, callback, 0, NULL);
if (rc != SQLITE_OK ){
fprintf(stderr, "Failed to select data\n");
fprintf(stderr, "SQL error: %s\n", NULL);
sqlite3_free(NULL);
sqlite3_close(db);
return 1;
}
У меня нет проблем с его запуском, и функция, которую я пытаюсь использовать, - это тот же код, заключенный в
void open_Database(db){//sqlite code}
Вызов функции:
open_Database(db) (same db declared in the main routine)