16
16
***************************************************************************/
17
17
18
18
#include < QSettings>
19
- #include < QMessageBox>
20
19
#include < QInputDialog>
20
+ #include < QMessageBox>
21
21
22
22
#include < QtSql/QSqlDatabase>
23
23
#include < QtSql/QSqlError>
@@ -31,6 +31,8 @@ QgsMssqlNewConnection::QgsMssqlNewConnection( QWidget *parent, const QString& co
31
31
{
32
32
setupUi ( this );
33
33
34
+ lblWarning->hide ();
35
+
34
36
if ( !connName.isEmpty () )
35
37
{
36
38
// populate the dialog with the information stored for the connection
@@ -40,7 +42,8 @@ QgsMssqlNewConnection::QgsMssqlNewConnection( QWidget *parent, const QString& co
40
42
QString key = " /MSSQL/connections/" + connName;
41
43
txtService->setText ( settings.value ( key + " /service" ).toString () );
42
44
txtHost->setText ( settings.value ( key + " /host" ).toString () );
43
- txtDatabase->setText ( settings.value ( key + " /database" ).toString () );
45
+ listDatabase->addItem ( settings.value ( key + " /database" ).toString () );
46
+ listDatabase->setCurrentRow ( 0 );
44
47
cb_geometryColumns->setChecked ( settings.value ( key + " /geometryColumns" , true ).toBool () );
45
48
cb_allowGeometrylessTables->setChecked ( settings.value ( key + " /allowGeometrylessTables" , true ).toBool () );
46
49
cb_useEstimatedMetadata->setChecked ( settings.value ( key + " /estimatedMetadata" , false ).toBool () );
@@ -69,15 +72,6 @@ void QgsMssqlNewConnection::accept()
69
72
QString baseKey = " /MSSQL/connections/" ;
70
73
settings.setValue ( baseKey + " selected" , txtName->text () );
71
74
72
- if ( chkStorePassword->isChecked () &&
73
- QMessageBox::question ( this ,
74
- tr ( " Saving passwords" ),
75
- tr ( " WARNING: You have opted to save your password. It will be stored in plain text in your project files and in your home directory on Unix-like systems, or in your user profile on Windows. If you do not want this to happen, please press the Cancel button.\n " ),
76
- QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Cancel )
77
- {
78
- return ;
79
- }
80
-
81
75
// warn if entry was renamed to an existing connection
82
76
if (( mOriginalConnName .isNull () || mOriginalConnName .compare ( txtName->text (), Qt::CaseInsensitive ) != 0 ) &&
83
77
( settings.contains ( baseKey + txtName->text () + " /service" ) ||
@@ -98,9 +92,16 @@ void QgsMssqlNewConnection::accept()
98
92
}
99
93
100
94
baseKey += txtName->text ();
95
+ QString database;
96
+ QListWidgetItem* item = listDatabase->currentItem ();
97
+ if ( item && item->text () != " (from service)" )
98
+ {
99
+ database = item->text ();
100
+ }
101
+
101
102
settings.setValue ( baseKey + " /service" , txtService->text () );
102
103
settings.setValue ( baseKey + " /host" , txtHost->text () );
103
- settings.setValue ( baseKey + " /database" , txtDatabase-> text () );
104
+ settings.setValue ( baseKey + " /database" , database );
104
105
settings.setValue ( baseKey + " /username" , chkStoreUsername->isChecked () ? txtUsername->text () : " " );
105
106
settings.setValue ( baseKey + " /password" , chkStorePassword->isChecked () ? txtPassword->text () : " " );
106
107
settings.setValue ( baseKey + " /saveUsername" , chkStoreUsername->isChecked () ? " true" : " false" );
@@ -117,6 +118,11 @@ void QgsMssqlNewConnection::on_btnConnect_clicked()
117
118
testConnection ();
118
119
}
119
120
121
+ void QgsMssqlNewConnection::on_btnListDatabase_clicked ()
122
+ {
123
+ listDatabases ();
124
+ }
125
+
120
126
void QgsMssqlNewConnection::on_cb_trustedConnection_clicked ()
121
127
{
122
128
if ( cb_trustedConnection->checkState () == Qt::Checked )
@@ -137,32 +143,36 @@ void QgsMssqlNewConnection::on_cb_trustedConnection_clicked()
137
143
138
144
QgsMssqlNewConnection::~QgsMssqlNewConnection ()
139
145
{
146
+ delete bar;
140
147
}
141
148
142
- void QgsMssqlNewConnection::testConnection ()
149
+ bool QgsMssqlNewConnection::testConnection ( QString testDatabase )
143
150
{
144
- if ( txtService->text ().isEmpty () )
151
+ bar->pushMessage ( " Testing connection" , " ....." );
152
+ // Gross but needed to show the last message.
153
+ qApp->processEvents ();
154
+
155
+ if ( txtService->text ().isEmpty () && txtHost->text ().isEmpty () )
145
156
{
146
- if ( txtHost->text ().isEmpty () )
147
- {
148
- QMessageBox::information ( this ,
149
- tr ( " Test connection" ),
150
- tr ( " Connection failed - Host name hasn't been specified.\n\n " ) );
151
- return ;
152
- }
157
+ bar->clearWidgets ();
158
+ bar->pushWarning ( tr ( " Connection Failed" ), tr ( " Host name hasn't been specified' " ) );
159
+ return false ;
160
+ }
153
161
154
- if ( txtDatabase->text ().isEmpty () )
155
- {
156
- QMessageBox::information ( this ,
157
- tr ( " Test connection" ),
158
- tr ( " Connection failed - Database name hasn't been specified.\n\n " ) );
159
- return ;
160
- }
162
+ QString database;
163
+ QListWidgetItem* item = listDatabase->currentItem ();
164
+ if ( !testDatabase.isEmpty () )
165
+ {
166
+ database = testDatabase;
167
+ }
168
+ else if ( item && item->text () != " (from service)" )
169
+ {
170
+ database = item->text ();
161
171
}
162
172
163
173
QSqlDatabase db = QgsMssqlProvider::GetDatabase ( txtService->text ().trimmed (),
164
174
txtHost->text ().trimmed (),
165
- txtDatabase-> text (). trimmed () ,
175
+ database ,
166
176
txtUsername->text ().trimmed (),
167
177
txtPassword->text ().trimmed () );
168
178
@@ -171,19 +181,54 @@ void QgsMssqlNewConnection::testConnection()
171
181
172
182
if ( !db.open () )
173
183
{
174
- QMessageBox::information ( this ,
175
- tr ( " Test connection" ),
176
- db. lastError (). text () ) ;
184
+ bar-> clearWidgets ();
185
+ bar-> pushWarning ( tr ( " Error opening connection" ), db. lastError (). text () );
186
+ return false ;
177
187
}
178
188
else
179
189
{
180
- QString dbName = txtDatabase->text ();
181
- if ( dbName.isEmpty () )
190
+ if ( database.isEmpty () )
191
+ {
192
+ database = txtService->text ();
193
+ }
194
+ bar->clearWidgets ();
195
+ }
196
+
197
+ return true ;
198
+ }
199
+
200
+ void QgsMssqlNewConnection::listDatabases ()
201
+ {
202
+ testConnection ( " master" );
203
+ listDatabase->clear ();
204
+ QString queryStr = " SELECT name FROM master..sysdatabases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')" ;
205
+
206
+ QSqlDatabase db = QgsMssqlProvider::GetDatabase ( txtService->text ().trimmed (),
207
+ txtHost->text ().trimmed (),
208
+ " master" ,
209
+ txtUsername->text ().trimmed (),
210
+ txtPassword->text ().trimmed () );
211
+ if ( db.open () )
212
+ {
213
+ QSqlQuery query = QSqlQuery ( db );
214
+ query.setForwardOnly ( true );
215
+ query.exec ( queryStr );
216
+
217
+ if ( !txtService->text ().isEmpty () )
182
218
{
183
- dbName = txtService-> text ( );
219
+ listDatabase-> addItem ( " (from service) " );
184
220
}
185
- QMessageBox::information ( this ,
186
- tr ( " Test connection" ),
187
- tr ( " Connection to %1 was successful" ).arg ( dbName ) );
221
+
222
+ if ( query.isActive () )
223
+ {
224
+ while ( query.next () )
225
+ {
226
+ QString name = query.value ( 0 ).toString ();
227
+ listDatabase->addItem ( name );
228
+ }
229
+ listDatabase->setCurrentRow ( 0 );
230
+ }
231
+ db.close ();
188
232
}
189
233
}
234
+
0 commit comments