コード例 #1
0
   int 
   DatabaseConnectionManager::GetCurrentDatabaseVersion()
   {
      SQLCommand command("select * from hm_dbversion");
      std::shared_ptr<DALRecordset> pRS = OpenRecordset(command);
      if (!pRS)
         return 0;

      int iRetVal = pRS->GetLongValue("value");

      return iRetVal;
   }
コード例 #2
0
ファイル: VLDatabase.cpp プロジェクト: OPRoS/Component
	void CVLDatabase::Clear()
	{
		ClearItems();
		if (opened)
		{
			try
			{
				CloseRecordset();
				connection->Execute(Format(TEXT("DELETE FROM %s"), (LPCTSTR)recordsetName.c_str()).c_str(),
					NULL, adCmdText | adExecuteNoRecords);
				OpenRecordset();
			}
			catch(_com_error &e)
			{
				ComErrorToException(e, string("Can not clear database"));
			}
		}
	}
コード例 #3
0
 std::shared_ptr<DALRecordset> 
 DatabaseConnectionManager::OpenRecordset(const SQLStatement &statement)
 {
    return OpenRecordset(statement.GetCommand());
 }
コード例 #4
0
ファイル: VLDatabase.cpp プロジェクト: OPRoS/Component
	void CVLDatabase::Open(const string &provider, const string &dataSource, const string &userId, const string &password,
		IVLDBOpenCallback * callback)
	{
		Close();
		string connectionString = Format(TEXT("Provider=%s;Data Source=%s;"), (LPCTSTR)provider.c_str(), (LPCTSTR)dataSource.c_str());

		try
		{
			HRESULT hr = E_FAIL;
			hr = connection.CreateInstance(__uuidof(Connection));
			if (FAILED(hr)) _com_raise_error(hr);

			hr = recordset.CreateInstance(__uuidof(Recordset));

			if (callback) callback->OnOpenState(string("Opening connection"));

			connection->Open(connectionString.c_str(), userId.c_str(), password.c_str(), adConnectUnspecified);
			connected = true;
			
			if (callback) callback->OnOpenState(string("Retrieving record count"));

			_RecordsetPtr r = connection->Execute((TEXT("SELECT COUNT(ID) AS RC FROM ") + recordsetName).c_str(), NULL, adCmdText);
			int rc = r->Fields->Item["RC"]->Value.lVal;

			if (callback) callback->OnOpenState(string("Allocating memory"));

			allCapacity = VLDBAllCapacity(rc);
			allItems = (VLDBItem**)malloc(sizeof(VLDBItem*) * allCapacity);

			if (callback) callback->OnOpenState(string("Opening recordset in forward only mode"));

			OpenRecordset(adOpenForwardOnly);
			if (callback)
			{
				callback->OnOpenState(string("Loading data"));
				callback->OnOpenProgress(false, rc);
			}
			DWORD dt = GetTickCount();
			while (!recordset->EndOfFile)
			{
				if (callback && GetTickCount() - dt > 300)
				{
					if (!callback->OnOpenProgress(true, allCount)) break;
					dt = GetTickCount();
				}
				if (record.idStatus != adFldOK ||
					record.featuresStatus != adFldOK ||
					record.faceIdStatus != adFldOK)
					throw exception("Can not open database\nError reading data");
				AddItem(record.id, record.features, record.featuresLength,
					record.faceId, record.faceIdLength / sizeof(TCHAR));
				recordset->MoveNext();
			}

			if (callback) callback->OnOpenState(string("Opening recordset"));
			OpenRecordset();
			
			if (callback) callback->OnOpenState(string("Done"));

			this->provider = provider;
			this->dataSource = dataSource;
		}
		catch (_com_error &e)
		{
			if (callback) callback->OnOpenState(string("Error"));
			try
			{
				Close();
			}
			catch (exception &)
			{
				// do nothing
			}
			ComErrorToException(e, string("Can not open database"));
		}
	}