| 230 | } |
| 231 | |
| 232 | bool CDatabase::OpenODBCDatabase(const CParameterDatabase *pPara, |
| 233 | const QString &szConnectName) |
| 234 | { |
| 235 | if(!pPara) return false; |
| 236 | |
| 237 | if(!szConnectName.isEmpty()) |
| 238 | m_szConnectName = szConnectName; |
| 239 | |
| 240 | // 打开或创建数据库 |
| 241 | m_database = QSqlDatabase::addDatabase("QODBC", m_szConnectName); |
| 242 | QString szDbName = pPara->GetDatabaseName(); |
| 243 | if(szDbName.isEmpty()) { |
| 244 | #if DEBUG |
| 245 | szDbName = "remote_control_dev"; |
| 246 | #else |
| 247 | szDbName = "remote_control"; |
| 248 | #endif |
| 249 | } |
| 250 | m_database.setDatabaseName(szDbName); |
| 251 | |
| 252 | if (!m_database.open()) { |
| 253 | SetError("Failed to open odbc database: " + m_database.databaseName() |
| 254 | + "; Connect name: " + m_database.connectionName() |
| 255 | + "; Error: " + m_database.lastError().text() |
| 256 | ); |
| 257 | qCritical(log) << GetError(); |
| 258 | return false; |
| 259 | } |
| 260 | |
| 261 | m_bOwner = true; |
| 262 | |
| 263 | QSqlQuery query(GetDatabase()); |
| 264 | bool success = query.exec("CREATE DATABASE IF NOT EXISTS " + szDbName); |
| 265 | if (!success) { |
| 266 | SetError("Failed to create database: " + szDbName |
| 267 | + "; Error: " + query.lastError().text() |
| 268 | + "; Sql: " + query.executedQuery()); |
| 269 | qCritical(log) << GetError(); |
| 270 | return false; |
| 271 | } |
| 272 | |
| 273 | success = query.exec("use " + szDbName); |
| 274 | if (!success) { |
| 275 | SetError("Failed to use " + szDbName |
| 276 | + "; Error: " + query.lastError().text() |
| 277 | + "; Sql: " + query.executedQuery()); |
| 278 | qCritical(log) << GetError(); |
| 279 | return false; |
| 280 | } |
| 281 | |
| 282 | qInfo(log) << "Open odbc database:" << m_database.databaseName() |
| 283 | << "Connect name:" << m_database.connectionName(); |
| 284 | |
| 285 | return OnInitializeDatabase(); |
| 286 | } |
| 287 | |
| 288 | bool CDatabase::OnInitializeDatabase() |
| 289 | { |
nothing calls this directly
no test coverage detected