苦恼啊,我看不懂这个程序:
BOOL CDBOperation::InsertData(CString sUserid, CString TableName,
  VARIANT vFieldNameList, VARIANT vFieldValueList,
  BSTR* bsPkFieldNameList, BSTR* bsPkFieldValueList,
      int& iPkFieldNum)
{
CString sSQL;
BOOL bRet = TRUE;
CString sTableName;
VARIANT vPkFieldNameList = {0}, vPkFieldValueList = {0};
BSTR bsFieldNameList[MAX_FIELD_NUM], bsFieldValueList[MAX_FIELD_NUM];
int iCount;
_variant_t vRowAffect; m_sErrorStr = _T("");
sTableName.Format("%s",TableName);
if ( sTableName.CompareNoCase("Check_Approve") == 0 ) // 往审阅表中添加数据
{
m_CheckApprove.SetDBOperation(this); // Added in 2005/02/25 17:59.Allocate resource if ( m_CheckApprove.AdjustValue(sUserid, TableName.AllocSysString(), vFieldNameList, vFieldValueList, 
vPkFieldNameList, vPkFieldValueList,
bsFieldNameList, bsFieldValueList,
OPR_INSERT, iCount) )
{
vFieldNameList.wReserved1 = vFieldValueList.wReserved1 = iCount;
vFieldNameList.pbstrVal = bsFieldNameList;
vFieldValueList.pbstrVal = bsFieldValueList;
}
else return FALSE;
} sSQL = MakeInsertSql(sUserid, TableName, vFieldNameList, vFieldValueList);
g_TestLog.WriteLog((char*)(LPCTSTR)sSQL); // 执行插入操作
try
{
m_pConnection->Execute(_bstr_t(sSQL), &vRowAffect, 0);
}
catch ( _com_error &Err )
{
g_TestLog.WriteLog( Err.Description());
m_sErrorStr.Format("%s", Err.Description());
bRet = FALSE; return bRet;
} bRet = GetPKeyValue(TableName, bsPkFieldNameList, bsPkFieldValueList, sUserid, iPkFieldNum); return bRet;
}
尤其是变量转换的部分,我不懂啊?????

解决方案 »

  1.   

    VC中的VARIANT BSTR _variant_t _bstr_t等等这些东西都干什么啊?为什么要用这些变量类型啊,什么情况下要用呢?怎么样用呢?谁能帮帮我,或告诉我这方面的详细介绍资料?谢谢
      

  2.   

    VARIANT  是 可变参量,是类型不固定的,跟 VB 里的 Variant 类型差不多
    BSTR 是 字符串,带有一个四字节的头,指出串长度,还有它是双字节编码
    _variant_t 是 VARIANT 的 封装器类
    _bstr_t   是 BSTR 的 封装类
    这两种类型一般用在 COM 智能指针的客户端, 就是 用 #import 指定引入的COM 接口 都是自动用 这些类型来对COM 接口 进行包装. 以方便客户端的凋用. 这些类型也可以在你平时的代码中使用,通过 q包含 comdef.h 头文件来获得.详细参考:  MSDN -> VC++ 语言参考 -> COM 支持类