代码:
CFileDialog fileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "dbf files(*.dbf)|*.dbf|", NULL);
fileDlg.DoModal(); int i,j;
CString sSql, sTab, str;
sTab = "wz01_020610_200501";
sSql.Format("SELECT * FROM %s", sTab);
m_pRecordset->Open(sSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection,true), adOpenStatic, adLockOptimistic, adCmdText);
i = 0;
while (!m_pRecordset->adoEOF) {
for (j=1;j<=26;j++) {
str.Format("b%d",j);
m_pRecordset->PutCollect((_variant_t)str, (double)(111));
}
m_pRecordset->MoveNext();
i++;
}
m_pRecordset->Close();其中数据库是VFP6.0格式的DBF文件,使用ADO方式连接。我简化了问题,奇怪的地方在于:当fileDlg.DoModal()后,如果不选择任何文件就退出,那么后面的数据插入就正常;
如果DoModal()后选择了文件并点打开,后面的插入数据行为居然无效,但也不报错!按说前面的文件选择对话框对后面的数据库行为没有任何影响,这如何解释……
诸位可以建立一个专门针对此问题的程序试一下,谁能解释呢?

解决方案 »

  1.   

    if( FileDlg.DoModal() == IDOK )
    .....
    之后你再做你要做的事情
      

  2.   

    本来打算通过
    sTabName = fileDlg.GetFileTitle();
    得到将要处理的数据表名,但我上面是简化了问题,我直接给sTab = "wz01_020610_200501"赋值了,以彻底让后面的代码和前面的文件选择对话框没有关系。问题出在本应该没有关系的事物怎么会关联起来了呢?!
    **************我换种方式表达:
    如果我采用如下代码,程序一切正常:
    sTab = "wz01_020610_200501";
    sSql.Format("SELECT * FROM %s", sTab);
    m_pRecordset->Open()
    ……但如何这样:
    CFileDialog fileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "dbf files(*.dbf)|*.dbf|", NULL);
    if (fileDlg.DoModal() != IDOK)
       return;
    sTab = fileDlg.GetFileTitle();
    sSql.Format("SELECT * FROM %s", sTab);
    m_pRecordset->Open()
    ……
    后面的数据库处理(第一帖中的数据插入)就完全无效,但不报错。
    DEBUG跟踪sTab的数值正确。