我的程序需要对同一个数据库中多个表分别进行操作,但是操作的内容都是一样的(不需要用到表之间的联接)。我的思想是编一个函数,比如modifytable(),然后分别调用modifytable(table1),modifytable(table2),modifytable(table3),等等。现在我已实现了针对一个表的modifytable()功能,请问如何实现对多表的操作呢?
CString CIconSet::GetDefaultSQL()
{
return _T("[dbo].[table1]");
}
我怎么添加别的表?在什么地方添加?

解决方案 »

  1.   

    先枚举出所有的表cn->openshema()
    或则在SQL SERVER中 查找sysobjects对象 中将所有的表找出
    然后
    for(i = 0; i < ncount; i++)
       modifytable(tablename);
      

  2.   

    我现在的问题就是,我只连接上了一个表,
    CString CIconSet::GetDefaultSQL()
    {
    return _T("[dbo].[table1]");
    }
    我怎么连接上其余的表,在什么地方写这个添加表的代码
      

  3.   

    如果表的字段完全一样,可以共用一个记录集类,只是在打开时给出不同的表名。
    CIconSet rs;
    rs.Open( CRecordset::dynaset, "table1" );
    ...
    rs.Close();
    ...
    rs.Open( CRecordset::dynaset, "table2" );
    ...
    rs.Close();
      

  4.   

    你的CIconSet如果依赖特定的表是不可以的。
    对于不确定的表,我是这样做的:
      Cdatabase dbsource;
      dbsource.open();//open不同的表
      Crecordset rssource(&dbsource);
      rssource进行表的操作;
      

  5.   

    大哥,你可以自己用ADO来实现啊,写一个函数,传入参数就可以了,
    参考源码:
       #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") _ConnectionPtr g_pConnection;
    //建立连接
    g_pConnection.CreateInstance(__uuidof(Connection));//创建Connection对象
    try
    {
    g_pConnection->Open("Provider=SQLOLEDB;SERVER=bigapple;DATABASE=(这里可以加上计算机名)AutoInspect;UID=sa;PWD=","","",adModeUnknown);
    }
    catch(_com_error e)///捕捉异常 
    {
    CString errormessage; 
    errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); 
    AfxMessageBox(errormessage);///显示错误信息
    }//插入数据,这里用的是存储过程(也可以改成SQL语句)
    LRESULT CDiskArk::InsertRst(char* chrTableName)
    {
    _CommandPtr cmd;
    LRESULT lrErr; try{
    cmd.CreateInstance(__uuidof(Command));//"ADO.Command");
    cmd->ActiveConnection = g_pConnection;
    cmd->CommandText = "存储过程名";
    cmd->CommandTimeout = 16;
    cmd->CommandType=adCmdStoredProc;//(也可以改成SQL语句adCmdText)
                      //传送表名参数到存储过程
    cmd->Parameters->Append(cmd->CreateParameter("TableName",adVarChar,adParamInput,sizeof(chrTableName),chrTableName));
                      
                        //如上,传入其他参数
             ……
                      //执行
    cmd->Execute(NULL,NULL,adCmdStoredProc); lrErr=0;
    }
    catch(_com_error e){
    lrErr= 1;
    }
    cmd.Release(); return lrErr;
    }
      

  6.   

    CString  strSql;
    strSql = 表名 + 你的操作语句(操作一样的嘛,当然,表名在哪个位置肯定是固定的)
    然后利用Command对象执行!
      

  7.   

    我的操作语句是我编写的一个函数,不是SQL语句,好像不可以用strSql串吧
      

  8.   

    CIconSet加一成员CString m_sSQL;
    执行查询前调用m_sSQL = _T("[dbo].[yourtable]");修改GetDefaultSQL
    CString CIconSet::GetDefaultSQL()
    {
    return m_sSQL;
    }