Inclusion de fichiers .cpp
Bonjour,
je crée actuellement une application de gestion, et pour simplifier le code, j'ai décidé de rassembler tout ce qui concerne la base de données dans un fichier 'sql.cpp'. Le voici :
Code:
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
| #include <QWidget>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QSqlQuery>
#include <QSqlError>
QWidget *GLOB_WI_base;
QSqlDatabase GLOB_database;
QString GLOB_database_path;
QString GLOB_database_host;
QString GLOB_database_port;
QString GLOB_database_user;
QString GLOB_database_password;
QSqlQuery GLOB_query;
bool getDatabaseParams()
{
QFile Database_params_file("G:/tests/BDE/calls.ini");
if (!Database_params_file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox::critical(GLOB_WI_base,"Error","Cannot find 'calls.ini'. Be sure the file's in the same folder than 'CALLS.FDB'.");
return false;
}
QTextStream Stream(&Database_params_file);
QString Database_params_file_text;
Database_params_file_text.append(Stream.readAll());
QMessageBox::information(GLOB_WI_base,"",Database_params_file_text);
int Index_database_path=Database_params_file_text.indexOf("Database path: ");
int Index_database_host=Database_params_file_text.indexOf("Host: ");
int Index_database_port=Database_params_file_text.indexOf("Port: ");
int Index_database_user=Database_params_file_text.indexOf("User: ");
int Index_database_password=Database_params_file_text.indexOf("Password: ");
GLOB_database_path=Database_params_file_text.mid(Index_database_path+15,Index_database_host-(Index_database_path+15));
GLOB_database_host=Database_params_file_text.mid(Index_database_host+6,Index_database_port-(Index_database_host+6));
GLOB_database_port=Database_params_file_text.mid(Index_database_port+6,Index_database_user-(Index_database_port+6));
GLOB_database_user=Database_params_file_text.mid(Index_database_user+6,Index_database_password-(Index_database_user+6));
GLOB_database_password=Database_params_file_text.mid(Index_database_password+10,Database_params_file_text.size()-(Index_database_password+10));
QMessageBox::information(GLOB_WI_base,"",GLOB_database_path+"\n"+GLOB_database_host+"\n"+GLOB_database_port+"\n"+GLOB_database_user+"\n"+GLOB_database_password);
return true;
}
bool connectDatabase()
{
if(getDatabaseParams()==true)
{
GLOB_database=QSqlDatabase::addDatabase("QIBASE");
GLOB_database.setDatabaseName(GLOB_database_path);
GLOB_database.setHostName(GLOB_database_host);
GLOB_database.setPort(GLOB_database_port.toInt());
GLOB_database.setUserName(GLOB_database_user);
GLOB_database.setPassword(GLOB_database_password);
if(!GLOB_database.open()){
QMessageBox::critical(GLOB_WI_base, "Connection failed", "Error while opening the database : "+GLOB_database.lastError().text());
}else{
GLOB_query=QSqlQuery(GLOB_database);
return true;
}
}
return false;
}
/*
void changeDatabaseParams(QString PAR_GLOB_database_path, QString PAR_GLOB_database_host, QString PAR_GLOB_database_port, QString PAR_GLOB_database_user, QString PAR_GLOB_database_password)
{
}
*/
/***************
* SQL QUERIES *
***************/
void getUsers(QList<QString> &PAR_list_users)
{
GLOB_query.prepare("SELECT CO_NAME FROM TA_COLLEAGUE ORDER BY CO_NAME;");
if(!GLOB_query.exec())
QMessageBox::critical(GLOB_WI_base, "Query execution error", "Error occured while query execution : "+GLOB_query.lastError().text());
while(GLOB_query.next())
{
bool New=true;
for(int i=0;i<PAR_list_users.count();i++)
{
if(GLOB_query.value(0).toString()==PAR_list_users[i])
New=false;
}
if(New)
PAR_list_users.append(GLOB_query.value(0).toString());
}
} |
Jusqu'à maintenant, je n'avais que des fonctions void, et tout fonctionnait correctement. Depuis que j'ai modifié les fonction 'getDatabaseParams' et connectDatabase' pour qu'elles renvoient un booléen, je n'arrive plus à compiler mon programme. J'ai l'erreur 'Multiple definition of ...' pour chaque variable globales et chaque fonction. Apparemment ces variables et fonctions seraient déjà déclarées dans le fichier 'win_main.o', 'WIN_main' étant ma fenêtre principale, et le seul endroit où est inclus mon fichier 'sql.cpp'. En fait, le problème apparaît dès que j'inclus mon fichier quelque part. Une idée?:mrgreen: