如楼上说的
把你加的源码贴上看看! 

解决方案 »

  1.   

    老兄,源码如下,请帮我看看!
    class CSavelogDlg : public CDialog
    {
    // Construction
    public:
    bool InintConnectToSQL();
    unsigned long ProcessCount();
    CSavelogDlg(CWnd* pParent = NULL); // standard constructor _ConnectionPtr m_pConnection;
    _CommandPtr m_pCommand;
    _RecordsetPtr m_pRecordset; void WriteErrorLog(char *p); unsigned long m_mFirstNumber;
    unsigned long m_mSecondNumber;
    }void CSavelogDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    KillTimer(1);
    unsigned long m;
    m_mSecondNumber = this->ProcessCount ();
    m = m_mSecondNumber - m_mFirstNumber;
    m_mFirstNumber = m_mSecondNumber;
    int len = m_EditShow.GetWindowTextLength ();
    m_EditShow.SetSel(len,len);
    char p[32];
    sprintf(p,"count %u in %d minute\r\n\0",m,m_mMinute);
    m_EditShow.ReplaceSel (p); this->WriteErrorLog (p);
    UpdateData(true);
    SetTimer(1,60000 * m_mMinute,NULL);
    CDialog::OnTimer(nIDEvent);
    }void CSavelogDlg::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
    if (m_bConnectToSql) KillTimer(1);
    CDialog::OnClose();
    }unsigned long CSavelogDlg::ProcessCount()
    {
    CString strsql = "Select count(*),count(totalAccess) as 'a1','a2' from sm77user";
    unsigned long ret;
    unsigned long countuser; m_pCommand->CommandText = _bstr_t(strsql);
    m_pRecordset = m_pCommand->Execute (NULL,NULL,adCmdText); _variant_t theValuecount;
    _variant_t theValueuser;
    theValuecount = m_pRecordset->GetCollect ("a1");
    theValueuser = m_pRecordset->GetCollect ("a2"); if (theValuecount.vt != VT_ERROR) ret = theValuecount.lVal ;
    else {
    TRACE("Changle the data type is Error!");
    int len = m_EditShow.GetWindowTextLength ();
    m_EditShow.SetSel (len ,len);
    m_EditShow.ReplaceSel ("Changle the data type is Error!");
    return 0;
    } if (theValueuser.vt != VT_ERROR) countuser = theValueuser.lVal;
    else {
    TRACE("Changle the data type is Error!");
    int len = m_EditShow.GetWindowTextLength ();
    m_EditShow.SetSel (len ,len);
    m_EditShow.ReplaceSel ("Changle the data type is Error!");
    return 0;
    } char p[8];
    _ultoa(ret,p,10);
    SetDlgItemText(IDC_EDITCOUNT,p);
    _ultoa(countuser,p,10);
    SetDlgItemText(IDC_EDITCOUNT,p); return ret;
    }void CSavelogDlg::WriteErrorLog(char *p)
    {
    char q[512];
    CTime mt = CTime::GetCurrentTime ();
    sprintf(q,"%d-%d-%d %d:%d:%d %s\0",mt.GetYear (),mt.GetMonth (),
    mt.GetDay(),mt.GetHour (),mt.GetMinute (),mt.GetSecond (),p); FILE *fp;
    fp = fopen("sendlog.txt","r+");
    if (!fp)
    {
    fp = fopen("sendlog.txt","w+");
    if (!fp){
    TRACE("Open the \"sendlog.txt\" is Error!");
    AfxMessageBox("Open the \"sm77log.txt\" is Error!");
    return; }
    }
    fseek(fp,0L,SEEK_END);
    fprintf(fp,"%s",q);
    fclose(fp);
    }bool CSavelogDlg::InintConnectToSQL()
    {
    char strDatabase[100];
        memset(strDatabase,0,sizeof(strDatabase));
    GetPrivateProfileString("DB", "Database", 
     "Database=Provider=SQLOLEDB.1;SERVER=10.5.20.1;DATABASE=sm77;UID=sa;PASSWORD=sa;",
      strDatabase,sizeof(strDatabase),".\\sendlog.ini");
        //strcpy(strDatabase,"PROVIDER= SQLOLEDB.1;SERVER=10.5.20.1;DATABASE=sm77;UID=sa;PASSWORD=sa;"); //³õʼ»¯com»·¾³
    ::CoInitialize  (NULL);
    HRESULT hr;
    try{
    hr = m_pConnection.CreateInstance (__uuidof(Connection));
    if (SUCCEEDED(hr))
    {
    TRACE("\tCREATE CONNECTION TURE\n");
    m_pConnection->CursorLocation = adUseClient;
    hr = m_pConnection->Open (_bstr_t(strDatabase),
      _bstr_t(L""),
      _bstr_t(L""),
      adModeUnknown
         );
    if (SUCCEEDED(hr))
    {
    m_bConnectToSql = true;
    TRACE("Connect to DataBase: %s\n",strDatabase);
    }
    }
    }
    catch(_com_error e)
    {
    AfxMessageBox("Connect Database failed.");
    return false;
    } hr = m_pCommand.CreateInstance (__uuidof(Command));
    if (FAILED(hr))
    {
    _com_issue_error(hr);
    ::AfxMessageBox ("Create m_pCommand failed.");
    return false;
    }
    m_pCommand->ActiveConnection = m_pConnection;//ʹִÐÐÃüÁîÓëÊý¾Ý¿âÁªÏµ hr = m_pRecordset.CreateInstance (__uuidof(Recordset));
    if (FAILED(hr))
    {
    _com_issue_error(hr);
    ::AfxMessageBox("Create m_pRecordset failed.");
    return false;
    }
    m_bStartTimer = true;
    UpdateData(false);
    SetTimer(1,60000 * m_mMinute,NULL); m_mFirstNumber = this->ProcessCount ();
    return true;
    }void CSavelogDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    if (m_bStartTimer && m_bConnectToSql) KillTimer(1); UpdateData(true);
    SetTimer(1,1000 * m_mMinute,NULL);
    }