QtLingo 1
QtLingo is an Application to make Qt Computer Translations easier
MySqlDbtModel.cpp
Go to the documentation of this file.
1#include "MySqlDbtModel.h"
2
3
7MySqlDbtModel::MySqlDbtModel(MyLanguageModel *thisLanguageModel, MyConstants *thisConstant, QObject *parent) : QObject(parent), myLanguageModel(thisLanguageModel), myConstants(thisConstant)
8{
9}
10
15{
16 #ifdef USE_SQL_FLAG
17 if (myDb.isOpen()) { myDb.close(); }
18 #endif
19}
20
24bool MySqlDbtModel::isDbTable(const QString &thisTable)
25{
26 setMessage("isDatabase");
27 #ifdef USE_SQL_FLAG
28 QStringList theTables = myDb.tables();
29 if (theTables.contains(thisTable, Qt::CaseInsensitive)) { return true; }
30 else { return false; }
31 #else
32 return true;
33 #endif
34}
35#ifdef USE_SQL_FLAG
36
40void MySqlDbtModel::setSqlDatabase(QSqlDatabase thisDatabase)
41{
42 setMessage("setSqlDatabase");
43 myDb = thisDatabase;
44}
45
49QSqlDatabase MySqlDbtModel::getSqlDatabase()
50{
51 setMessage("getSqlDatabase");
52 return myDb;
53}
54#endif
55
60{
61 setMessage("getSqlDriver");
62 return mySqlDriver;
63}
64
68void MySqlDbtModel::setSqlTableName(const QString &thisTableName)
69{
70 setMessage("setSqlTableName");
71 myTableName = thisTableName;
72}
73
78{
79 setMessage("getSqlTableName");
80 return myTableName;
81}
82
86void MySqlDbtModel::setSqlHostName(const QString &thisHostName)
87{
88 setMessage("setSqlHostName");
89 myHostName = thisHostName;
90}
91
96{
97 setMessage("getSqlHostName");
98 return myHostName;
99}
100
104void MySqlDbtModel::setSqlUserName(const QString &thisUserName)
105{
106 setMessage("setSqlUserName");
107 myUserName = thisUserName;
108}
109
114{
115 setMessage("getSqlUserName");
116 return myUserName;
117}
118
122void MySqlDbtModel::setSqlDatabaseName(const QString &thisPassword)
123{
124 setMessage("setSqlDatabaseName");
125 myDatabaseName = thisPassword;
126}
127
132{
133 setMessage("getSqlDatabaseName");
134 return myDatabaseName;
135}
136
140void MySqlDbtModel::setSqlPassword(const QString &thisPassword)
141{
142 setMessage("setSqlPassword");
143 myPassword = thisPassword;
144}
145
150{
151 setMessage("getSqlPassword");
152 return myPassword;
153}
154
158void MySqlDbtModel::setConnectionName(const QString &thisConnectionName)
159{
160 setMessage("setConnectionName");
161 myConnectionName = thisConnectionName;
162}
163
168{
169 return myInsertID;
170}
171
175void MySqlDbtModel::setRecordID(const QString &thisRecordID)
176{
177 myInsertID = thisRecordID;
178}
179
184{
185 setMessage("getConnectionName");
186 return myConnectionName;
187}
188
192void MySqlDbtModel::setSqlDriver(const QString &thisDriver)
193{
194 setMessage("setSqlDriver");
195#ifdef USE_SQL_FLAG
196 QString theDriver = thisDriver;
197 if (theDriver.length() == 0) { theDriver = myConstants->MY_SQL_DEFAULT; }
198 // Check for Database memory setting
199 // ui->checkBoxSettingsMemory->isChecked() || combobox
200 // Database Driver
201 if (theDriver == ":memory:")
202 {
203 // SQLite version 3 SQLite version 2 Note: obsolete since Qt 5.14
204 mySqlDriver = theDriver;
205 }
206 else if (theDriver == "QSQLITE" || theDriver == "QSQLITE2")
207 {
208 // SQLite version 3 SQLite version 2 Note: obsolete since Qt 5.14
209 mySqlDriver = theDriver;
210 }
211 else if (theDriver == "QMYSQL" || theDriver == "MARIADB")
212 {
213 // MySQL or MariaDB (version 5.0 and above)
214 mySqlDriver = theDriver;
215 }
216 else if (theDriver == "QPSQL")
217 {
218 // PostgreSQL (versions 7.3 and above)
219 mySqlDriver = theDriver;
220 }
221 else if (theDriver == "QDB2")
222 {
223 // IBM DB2 (version 7.1 and above)
224 mySqlDriver = theDriver;
225 }
226 else if (theDriver == "QIBASE")
227 {
228 // Borland InterBase
229 mySqlDriver = theDriver;
230 }
231 else if (theDriver == "QOCI")
232 {
233 // Oracle Call Interface Driver
234 mySqlDriver = theDriver;
235 }
236 else if (theDriver == "QTDS")
237 {
238 // Sybase Adaptive Server - Note: obsolete since Qt 4.7
239 mySqlDriver = theDriver;
240 }
241 else
242 {
243 mySqlDriver = theDriver;
244 }
245#endif
246} // end setSqlDriver
247
252{
253 setMessage("createDataBaseConnection");
254#ifdef USE_SQL_FLAG
255 // Make sure Drive is set
256 if (mySqlDriver == "NOTSET") { setSqlDriver(myConstants->MY_SQL_DEFAULT); }
257 QString theDb = getSqlDatabaseName();
258 // Database Driver
259 if (mySqlDriver == ":memory:")
260 {
261 myDb = QSqlDatabase::addDatabase("QSQLITE");
262 myDb.setDatabaseName(":memory:");
263 }
264 else
265 {
266 if (mySqlDriver == "QSQLITE" || mySqlDriver == "QSQLITE2")
267 {
268 // SQLite version 3 and SQLite version 2 Note: obsolete since Qt 5.14
269 if (theDb.contains(".db"))
270 {
272 {
273 qCritical() << "createDataBaseConnection new DB: " << theDb;
274 }
275 }
276 else
277 {
278 theDb = QString("%1%2%3.db").arg(myLanguageModel->mySetting->getAppDataLocation(), QDir::separator(), getSqlDatabaseName());
279 }
280 //
281 myDb = QSqlDatabase::addDatabase(mySqlDriver);
282 myDb.setDatabaseName(theDb);
283 // myDb.setHostName(getSqlHostName());
284 // myDb.setUserName(getSqlUserName());
285 // myDb.setPassword(getSqlPassword());
286 //
287 }
288 else if (mySqlDriver == "QDB2")
289 {
290 // IBM DB2 (version 7.1 and above)
291 myDb = QSqlDatabase::addDatabase(mySqlDriver, myConnectionName);
292 myDb.setHostName(getSqlHostName());
293 myDb.setDatabaseName(getSqlDatabaseName());
294 myDb.setUserName(getSqlUserName());
295 myDb.setPassword(getSqlPassword());
296 }
297 else if (mySqlDriver == "QIBASE")
298 {
299 // Borland InterBase
300 myDb = QSqlDatabase::addDatabase(mySqlDriver, myConnectionName);
301 myDb.setHostName(getSqlHostName());
302 myDb.setDatabaseName(getSqlDatabaseName());
303 myDb.setUserName(getSqlUserName());
304 myDb.setPassword(getSqlPassword());
305 }
306 else if (mySqlDriver == "QMYSQL" || mySqlDriver == "MARIADB")
307 {
308 // MySQL or MariaDB (version 5.0 and above)
309 myDb = QSqlDatabase::addDatabase(mySqlDriver, myConnectionName);
310 myDb.setHostName(getSqlHostName());
311 myDb.setDatabaseName(getSqlDatabaseName());
312 myDb.setUserName(getSqlUserName());
313 myDb.setPassword(getSqlPassword());
314 }
315 else if (mySqlDriver == "QOCI")
316 {
317 // Oracle Call Interface Driver
318 myDb = QSqlDatabase::addDatabase(mySqlDriver, myConnectionName);
319 myDb.setHostName(getSqlHostName());
320 myDb.setDatabaseName(getSqlDatabaseName());
321 myDb.setUserName(getSqlUserName());
322 myDb.setPassword(getSqlPassword());
323 }
324 else if (mySqlDriver == "QPSQL")
325 {
326 // PostgreSQL (versions 7.3 and above)
327 myDb = QSqlDatabase::addDatabase(mySqlDriver, myConnectionName);
328 myDb.setHostName(getSqlHostName());
329 myDb.setDatabaseName(getSqlDatabaseName());
330 myDb.setUserName(getSqlUserName());
331 myDb.setPassword(getSqlPassword());
332 }
333 else if (mySqlDriver == "QTDS")
334 {
335 // Sybase Adaptive Server - Note: obsolete since Qt 4.7
336 myDb = QSqlDatabase::addDatabase(mySqlDriver, myConnectionName);
337 myDb.setHostName(getSqlHostName());
338 myDb.setDatabaseName(getSqlDatabaseName());
339 myDb.setUserName(getSqlUserName());
340 myDb.setPassword(getSqlPassword());
341 }
342 } // end ! if (:memory:)
343 if (!myDb.open())
344 {
345 if(!QSqlDatabase::isDriverAvailable(mySqlDriver))
346 {
347 myLanguageModel->mySetting->showMessageBox(tr("Database SQL Driver is missing").toLocal8Bit(), tr("Install SQL").toLocal8Bit(), myLanguageModel->mySetting->Critical);
348 return false;
349 }
350 else
351 {
352 myLanguageModel->mySetting->showMessageBox(QString("%1: %2").arg(tr("Cannot open database"), myDb.lastError().text()).toLocal8Bit(), tr("Unable to establish a database connection").toLocal8Bit(), myLanguageModel->mySetting->Critical);
353 return false;
354 }
355 }
356 // Set Settings
359#endif
360 return true;
361} // end createDataBaseConnection
362
366bool MySqlDbtModel::runQuery(const QString &thisQuery)
367{
368 setMessage("runQuery=" + thisQuery);
369 #ifdef USE_SQL_FLAG
370 QSqlQuery theQuery;
371 if (theQuery.exec(thisQuery))
372 {
373 setRecordID(theQuery.lastInsertId().toString());
374 return true;
375 }
376 else
377 {
378 qCritical() << "Error running Query: " << thisQuery << theQuery.lastError().text() << ", SqLite error code:" << theQuery.lastError();
379 setRecordID("-1");
380 return false;
381 }
382 #else
383 return true;
384 #endif
385}
386
390bool MySqlDbtModel::moveDb(const QString &thisSourceFile,const QString &thisSourcePath, const QString &thisDestinationFolder)
391{
392 setMessage("moveDb");
393#ifdef USE_SQL_FLAG
394 QFile file(QString("%1%2%3").arg(thisSourcePath, QDir::separator(), thisSourceFile));
395 //
396 QString theNewDatabaseName = QString("%1%2%3").arg(thisDestinationFolder, QDir::separator(), thisSourceFile);
397 //
398 if (myLanguageModel->mySetting->isFileExists(theNewDatabaseName))
399 {
400 if (!myLanguageModel->mySetting->questionYesNo("Overwrite Database", "Are you sure you want to overwrite existing Database?"))
401 {
402 return true;
403 }
404 }
405 //
406 if (myDb.isOpen()) { myDb.close(); }
407 if (file.rename(theNewDatabaseName))
408 {
409 myDatabaseName = theNewDatabaseName;
411 }
412 else { return true; }
413#else
414 return true;
415#endif
416}
417
422QString MySqlDbtModel::runProcces(const QString &thisExePath, const QString &thisArgument, bool isWait, int thisWaitTimeSec)
423{
424 QProcess *thisProcess = new QProcess(this);
425 if (isWait)
426 {
427 thisProcess->start(thisExePath, QStringList() << thisArgument);
428 // default wait time 30 sec
429 if(!thisProcess->waitForStarted()) { qWarning() << tr("runProcces cannot start process"); }
430 // wait time
431 int waitTime = thisWaitTimeSec * 1000; // 60000 = 60 sec divide by 1000
432 // now wait
433 if (!thisProcess->waitForFinished(waitTime)) { qWarning() << tr("runProcces timeout .."); }
434 }
435 else
436 {
437 thisProcess->start(thisExePath, QStringList() << thisArgument);
438 thisProcess->waitForFinished();
439 }
440 //
441 thisProcess->setProcessChannelMode(QProcess::MergedChannels);
442 myRunReturnCode = thisProcess->exitCode();
443 return QString(thisProcess->readAllStandardOutput().simplified());
444}
445
450{
451 return myRunReturnCode;
452}
453
458{
459 isDebugMessage = thisState;
460}
461
466{
467 return isDebugMessage;
468}
469
473void MySqlDbtModel::setMessage(const QString &thisMessage)
474{
475 if (isDebugMessage)
476 {
477 qDebug() << thisMessage;
478 //std::cout << thisMessage.toStdString() << std::endl;
479 }
480}
481
Constants are defined as const QString, starting with MY_ all capps.
Definition: MyConstants.h:12
const QString MY_SQL_DB_NAME
MY_SQL_DB_NAME
Definition: MyConstants.h:21
const QString MY_SQL_DEFAULT
SQL_DEFAULT
Definition: MyConstants.h:18
const QString MY_SQL_DB_TYPE
MY_SQL_DB_TYPE
Definition: MyConstants.h:22
Abstact Model used for ComboBox. /class MyLanguageModel.
MyOrgSettings * mySetting
mySetting
bool isFileExists(const QString &thisFile)
File Functions.
@ Critical
Critical
Definition: MyOrgSettings.h:75
QString getAppDataLocation()
get AppData Location
bool questionYesNo(const char *thisTitle, const char *thisQuestion) const
question Yes No
QVariant showMessageBox(const QString &thisTitle, const QString &thisMessage, MyMessageTypes thisMessageType) const
show Message Box information, question, warning, critica
void writeSettings(const QString &thisSetting, const QString &thisValue)
write Settings
void setRecordID(const QString &thisRecordID)
set RecordID
QString getSqlTableName()
getSqlTableName
MyConstants * myConstants
myConstants
Definition: MySqlDbtModel.h:28
void setSqlTableName(const QString &thisTableName)
setSqlTableName
MySqlDbtModel(MyLanguageModel *thisLanguageModel=nullptr, MyConstants *thisConstant=nullptr, QObject *parent=0)
MySqlDbtModel.
MyLanguageModel * myLanguageModel
myLanguageModel
Definition: MySqlDbtModel.h:27
bool createDataBaseConnection()
create DataBase Connection
void setSqlUserName(const QString &thisUserName)
setSqlUserName
bool isDbTable(const QString &thisTable)
isDbTable
void setConnectionName(const QString &thisConnectionName)
set Connection Name
void setMessage(const QString &thisMessage)
setMessage
void setDebugMessage(bool thisState)
set Debug Message
QString getSqlDatabaseName()
getSqlDatabaseName
~MySqlDbtModel()
~MySqlDbtModel
void setSqlDatabaseName(const QString &thisPassword)
setSqlDatabaseName
bool runQuery(const QString &thisQuery)
runQuery
QString getRecordID()
get RecordID
QString runProcces(const QString &thisExePath, const QString &thisArgument, bool isWait, int thisWaitTimeSec)
run Procces
void setSqlHostName(const QString &thisHostName)
setSqlHostName
bool getDebugMessage()
get Debug Message
QString getSqlPassword()
getSqlPassword
QString getConnectionName()
get Connection Name
void setSqlDriver(const QString &thisDriver)
setSqlDriver
void setSqlPassword(const QString &thisPassword)
setSqlPassword
int getRunReturnCode()
get Run Return Code
QString getSqlHostName()
getSqlHostName
bool moveDb(const QString &thisSourceFile, const QString &thisSourcePath, const QString &thisDestinationFolder)
Move Db.
QString getSqlUserName()
getSqlUserName
QString getSqlDriver()
getSqlDriver