10
10
#include < qdir.h>
11
11
#include < projects.h>
12
12
#include < qdom.h>
13
+ #include < QMessageBox>
13
14
14
15
#include < qgsapplication.h>
15
16
#include < qgslayerprojectionselector.h>
@@ -200,13 +201,10 @@ bool QgsSpatialRefSys::createFromSrid(long theSrid)
200
201
sqlite3_stmt *myPreparedStatement;
201
202
int myResult;
202
203
// check the db is available
203
- myResult = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &myDatabase);
204
+ myResult = openDb (myDatabaseFileName, &myDatabase);
204
205
if (myResult)
205
206
{
206
- std::cout << " Can't open database: " << sqlite3_errmsg (myDatabase) << std::endl;
207
- // XXX This will likely never happen since on open, sqlite creates the
208
- // database if it does not exist.
209
- assert (myResult == 0 );
207
+ return false ;
210
208
}
211
209
212
210
/*
@@ -319,13 +317,10 @@ bool QgsSpatialRefSys::createFromEpsg(long theEpsg)
319
317
sqlite3_stmt *myPreparedStatement;
320
318
int myResult;
321
319
// check the db is available
322
- myResult = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &myDatabase);
320
+ myResult = openDb (myDatabaseFileName, &myDatabase);
323
321
if (myResult)
324
322
{
325
- std::cout << " Can't open database: " << sqlite3_errmsg (myDatabase) << std::endl;
326
- // XXX This will likely never happen since on open, sqlite creates the
327
- // database if it does not exist.
328
- assert (myResult == 0 );
323
+ return false ;
329
324
}
330
325
331
326
/*
@@ -404,13 +399,10 @@ bool QgsSpatialRefSys::createFromSrsId (long theSrsId)
404
399
sqlite3_stmt *myPreparedStatement;
405
400
int myResult;
406
401
// check the db is available
407
- myResult = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &myDatabase);
402
+ myResult = openDb (myDatabaseFileName, &myDatabase);
408
403
if (myResult)
409
404
{
410
- std::cout << " Can't open database: " << sqlite3_errmsg (myDatabase) << std::endl;
411
- // XXX This will likely never happen since on open, sqlite creates the
412
- // database if it does not exist.
413
- assert (myResult == 0 );
405
+ return false ;
414
406
}
415
407
416
408
/*
@@ -601,18 +593,13 @@ QgsSpatialRefSys::RecordMap QgsSpatialRefSys::getRecord(QString theSql)
601
593
// Get the full path name to the sqlite3 spatial reference database.
602
594
myDatabaseFileName = QgsApplication::srsDbFilePath ();
603
595
604
-
605
596
// check the db is available
606
- myResult = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &myDatabase);
597
+ myResult = openDb (myDatabaseFileName, &myDatabase);
607
598
if (myResult)
608
599
{
609
- std::cout << " Can't open database: " << sqlite3_errmsg (myDatabase) << std::endl;
610
- // XXX This will likely never happen since on open, sqlite creates the
611
- // database if it does not exist.
612
- assert (myResult == 0 );
600
+ return myMap;
613
601
}
614
602
615
-
616
603
myResult = sqlite3_prepare (myDatabase, theSql.utf8 (), theSql.length (), &myPreparedStatement, &myTail);
617
604
// XXX Need to free memory from the error msg if one is set
618
605
if (myResult == SQLITE_OK && sqlite3_step (myPreparedStatement) == SQLITE_ROW)
@@ -644,16 +631,12 @@ QgsSpatialRefSys::RecordMap QgsSpatialRefSys::getRecord(QString theSql)
644
631
}
645
632
646
633
// check the db is available
647
- myResult = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &myDatabase);
634
+ myResult = openDb (myDatabaseFileName, &myDatabase);
648
635
if (myResult)
649
636
{
650
- std::cout << " Can't open database: " << sqlite3_errmsg (myDatabase) << std::endl;
651
- // XXX This will likely never happen since on open, sqlite creates the
652
- // database if it does not exist.
653
- assert (myResult == 0 );
637
+ return myMap;
654
638
}
655
639
656
-
657
640
myResult = sqlite3_prepare (myDatabase, theSql.utf8 (), theSql.length (), &myPreparedStatement, &myTail);
658
641
// XXX Need to free memory from the error msg if one is set
659
642
if (myResult == SQLITE_OK && sqlite3_step (myPreparedStatement) == SQLITE_ROW)
@@ -937,13 +920,10 @@ long QgsSpatialRefSys::findMatchingProj()
937
920
938
921
939
922
// check the db is available
940
- myResult = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &myDatabase);
923
+ myResult = openDb (myDatabaseFileName, &myDatabase);
941
924
if (myResult)
942
925
{
943
- std::cout << " QgsSpatialRefSys::findMatchingProj Can't open database: " << sqlite3_errmsg (myDatabase) << std::endl;
944
- // XXX This will likely never happen since on open, sqlite creates the
945
- // database if it does not exist.
946
- assert (myResult == 0 );
926
+ return 0 ;
947
927
}
948
928
949
929
myResult = sqlite3_prepare (myDatabase, mySql.utf8 (), mySql.length (), &myPreparedStatement, &myTail);
@@ -979,10 +959,9 @@ long QgsSpatialRefSys::findMatchingProj()
979
959
980
960
myDatabaseFileName = QDir::homeDirPath () + " /.qgis/qgis.db" ;
981
961
// check the db is available
982
- myResult = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &myDatabase);
962
+ myResult = openDb (myDatabaseFileName, &myDatabase);
983
963
if (myResult)
984
964
{
985
- std::cout << " QgsSpatialRefSys::findMatchingProj Can't open database: " << sqlite3_errmsg (myDatabase) << std::endl;
986
965
std::cout << " This is a non critical error" << std::endl;
987
966
return 0 ;
988
967
}
@@ -1258,13 +1237,10 @@ QString QgsSpatialRefSys::getProj4FromSrsId(const int theSrsId)
1258
1237
1259
1238
sqlite3 *db;
1260
1239
int rc;
1261
- rc = sqlite3_open (myDatabaseFileName. toLocal8Bit (). data () , &db);
1240
+ rc = openDb (myDatabaseFileName, &db);
1262
1241
if (rc)
1263
1242
{
1264
- std::cout << " Can't open database: " << sqlite3_errmsg (db) << std::endl;
1265
- // XXX This will likely never happen since on open, sqlite creates the
1266
- // database if it does not exist.
1267
- assert (rc == 0 );
1243
+ return QString ();
1268
1244
}
1269
1245
// prepare the sql statement
1270
1246
const char *pzTail;
@@ -1288,3 +1264,25 @@ QString QgsSpatialRefSys::getProj4FromSrsId(const int theSrsId)
1288
1264
// assert(myProjString.length() > 0);
1289
1265
return myProjString;
1290
1266
}
1267
+
1268
+ int QgsSpatialRefSys::openDb (QString path, sqlite3 **db)
1269
+ {
1270
+ #ifdef QGISDEBUG
1271
+ std::cout << " QgsSpatialRefSys::openDb path = " << path.toLocal8Bit ().data () << std::endl;
1272
+ #endif
1273
+ int myResult = sqlite3_open (path.toLocal8Bit ().data (), db);
1274
+
1275
+ if (myResult)
1276
+ {
1277
+ std::cout << " Can't open database: " << sqlite3_errmsg (*db) << std::endl;
1278
+
1279
+ // XXX This will likely never happen since on open, sqlite creates the
1280
+ // database if it does not exist.
1281
+ // ... unfortunately it happens on Windows
1282
+ QMessageBox::warning (0 ," Error" ," Could not open SRS database "
1283
+ + path + " <br>Error(" + QString::number (myResult)
1284
+ + " ): " + QString (sqlite3_errmsg (*db)) );
1285
+
1286
+ }
1287
+ return myResult;
1288
+ }
0 commit comments