Publish date: 2003-01-05
Work with resulting set (VB, C++)
Function RowToStr(rs As ADODB.Recordset) As String Dim i As Long Dim str As String For i = 0 To rs.Fields.Count - 1 str = str & MyCStr(rs(i)) & Chr(9) Next i RowToStr = str End Function Sub sample2() Dim cn As New ADODB.Connection cn.Open "file name=d:\database\employee.ibp" Dim i As Integer Dim str As String Dim cmd As New ADODB.Command Dim rs As ADODB.Recordset cmd.ActiveConnection = cn cmd.CommandText = "select * from employee order by emp_no" 'Creation of recordset with the unidirectional access Set rs = cmd.Execute While Not rs.EOF Debug.Print RowToStr(rs) rs.MoveNext Wend Debug.Print "+++++++++++++++++++++++++++" rs.Close 'Creation of recordset with the bidirectional access cmd.Properties("Fetch Backwards") = True cmd.Properties("Scroll Backwards") = True Set rs = cmd.Execute While (Not rs.EOF) Debug.Print RowToStr(rs) rs.MoveNext Wend Debug.Print "+++++++++++++++++++++++++++" rs.MovePrevious While (Not rs.BOF) Debug.Print RowToStr(rs) rs.MovePrevious Wend rs.Close Debug.Print "+++++++++++++++++++++++++++" 'Creation of recordset with a direct access cmd.Properties("IRowsetLocate") = True Set rs = cmd.Execute 'Printing of lines with the random order Dim cnt As Long ReDim flags(rs.RecordCount) As Boolean While (cnt <> rs.RecordCount) i = Int(Rnd(1) * rs.RecordCount) If (Not flags(i)) Then flags(i) = True cnt = cnt + 1 rs.MoveFirst rs.Move i Debug.Print RowToStr(rs) End If Wend End Sub
void TSampleCode2::execute() { cout<<"Sample Code #2"<<endl; try { t_db_data_source source; t_db_session session; //attach data source (auto commit mode) _THROW_OLEDB_FAILED(source,attach("file name=employee.ibp")) //create session _THROW_OLEDB_FAILED(session,create(source)) //create rowset t_db_row row; t_db_open_rowset rowset; _THROW_OLEDB_FAILED(rowset,create(session)) cout<<"unidirectional access"<<endl; //--------------------------------- _THROW_OLEDB_FAILED(rowset.m_props,set(t_db_prop_id::rowset_locate,false)) _THROW_OLEDB_FAILED(rowset.m_props,set(t_db_prop_id::rowset_canfetchbackwards,false)) _THROW_OLEDB_FAILED(rowset.m_props,set(t_db_prop_id::rowset_canscrollbackwards,false)) //use read-only engine _THROW_OLEDB_FAILED(rowset.m_props,set(t_db_prop_id::rowset_change,false)) //open table _THROW_OLEDB_FAILED(rowset,open_table("employee")) _THROW_OLEDB_FAILED(rowset,describe(row)) _THROW_OLEDB_FAILED(rowset,bind(row)) //retrive row while(rowset.fetch(row)==S_OK) { cout<<row_to_str(row)<<endl; }//while fetch //check last result of fetch _THROW_OLEDB_FAILED(rowset,m_last_result) cout<<endl<<"random access"<<endl; //---------------------- //set "IRowsetScroll" property to true //provider must caching result set _THROW_OLEDB_FAILED(rowset.m_props,set(t_db_prop_id::rowset_scroll,true)) //open table _THROW_OLEDB_FAILED(rowset,open_table("employee")) _THROW_OLEDB_FAILED(rowset,describe(row)) _THROW_OLEDB_FAILED(rowset,bind(row)) //get record count t_db_open_rowset::count_item_type ax_row_count; _THROW_OLEDB_FAILED(rowset,approximate_count(ax_row_count)) cout<<"record count:"<<ax_row_count<<endl; //build random sequential move typedef structure::t_vector<t_db_open_rowset::count_item_type> row_num_vector; row_num_vector row_nums; row_nums.reserve(ax_row_count); for(t_db_open_rowset::count_item_type i=0;i<=ax_row_count;++i) row_nums.push_back(i); random_shuffle(row_nums.begin(),row_nums.end()); rowset.cache_size=1; for(row_num_vector::const_iterator i_row(row_nums.begin()),_end(row_nums.end()); i_row!=_end;++i_row) { _THROW_OLEDB_FAILED(rowset,restart()) _THROW_OLEDB_FAILED(rowset,scroll(*i_row)) _THROW_OLEDB_FAILED(rowset,fetch(row)) cout<<row_to_str(row)<<endl; }//for i_row } catch(exception& exc) { cout<<"error: "<<exc.what()<<endl; } }//execute