Publish date: 2003-01-05
Update recordset (VB, C++)
Sub sample7_1() Dim cn As New ADODB.Connection cn.Provider = "LCPI.IBProvider.2" Call cn.Open("data source=main:e:\database\employee.gdb", "gamer", "vermut") 'begin trans (commit retaining mode) cn.Attributes = adXactCommitRetaining cn.BeginTrans Dim job_rs As New ADODB.Recordset job_rs.ActiveConnection = cn 'append only job_rs.Properties("Append-Only Rowset") = True Call job_rs.Open("job", , adOpenKeyset, adLockOptimistic, adCmdTable) 'insert new row ------------------------ job_rs.AddNew job_rs!job_code = "user" ' PK job_rs!job_grade = "3" ' PK job_rs!job_country = "Canada" ' PK [FK to COUNTRY] job_rs!job_title = "Tester of IBProvider" job_rs!min_salary = 1 job_rs!max_salary = 150 job_rs!job_requirement = "ADO, OLEDB, Builder C++, Visual C++, VB" 'make array with requirement to languages Dim language_req(1 To 4) As String language_req(1) = "Russian" job_rs!language_req = language_req job_rs.Update 'commit retaining cn.CommitTrans 'update -------------------------------- job_rs!job_requirement = (job_rs!job_requirement) & ", InterBase SQL Server" language_req(2) = "English" job_rs!language_req = language_req job_rs.Update 'commit retaining cn.CommitTrans 'delete record ------------------------- job_rs.Delete 'commit retaining cn.CommitTrans End Sub 'sample7_1
//////////////////////////////////////////////////////////////////////////////// #define _TRACE(obj,func) \ { \ cout<<#obj<<"."<<#func<<endl; \ \ _THROW_OLEDB_FAILED(obj,func) \ } //////////////////////////////////////////////////////////////////////////////// //class TSampleCode7_1 void TSampleCode7_1::execute() { cout<<"Sample #7.1"<<endl; try { t_db_data_source data_source; t_db_session session; t_db_open_rowset job_rs; _TRACE(data_source,attach("file name=employee.ibp")) _TRACE(session,create(data_source)) _TRACE(session,start_transaction()) _TRACE(job_rs,create(session)) _TRACE(job_rs.m_props,set(t_db_prop_id::rowset_append_only,true)) _TRACE(job_rs,open_table("job")) //INSERT NEW ROW ----------------------------------------- t_db_row row; _TRACE(job_rs,describe(row)) row["job_code" ]="user"; //PK row["job_grade" ]="3"; //PK row["job_country" ]="Canada"; //PK [FK to COUNTRY] row["job_title" ]="Tester of IBProvider"; row["min_salary" ]=1; row["max_salary" ]=150; row["job_requirement"]="ADO, OLEDB, Builder C++, Visual C++, VB"; row["language_req" ].create_array(DBTYPE_BSTR,0,1,4); row["language_req" ].set_element(1,"Russian"); _TRACE(job_rs,insert_row(row,true)) _TRACE(session,commit_retaining()) //UPDATE NEW ROW ----------------------------------------- //define compact row t_db_row row1; row1.columns(0)=row.columns("job_requirement"); row1.columns(1)=row.columns("language_req"); row1.count=2; row1["job_requirement"]=row["job_requirement"].as_string+", InterBase SQL Server"; row1["language_req" ]=row["language_req"]; row1["language_req" ].set_element(2,"English"); _TRACE(job_rs,update_row(row1)); _TRACE(session,commit_retaining()) //DELETE NEW ROW ----------------------------------------- _TRACE(job_rs,delete_row()); _TRACE(session,commit()) } catch(const exception& exc) { cout<<"error:"<<exc.what()<<endl; } cout<<endl; }//execute