VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1626|回复: 1

[求助] 客户端的工作过多,驱动程序的 SQLSetConnectAttr 失败

[复制链接]
52_avatar_middle
在线会员 发表于 2016-1-5 15:36:35 | 显示全部楼层 |阅读模式
3驿站币
一个vc++的打印程序。打印预览10张票左右。就打印不成出现提示“客户端的工作过多。
驱动程序的 SQLSetConnectAttr 失败”不知道是哪里没有释放掉。大家帮我找找。
// NMFormView.cpp : implementation file
//

#include "stdafx.h"
#include "专用.h"
#include "NMFormView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CNMFormView

IMPLEMENT_DYNCREATE(CNMFormView, CRecordView)

CNMFormView::CNMFormView()
        : CRecordView(CNMFormView::IDD)
{
        //{{AFX_DATA_INIT(CNMFormView)
        m_pSet = NULL;
        //}}AFX_DATA_INIT
        isPreviewed=0;
        isSaved=0;
}

CNMFormView::~CNMFormView()
{
        ((CMyApp*)AfxGetApp())->m_NmfViews=0;//值为0,启用打开窗口的菜单命令
        if (m_pSet)
        if(!m_pSet->IsEOF()){
                m_pSet->MoveLast();
                m_pSet->Delete();
        }//clear temp table before close this window
        if (m_pSet)
                delete m_pSet;
        if (m_pSetB1)
        delete m_pSetB1;
        if (m_pSetP)
        delete m_pSetP;
}

void CNMFormView::DoDataExchange(CDataExchange* pDX)
{
        CRecordView::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CNMFormView)
        DDX_Control(pDX, IDC_COMBO_PROJ2ID4, m_proj2ID4);
        DDX_Control(pDX, IDC_COMBO_PROJ2ID3, m_proj2ID3);
        DDX_Control(pDX, IDC_COMBO_PROJ2ID2, m_proj2ID2);
        DDX_Control(pDX, IDC_COMBO_PROJ2ID1, m_proj2ID1);
        DDX_Control(pDX, IDC_COMBO_PROJ1ID4, m_proj1ID4);
        DDX_Control(pDX, IDC_COMBO_PROJ1ID3, m_proj1ID3);
        DDX_Control(pDX, IDC_COMBO_PROJ1ID2, m_proj1ID2);
        DDX_Control(pDX, IDC_COMBO_PROJ1ID1, m_proj1ID1);
        DDX_Control(pDX, IDC_COMBO_BANK1, m_bank1name);
        DDX_Control(pDX, IDC_COMBO_ACCOUNTS1, m_accounts1name);
        DDX_Control(pDX, IDC_COMBO_ORGANIZATION, m_organization);
        DDX_FieldCBString(pDX, IDC_COMBO_MONTH, m_pSet->m_month, m_pSet);
        DDX_FieldCBString(pDX, IDC_COMBO_DATE, m_pSet->m_date, m_pSet);
        DDX_FieldCBString(pDX, IDC_COMBO_YEAR, m_pSet->m_year, m_pSet);
        DDX_FieldText(pDX, IDC_EDIT_FEE1, m_pSet->m_fee1, m_pSet);
        DDX_FieldText(pDX, IDC_EDIT_FEE2, m_pSet->m_fee2, m_pSet);
        DDX_FieldText(pDX, IDC_EDIT_PROJNAME1, m_pSet->m_projectname1, m_pSet);
        DDX_FieldText(pDX, IDC_EDIT_PROJNAME2, m_pSet->m_projectname2, m_pSet);
        DDX_FieldText(pDX, IDC_EDIT_TOTALFEE, m_pSet->m_totalfee, m_pSet);
        DDX_FieldCBString(pDX, IDC_COMBO_COM, m_pSet->m_com, m_pSet);
        DDX_FieldCBString(pDX, IDC_COMBO_COM3, m_pSet->m_com3, m_pSet);
        DDX_FieldCBString(pDX, IDC_COMBO_COM4, m_pSet->m_com4, m_pSet);
        //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CNMFormView, CRecordView)
        //{{AFX_MSG_MAP(CNMFormView)
        ON_BN_CLICKED(IDC_SAVERECORD, OnSaverecord)
        ON_BN_CLICKED(IDC_PREVIEW, OnPreview)
        ON_CBN_KILLFOCUS(IDC_COMBO_BANK1, OnKillfocusComboBank1)
        ON_CBN_KILLFOCUS(IDC_COMBO_PROJ1ID3, OnKillfocusComboProj1id3)
        ON_CBN_KILLFOCUS(IDC_COMBO_PROJ2ID3, OnKillfocusComboProj2id3)
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNMFormView diagnostics

#ifdef _DEBUG
void CNMFormView::AssertValid() const
{
        CRecordView::AssertValid();
}

void CNMFormView::Dump(CDumpContext& dc) const
{
        CRecordView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CNMFormView message handlers

CRecordset* CNMFormView::OnGetRecordset()
{
        if (m_pSet != NULL)
                return m_pSet;

        m_pSetReal = new CNMFormSet(NULL);
        m_pSetReal->Open();
       
        m_pSetB1 = new CBank1Set(NULL);
        m_pSetB1->Open();
       
        m_pSetP = new CNormalProjSet(NULL);
        m_pSetP->Open();

        m_pSet = new CNMFormSet(NULL);  //we treat this RST as temp
        m_pSet->Open(CRecordset::dynaset,_T("SELECT * FROM tempN"));
        return m_pSet;
}

CNMFormSet* CNMFormView::GetRecordset()
{
        CNMFormSet* pData = (CNMFormSet*) OnGetRecordset();
        ASSERT(pData == NULL || pData->IsKindOf(RUNTIME_CLASS(CNMFormSet)));
        return pData;
}

void CNMFormView::OnInitialUpdate()
{
        BeginWaitCursor();
        GetRecordset();
        CRecordView::OnInitialUpdate();
        GetDocument()->SetTitle("一般缴款书");//设置文档标题       
        GetParent()->SetWindowText("一般缴款书");//设置子窗口标题
    GetParent()->ShowWindow(SW_SHOWMAXIMIZED);

        if (m_pSet->IsOpen())
        {
                CString strTitle = m_pSet->m_pDatabase->GetDatabaseName();
                CString strTable = m_pSet->GetTableName();
                if (!strTable.IsEmpty())
                        strTitle += _T(":") + strTable;
                GetDocument()->SetTitle(strTitle);
        }
       
        if (!m_pSetB1->IsOpen())
                m_pSetB1->Open();       
        while(!m_pSetB1->IsEOF())
        {               
                if(CB_ERR==m_bank1name.FindString(-1,m_pSetB1->m_bank1))
                        m_bank1name.AddString(m_pSetB1->m_bank1);//不重复,加入列表
//                if(CB_ERR==m_accounts1name.FindString(-1,m_pSetB1->m_accounts1))
//                        m_accounts1name.AddString(m_pSetB1->m_accounts1);//不重复,加入列表
                m_pSetB1->MoveNext();
        }

        ShowData();//显示新的当前记录数据       
        EndWaitCursor();
}

void CNMFormView::ShowData()
{
           if (m_pSet->IsOpen())
        {
                CString str;
                m_bank1name.GetWindowText(str);
                m_pSet->m_bank1=str;

                CString str1;
                m_accounts1name.GetWindowText(str1);
                m_pSet->m_accounts1=str1;

                CString str2;
                m_organization.GetWindowText(str2);
                m_pSet->m_organization=str2;

                CString str3;
                m_proj1ID1.GetWindowText(str3);
                m_pSet->m_proj1ID1=str3;

                CString str4;
                m_proj1ID2.GetWindowText(str4);
                m_pSet->m_proj1ID2=str4;

                CString str5;
                m_proj1ID3.GetWindowText(str5);
                m_pSet->m_proj1ID3=str5;

                CString str6;
                m_proj1ID4.GetWindowText(str6);
                m_pSet->m_proj1ID4=str6;

                CString str7;
                m_proj2ID1.GetWindowText(str7);
                m_pSet->m_proj2ID1=str7;

                CString str8;
                m_proj2ID2.GetWindowText(str8);
                m_pSet->m_proj2ID2=str8;

                CString str9;
                m_proj2ID3.GetWindowText(str9);
                m_pSet->m_proj2ID3=str9;

                CString str10;
                m_proj2ID4.GetWindowText(str10);
                m_pSet->m_proj2ID4=str10;
       
                CString s,s1;
                m_pSet->m_projectno1=s=str3+str4+str5+str6;
                m_pSet->m_projectno2=s1=str7+str8+str9+str10;
               
                 if(str3==""){
                        m_pSet->m_projectname1="";
                }else{
                        m_pSetP->m_strFilter="projectno='"+s+"'";
                        m_pSetP->Requery();
                        m_pSet->m_projectname1=m_pSetP->m_projectname;
                }
               
                if(str7==""){
                        m_pSet->m_projectname2="";
                }else{
                        m_pSetP->m_strFilter="projectno='"+s1+"'";
                        m_pSetP->Requery();
                        m_pSet->m_projectname2=m_pSetP->m_projectname;
                }

                m_bank1name.SelectString(-1,m_pSet->m_bank1);
                m_accounts1name.SelectString(-1,m_pSet->m_accounts1);
                m_organization.SelectString(-1,m_pSet->m_organization);
                m_pSet->m_totalfee=m_pSet->m_fee1+m_pSet->m_fee2;
               
                UpdateData(false);        //将成员变量数据传递到窗口               
        }
}

void CNMFormView::OnSaverecord()
{
        // TODO: Add your control notification handler code here
        if(!isSaved){
                m_pSetReal->AddNew();
                isSaved=1;
        }else{
                m_pSetReal->MoveLast();
                m_pSetReal->Edit();//使当前记录进入编辑状态
        }
                UpdateData(true);//用窗体数据更新记录集id和name字段

                CString str;
                m_bank1name.GetWindowText(str);
                m_pSetReal->m_bank1=str;

                CString str1;
                m_accounts1name.GetWindowText(str1);
                m_pSetReal->m_accounts1=str1;
               
                CString str2;
                m_organization.GetWindowText(str2);
                m_pSetReal->m_organization=str2;

                CString str3;
                m_proj1ID1.GetWindowText(str3);
                m_pSetReal->m_proj1ID1=str3;

                CString str4;
                m_proj1ID2.GetWindowText(str4);
                m_pSetReal->m_proj1ID2=str4;

                CString str5;
                m_proj1ID3.GetWindowText(str5);
                m_pSetReal->m_proj1ID3=str5;

                CString str6;
                m_proj1ID4.GetWindowText(str6);
                m_pSetReal->m_proj1ID4=str6;

                CString str7;
                m_proj2ID1.GetWindowText(str7);
                m_pSetReal->m_proj2ID1=str7;

                CString str8;
                m_proj2ID2.GetWindowText(str8);
                m_pSetReal->m_proj2ID2=str8;

                CString str9;
                m_proj2ID3.GetWindowText(str9);
                m_pSetReal->m_proj2ID3=str9;

                CString str10;
                m_proj2ID4.GetWindowText(str10);
                m_pSetReal->m_proj2ID4=str10;
               
                m_pSetReal->m_com=m_pSet->m_com;
                m_pSetReal->m_com3=m_pSet->m_com3;
                m_pSetReal->m_com4=m_pSet->m_com4;
                m_pSetReal->m_year=m_pSet->m_year;
                m_pSetReal->m_month=m_pSet->m_month;
                m_pSetReal->m_date=m_pSet->m_date;
                m_pSetReal->m_fee1=m_pSet->m_fee1;
                m_pSetReal->m_fee2=m_pSet->m_fee2;
                m_pSetReal->m_totalfee=m_pSet->m_fee1+m_pSet->m_fee2;
                m_pSetReal->m_projectname1=m_pSet->m_projectname1;
                m_pSetReal->m_projectname2=m_pSet->m_projectname2;
                m_pSetReal->m_projectno1=str3+str4+str5+str6;
                m_pSetReal->m_projectno2=str7+str8+str9+str10;

                if (m_pSetReal->CanUpdate())  {
                        m_pSetReal->Update();//将记录集更新返回数据库
                }               
                AfxMessageBox("成功保存数据!");}

void CNMFormView::OnPreview()
{
        // TODO: Add your control notification handler code here
        if(!isPreviewed){

                m_pSet->AddNew();
                isPreviewed=1; // varable for keeping temp data statuse
                                           // 1 means temp data has been saved in temp table
                                           // 0 means not save yet
        }else{
                m_pSet->MoveLast();
                m_pSet->Edit();//使当前记录进入编辑状态
        }

                UpdateData(true);//用窗体数据更新记录集
                ShowData();//显示新的当前记录数据

                if (m_pSet->CanUpdate())  {
                        m_pSet->Update();//将记录集更新返回数据库
                }               
                OnSaverecord();
               
        CDocTemplate* pt=((CMyApp*)AfxGetApp())->m_pTemplatePreviewN;
        pt->OpenDocumentFile(NULL);
}

void CNMFormView::OnKillfocusComboBank1()
{
        // TODO: Add your control notification handler code here
                UpdateData(true);//用窗体数据更新记录集
                CString str,str1;
                m_accounts1name.ResetContent();
                m_bank1name.GetWindowText(str);
                CBank1Set* m_pB1=new CBank1Set(NULL);

                if (!m_pB1->IsOpen()){
                        m_pB1->Open(CRecordset::dynaset,_T("SELECT * FROM bank1list WHERE bank1='"+str+"'"));       
                }else{
                        m_pB1->m_strFilter="bank1='"+str+"'";
                }
               
                while(!m_pB1->IsEOF())
                {
                     str1=m_pB1->m_accounts1;
                        m_accounts1name.AddString(str1);
                        m_pB1->MoveNext();
                }
               
                delete m_pB1;
}

void CNMFormView::OnKillfocusComboProj1id3()
{
        // TODO: Add your control notification handler code here
                UpdateData(true);//用窗体数据更新记录集
                CString str,str1;
                m_organization.ResetContent();
        m_proj1ID3.GetWindowText(str);
                CNormalOrgsSet* m_pB=new CNormalOrgsSet(NULL);

                if (!m_pB->IsOpen()){
                        m_pB->Open(CRecordset::dynaset,_T("SELECT * FROM normalorgs WHERE projID3='"+str+"'"));       
                }else{
                        m_pB->m_strFilter="projID3='"+str+"'";
                }
               
                while(!m_pB->IsEOF())
                {
                     str1=m_pB->m_orgs;
                        m_organization.AddString(str1);
                        m_pB->MoveNext();
                }
               
                delete m_pB;       
}

void CNMFormView::OnKillfocusComboProj2id3()
{
        // TODO: Add your control notification handler code here
                UpdateData(true);//用窗体数据更新记录集
                CString str,str1;
                m_organization.ResetContent();
        m_proj2ID3.GetWindowText(str);
                CNormalOrgsSet* m_pB2=new CNormalOrgsSet(NULL);

                if (!m_pB2->IsOpen()){
                        m_pB2->Open(CRecordset::dynaset,_T("SELECT * FROM normalorgs WHERE projID3='"+str+"'"));       
                }else{
                        m_pB2->m_strFilter="projID3='"+str+"'";
                }
               
                while(!m_pB2->IsEOF())
                {
                     str1=m_pB2->m_orgs;
                        m_organization.AddString(str1);
                        m_pB2->MoveNext();
                }
               
                delete m_pB2;               
}





上一篇:MFC ClassWizard 中的Object IDs是干什么用的?
下一篇:关于libgen.h这个库
51_avatar_middle
online_admins 发表于 2016-1-5 17:23:17 | 显示全部楼层
楼主看看这篇帖子能帮你搞定不?
http://bbs.csdn.net/topics/370131111
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-19 06:58

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表