第一次操作vc,只要求解决问题,不求甚解。:),被迫用vc做个接口而已。
在我的编程思路里,在操作记录集过程,都可以执行语句,而在VC里却不行。
我的以前做的asp是这样的:
set conn = server.createObject( "ADODB.Connection" )
set rs = server.CreateObject( "ADODB.Recordset" )
conn.open "..."
rs.open "select * from table1",conn
do while not rs.eof
conn.execute( "insert into table2 values ('"&rs("col1")&"')" );
rs.movenext
loop
rs.close
conn.close-------------------------------------------------------------------------------------
而在vc中不行啦,出现不能占用同一个连接的问题,而我另外再建立CDatabase 都不行,不知道怎么回事,各位大侠,可以就我的程序给我一个解决的方法吗?
CDatabase m_dbPostGre;int nRetVal; nRetVal = m_dbPostGre.OpenEx( _T( "DSN=;UID=;PWD=;" ),CDatabase::openReadOnly | CDatabase::noOdbcDialog );
if ( nRetVal )
{
//AfxMessageBox( _T( "连接数据库成功!" ) );
} CRecordset recordset( &m_dbPostGre );
CString strSQL = _T( "select top 20 * from send_gzcy" );
recordset.Open( CRecordset::forwardOnly, strSQL, CRecordset::readOnly ); CDBVariant var_idd;
CDBVariant var_send_num;
CDBVariant var_content;
CString send_num("");
CString content(""); CString sqlstr("");
int idd;
while ( !recordset.IsEOF() )
{
recordset.GetFieldValue( _T("idd"), var_idd );
idd=var_idd.m_iVal;
recordset.GetFieldValue( _T("send_num"), var_send_num );
send_num=*var_send_num.m_pstring;
recordset.GetFieldValue( _T("content"), var_content );
content=*var_content.m_pstring;
sqlstr.Format(_T("insert into send_gzcy_h select *,%u,%u,%u from send_gzcy where idd=%ld delete from send_gzcy where idd=%ld"),&seq1,&seq2,&seq3,idd,idd); m_conn.ExecuteSQL(_T(sqlstr)); //这里不行,说占用了同一个连接 recordset.MoveNext();
}
在我的编程思路里,在操作记录集过程,都可以执行语句,而在VC里却不行。
我的以前做的asp是这样的:
set conn = server.createObject( "ADODB.Connection" )
set rs = server.CreateObject( "ADODB.Recordset" )
conn.open "..."
rs.open "select * from table1",conn
do while not rs.eof
conn.execute( "insert into table2 values ('"&rs("col1")&"')" );
rs.movenext
loop
rs.close
conn.close-------------------------------------------------------------------------------------
而在vc中不行啦,出现不能占用同一个连接的问题,而我另外再建立CDatabase 都不行,不知道怎么回事,各位大侠,可以就我的程序给我一个解决的方法吗?
CDatabase m_dbPostGre;int nRetVal; nRetVal = m_dbPostGre.OpenEx( _T( "DSN=;UID=;PWD=;" ),CDatabase::openReadOnly | CDatabase::noOdbcDialog );
if ( nRetVal )
{
//AfxMessageBox( _T( "连接数据库成功!" ) );
} CRecordset recordset( &m_dbPostGre );
CString strSQL = _T( "select top 20 * from send_gzcy" );
recordset.Open( CRecordset::forwardOnly, strSQL, CRecordset::readOnly ); CDBVariant var_idd;
CDBVariant var_send_num;
CDBVariant var_content;
CString send_num("");
CString content(""); CString sqlstr("");
int idd;
while ( !recordset.IsEOF() )
{
recordset.GetFieldValue( _T("idd"), var_idd );
idd=var_idd.m_iVal;
recordset.GetFieldValue( _T("send_num"), var_send_num );
send_num=*var_send_num.m_pstring;
recordset.GetFieldValue( _T("content"), var_content );
content=*var_content.m_pstring;
sqlstr.Format(_T("insert into send_gzcy_h select *,%u,%u,%u from send_gzcy where idd=%ld delete from send_gzcy where idd=%ld"),&seq1,&seq2,&seq3,idd,idd); m_conn.ExecuteSQL(_T(sqlstr)); //这里不行,说占用了同一个连接 recordset.MoveNext();
}
_ConnectionPtr->Open() //数据库连接
_RecordsetPtr->Open() //获取记录集
_CommandPtr->Execute() //执行SQL语句http://www.pconline.com.cn/pcedu/empolder/gj/vc/0507/653859.html