我用:
sprintf(tmpSQL, "SELECT passwd AS pd,[time] AS te FROM Account WHERE account='%s'",stNum);
m_pConnection->Execute(tmpSQL, &RecordsAffected, adCmdText); 我想请问如何取得这个语句执行后的pd字段和te字段的值?看了一些文章,有以下两种讲法?
(1)、RecordsAffexted返回的是执行结果的指针,我是用这个才能得到,如果是该怎么用? (2)、还有人说用rs->GetCollect("pd")的形式,可以这么得到值,又该如何用?
还是都不是呢?请高手帮小妹解答一下疑问咯。谢谢先!
sprintf(tmpSQL, "SELECT passwd AS pd,[time] AS te FROM Account WHERE account='%s'",stNum);
m_pConnection->Execute(tmpSQL, &RecordsAffected, adCmdText); 我想请问如何取得这个语句执行后的pd字段和te字段的值?看了一些文章,有以下两种讲法?
(1)、RecordsAffexted返回的是执行结果的指针,我是用这个才能得到,如果是该怎么用? (2)、还有人说用rs->GetCollect("pd")的形式,可以这么得到值,又该如何用?
还是都不是呢?请高手帮小妹解答一下疑问咯。谢谢先!
if(0!=pRst->GetRecordCount())
{
zsh=pRst->GetRecordCount();
if(0==zsh%100)
{
zong.Format("%d",zsh/100);
m_zong=zong;
}
else
{
zong.Format("%d",zsh/100+1);
m_zong=zong;
}
sql1.Format("select 风速1,风速2,风速3,a实测 from %d where 日期='%s-%s-%s' and 时间>='%s:%s:%s' and 时间<='%s:%s:%s'order by 序号",i,getyear,getmonth,getday,text1,text2,text3,text4,text5,text6);
pRst1->Open(_bstr_t(sql1),_variant_t((IDispatch*)pConn,true),adOpenStatic,adLockOptimistic,adCmdText);
if(!pRst->BOF)
pRst->MoveFirst();
if(!pRst1->BOF)
pRst1->MoveFirst();
if(zsh>=100)
{
for(int i=1;i<=100;i++)
{
m_mschart.SetRowCount(100);
CString strValue;
VARIANT varValue;
Field * field=NULL;
VARIANT varCounter;
varCounter.vt=VT_I4;
varCounter.lVal=0;
for(int j=0;j<=3;j++)
{
varCounter.lVal =j;
pRst1->Fields->get_Item(varCounter,&field);
field->get_Value(&varValue);
strValue=VariantToCString(varValue);
m_mschart.GetDataGrid().SetData(i, j+1,atof(strValue), 0);
}
for(j=0;j<=13;j++)
{
varCounter.lVal =j;
pRst->Fields->get_Item(varCounter,&field);
field->get_Value(&varValue);
strValue=VariantToCString(varValue);
m_fgrid.SetTextMatrix(i,j,strValue);
}
pRst1->MoveNext();
pRst->MoveNext();
}
}
{
CString strValue;
_variant_t var_t;
_bstr_t bst_t;
time_t cur_time;
CTime time_value;
COleCurrency var_currency;
switch(var.vt)
{
case VT_EMPTY:
strValue=_T("");
break;
case VT_UI1:
strValue.Format("%d",var.bVal);
break;
case VT_I2:
strValue.Format("%d",var.iVal);
break;
case VT_I4:
strValue.Format("%d",var.lVal);
break;
case VT_R4:
strValue.Format("%f",var.fltVal);
break;
case VT_R8:
strValue.Format("%f",var.dblVal);
break;
case VT_CY:
var_currency=var;
strValue=var_currency.Format(0);
break;
case VT_BSTR:
var_t=var;
bst_t=var_t;
strValue.Format ("%s",(const char*)bst_t);
break;
case VT_NULL:
strValue=_T("");
break;
case VT_DATE:
cur_time = (long)var.date;
time_value=cur_time;
strValue=time_value.Format("%A,%B%d,%Y");
break;
case VT_BOOL:
strValue.Format("%d",var.boolVal );
break;
default:
strValue=_T("");
break;
}
return strValue; }这是将Variant转换成CString的函数
_variant_t vt;
vt = rs->GetCollect("pd");
CString str;
if ( vt.VT != VT_NULL)
str = (LPCTSTR)(_bstr_t)vt;
{
varCounter.lVal =j;
pRst1->Fields->get_Item(varCounter,&field);
field->get_Value(&varValue);
strValue=VariantToCString(varValue);
}
这是你想要的取 值的那段程序吧,这是从我做的一个程序中摘取出来的,
你的意思就是说用rs->GetCollect("pd");虽然原来表的字段没有这个"pd"字段,用Excute()后,就可以执行了是吧。
...... pRecordset.CreateInstance("ADODB.Recordset");
LPCSTR strSQL = "select * from LegalityComputeInfo";
_variant_t var,sql=strSQL,connection=(IDispatch*)pConnection;
try
{
pRecordset->Open(sql,
connection,
adOpenStatic,
adLockOptimistic ,
adCmdText);
}
catch(_com_error & e)
{
AfxMessageBox(e.Description());
}
......
var=pRecordset->Fields->GetItem("IP")->Value;
{
varCounter.lVal =j;
pRst1->Fields->get_Item(varCounter,&field);
field->get_Value(&varValue);
strValue=VariantToCString(varValue);
}
当j为0时就是取你要的pd,为1时就是要取你要的te, 这与用不用movefirst和movenext没有关系啊,可能是还有别的办法吧。祝你好运!