/** Moves to the next record in the set. */ virtual void MoveToNext() { if( !ADORecordSet->ADOEOF ) { ADORecordSet->MoveNext(); } }
void CSiteDir::BuildFromDatabase() { WCHAR sql[256]; swprintf(sql, L"SELECT id,filename,type,file_size,file_date FROM files WHERE parent_id = %d", m_dbid); _variant_t va; ADODB::_RecordsetPtr recordset = m_pWebSite->m_siteDataConnection->Execute(sql, &va, ADODB::adCmdText); CArray<CSiteDir*,CSiteDir*> dirs; while (recordset->EndOfFile == false) { CSiteItem* pItem; BYTE type = recordset->Fields->Item[_bstr_t("type")]->Value.lVal; if (type == 1) // Directory { CSiteDir* pDir = new CSiteDir; pItem = pDir; strcpy(pDir->m_wfd.cFileName, _bstr_t(recordset->Fields->Item[_bstr_t("filename")]->Value)); _makepath(pDir->m_pathName.GetBuffer(512), NULL, m_pathName, pDir->m_wfd.cFileName, NULL); pDir->m_pathName.ReleaseBuffer(); dirs.Add(pDir); } else if (type == 2) // File { CSiteFile* pFile = new CSiteFile; pItem = pFile; strcpy(pFile->m_wfd.cFileName, _bstr_t(recordset->Fields->Item[_bstr_t("filename")]->Value)); pFile->m_wfd.nFileSizeLow = recordset->Fields->Item[_bstr_t("file_size")]->Value.lVal; } else ATLASSERT(0); if (pItem) { pItem->m_pWebSite = m_pWebSite; pItem->m_dbid = recordset->Fields->Item[_bstr_t("id")]->Value.lVal; // pItem->m_name = pItem->m_wfd.cFileName; // ?? // lastWriteDate double lastWriteTime = recordset->Fields->Item[_bstr_t("file_date")]->Value; SYSTEMTIME systime; VariantTimeToSystemTime(lastWriteTime, &systime); SystemTimeToFileTime(&systime, &pItem->m_wfd.ftLastWriteTime); AddChildTail(pItem); } recordset->MoveNext(); } for (int i = 0; i < dirs.GetSize(); i++) { dirs[i]->BuildFromDatabase(); // Recurse } }
//-------------------------------------------------------------- void FillSelect(HWND hWnd) { CBase base(ParametersBase().name()); if(base.IsOpen()) { ADODB::_RecordsetPtr rec; if(base.OpenTable(ParametersTable().name(), rec)) { while (!rec->EndOfFile) { wchar_t *c = _bstr_t(rec->Fields->GetItem(NameParam().name())->GetValue()); ComboBox_AddString(hWnd, c); rec->MoveNext(); } //CurrentParametersTable param; CurrentParametersTable ¶m = Singleton<CurrentParametersTable>::Instance(); Select<CurrentParametersTable>(base).ID(1).Execute(param); int id = param.items.get<CurrentID>().value; ParametersTable typeSizeParam; Select<ParametersTable>(base).ID(id).Execute(typeSizeParam); int num = ComboBox_FindStringExact(hWnd, 0, typeSizeParam.items.get<NameParam>().value); if(CB_ERR != num) ComboBox_SetCurSel(hWnd, num); } } }
void PerformSearch(JNIEnv *env, jobject obj, jobject callback, std::wstring searchText, std::list<std::wstring>& patterns,int maximumResults, jobject monitor) { ADODB::_ConnectionPtr connection = NULL; ADODB::_RecordsetPtr recordset = NULL; try { HRESULT hr = ::CoInitialize(NULL); if (!SUCCEEDED(hr)) return; hr = connection.CreateInstance(__uuidof(ADODB::Connection)); if (!SUCCEEDED(hr)) return; hr = recordset.CreateInstance(__uuidof(ADODB::Recordset)); if (!SUCCEEDED(hr)) return; connection->CursorLocation = ADODB::adUseClient; hr = connection->Open(L"Provider=Search.CollatorDSO;Extended Properties='Application=Windows';", L"", L"", ADODB::adConnectUnspecified); if (!SUCCEEDED(hr)) return; searchText = ReplaceCharWithString(searchText, '\'', L"''"); std::wstring filenameMatcher = searchText; filenameMatcher = ReplaceCharWithString(filenameMatcher, '%', L"\\%"); filenameMatcher = ReplaceCharWithString(filenameMatcher, '*', L"%"); // see FREETEXT http://msdn.microsoft.com/en-us/library/bb231268(v=vs.85).aspx // see CONTAINS http://msdn.microsoft.com/en-us/library/bb231270(v=vs.85).aspx std::wstring query = L"SELECT TOP "; query += IntToString(maximumResults); query += L" System.ItemPathDisplay from SystemIndex WHERE "; // limit to documents, pictures and video query += L"(System.Kind = 'document' or System.Kind = 'picture' or System.Kind = 'video' or System.Kind is null) AND "; // content search query += L"(FREETEXT('\""; query += searchText; query += L"\"') OR "; // filename search query += L"(System.ItemName LIKE '%"; query += filenameMatcher; query += L"%'))"; if (patterns.size() > 0) { bool hasFilenameSearch = true; std::wstring anyFile(L"*"); for(std::list<std::wstring>::iterator iterator = patterns.begin(); iterator != patterns.end(); iterator++) { std::wstring pattern = *iterator; if (pattern == anyFile) { hasFilenameSearch = false; break; } } if (hasFilenameSearch) { query += L" AND ("; for(std::list<std::wstring>::iterator iterator = patterns.begin(); iterator != patterns.end(); iterator++) { std::wstring pattern = *iterator; if (pattern.size() == 0) { continue; } pattern = ReplaceCharWithString(pattern, '*', L"%"); if (iterator != patterns.begin()) { query += L" OR "; } query += L"(System.ItemName LIKE '"; if (pattern[0] != '%') { query += L"%"; } query += pattern; query += L"')"; } query += L")"; } } //std::cout << "Query:\n"; //std::cout << query; //std::cout << "\n"; //std::cout << std::flush; hr = recordset->Open(query.c_str(), connection.GetInterfacePtr(), ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adCmdText); if (!SUCCEEDED(hr)) { std::cout << "Open Failed\n" << std::flush; return; } int count = maximumResults; while(!recordset->ADOEOF) { _variant_t var = recordset->Fields->GetItem(L"System.ItemPathDisplay")->GetValue(); std::wstring filename = (const wchar_t*)_bstr_t(var.bstrVal); InvokeCallback(env, obj, callback, filename); if (IsProgressMonitorCancelled(env,monitor)) { break; } if (--count < 0) { break; } hr = recordset->MoveNext(); if (!SUCCEEDED(hr)) { std::cout << "Move Next Failed\n" << std::flush; break; } } } catch (_com_error &e) { _tprintf(_T("\tCOM Error code = %08lx\n"), e.Error()); } if (recordset != NULL && recordset->State == ADODB::adStateOpen) recordset->Close(); if (connection != NULL && connection->State == ADODB::adStateOpen) connection->Close(); ::CoUninitialize(); }