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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?