⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 080426dbdialogdlg.cpp

📁 ado 连接数据库,最简单的数据库编程 有利于初学者学习.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	_variant_t T1,T2,T3;
	float t1,t2,t3,m_Average;
	CString str;
	T1 = m_chinese;
	t1=(float)T1;
	T2 = m_math;
	t2=(float)T2;
	T3 = m_english;
	t3=(float)T3;
	m_Average =t1+t2;
	m_Average =m_Average +t3;
	m_Average = m_Average/3;
    str.Format("%3.2f",m_Average);
	CString strItemText1;
    CString strItemText2;
	int nCount = m_ListCtrl.GetItemCount();
	nIndex = nCount;
 if(nCount>=0)
 {
 GetDlgItem(IDC_DELETE)->EnableWindow(true);
 }
 for(int i=0;i<nCount;i++)
 {
 strItemText1 = m_ListCtrl.GetItemText(i,0);
 strItemText2 = m_ListCtrl.GetItemText(i,1);
 if(strItemText1==m_stuNO||strItemText2==m_name)
 {
 MessageBox("the item have been inserted!");
 return;
 }
 }
	if(""==m_stuNO||""==m_name||t1<0.0||t1>100.0||t2<0.0||t2>100.0||t3<0.0||t3>100.0)
	{
	MessageBox("请你按格式输入你的学名,姓名,和各科合理分数!");
	return;
	}
	else{
	CString sql;
    /*_variant_t T1,T2,T3;
	T1 = m_chinese;
	T2 = m_math;
	T3 = m_english;*/
	 //sql_.Format("SELECT * FROM students");
      // sql_.Format("INSERT INTO students (number,name,chinexe,math,english)\
	   // VALUES('%s','%s',%ld,%ld,%ld)",m_stuNO,m_name,(long)T1,(long)T2,(long)T3);
		//	_bstr_t sql = sql_;
			 _variant_t  t;
			 t=m_stuNO;
	try{        m_pRecordset.CreateInstance(__uuidof(Recordset));
		        	//m_pConnection.CreateInstance(__uuidof(Connection));
		        sql.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb");
		        _bstr_t sql_=sql;
		        //m_pConnection->Open(sql_,"","",-1);  
				
				m_pRecordset->Open("SELECT* FROM students",sql_,adOpenStatic,adLockOptimistic,adCmdText);
				m_pRecordset->AddNew();
				t=m_stuNO;
				m_pRecordset->PutCollect("number",&t);
				//nUpdate = m_pRecordset->Update();
				t=m_name;
                m_pRecordset->PutCollect("name",&t);
				t=m_chinese;
				m_pRecordset->PutCollect("chinexe",&t);
				t=m_math;
				m_pRecordset->PutCollect("math",&t);
				t=m_english;
				m_pRecordset->PutCollect("english",&t);
				t=str;
				m_pRecordset->PutCollect("average",&t);
			    t=m_timer;
				m_pRecordset->PutCollect("timer",&t);
				nUpdate = m_pRecordset->UpdateBatch(adAffectCurrent);
			    
			    //m_pConnection->Execute(sql,NULL,adCmdText);
				//m_pRecordset->Open(sql,"","",adCmdText);
				//m_pRecordset->MoveFirst();
			}
			catch(_com_error& e)
			{   MessageBox("插入失败!");
				AfxMessageBox(e.ErrorMessage());
				return;
			} 
			
			m_pRecordset->Close();
			MessageBox("插入数据成功!");
			//if(nUpdate!=0)
			//CMy080426dbdialogDlg::Refresh();
			//CMy080426dbdialogDlg::OnInitDialog();
			
		    m_ListCtrl.InsertItem(0,m_stuNO);
            m_ListCtrl.SetItemText(0,1,m_name);
            //str.Format("%f",m_chinese);
            m_ListCtrl.SetItemText(0,2,m_chinese);
            //str.Format("%f",m_math);
            m_ListCtrl.SetItemText(0,3,m_math);
            //str.Format("%f",m_english);
            m_ListCtrl.SetItemText(0,4,m_english);
		    str.Format("%3.2f",m_Average);
		    m_ListCtrl.SetItemText(0,5,str);
		    m_ListCtrl.SetItemText(0,6,m_timer);
	  		
			
	}
	
}

void CMy080426dbdialogDlg::OnDelete() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	CString sql,sqldelete, selectID;
	 sql.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb");
	 
		        _bstr_t sql_=sql;

	int nCount = m_ListCtrl.GetSelectionMark();
	
	if(nCount==-1)
	{
	MessageBox("please choose a item!");
	
	return;
	}
	else{
     selectID = m_ListCtrl.GetItemText(nCount,0);
	 sqldelete.Format("SELECT* FROM students WHERE number = '%s'",selectID);
	 m_pRecordset->Open((_bstr_t)sqldelete,sql_,adOpenDynamic,adLockOptimistic,adCmdUnspecified);
	 m_ListCtrl.DeleteItem(nCount);
	 m_pRecordset->Delete(adAffectCurrent);
	 //m_pRecordset->MoveNext();
	 m_pRecordset->Update();
	 m_pRecordset->MoveNext();
	 m_ListCtrl.SetSelectionMark(-1);
     }
	nIndex--;
	if(nIndex==0)
		GetDlgItem(IDC_DELETE)->EnableWindow(false);
    m_pRecordset->Close();
    //Refresh();
	UpdateData(false);
	
}

void CMy080426dbdialogDlg::OnBtok() 
{
	// TODO: Add your control notification handler code here
	OnOK();
   
}

/*void CMy080426dbdialogDlg::Refresh()
{         
	      //UpdateData(true);
	      m_ListCtrl.DeleteAllItems();
	      m_ListCtrl.SetRedraw(FALSE);
	       _bstr_t SQL("SELECT * FROM students");
	      _RecordsetPtr Ptr;
	      int i=0;
	      try
		  {  
		     Ptr.CreateInstance(__uuidof(Recordset));//这一个时候应该确保数据库没有被打开;不然将出错!
		     Ptr = m_pConnection->Execute(SQL,NULL,adCmdText);
			 //Ptr->Update();
			 
		     _variant_t roader;
		     while(!Ptr->adoEOF)
			 {  
                roader = Ptr->GetCollect("number");
			    if(roader.vt != VT_NULL)
				  m_ListCtrl.InsertItem(i,(char*)(_bstr_t)roader);
			    roader = Ptr->GetCollect("name");
			    if(roader.vt != VT_NULL)
				  m_ListCtrl.SetItemText(i,1,(char*)(_bstr_t)roader);
                roader = Ptr->GetCollect("chinexe");
			    if(roader.vt != VT_NULL)
				  m_ListCtrl.SetItemText(i,2,(char*)(_bstr_t)roader);
				 roader = Ptr->GetCollect("math");
				 if(roader.vt != VT_NULL)
                 m_ListCtrl.SetItemText(i,3,(char*)(_bstr_t)roader);
				 roader = Ptr->GetCollect("english");
				 if(roader.vt != VT_NULL)
				 m_ListCtrl.SetItemText(i,4,(char*)(_bstr_t)roader);
				  roader = Ptr->GetCollect("average");
				 if(roader.vt != VT_NULL)
				 m_ListCtrl.SetItemText(i,5,(char*)(_bstr_t)roader);
				  roader = Ptr->GetCollect("timer");
				 if(roader.vt != VT_NULL)
				 m_ListCtrl.SetItemText(i,6,(char*)(_bstr_t)roader);
				 Ptr->MoveNext();
			    
			 }
		  }
          catch(_com_error& e)
		  {  //MessageBox("yid");
       	     AfxMessageBox(e.ErrorMessage());
		     m_ListCtrl.SetRedraw(TRUE);	
		     return;
		  } 
		  m_ListCtrl.SetRedraw(TRUE);
		  UpdateData(false);
		  Ptr->Close();

} */     

/*void CMy080426dbdialogDlg::OnUpdate() 
{
	// TODO: Add your control notification handler code here
     CMy080426dbdialogDlg::Refresh();
}*/

void CMy080426dbdialogDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	//CString str;
	CTime time;
	time = CTime::GetCurrentTime();
	m_timer = time.Format("%H:%M:%S");
	SetDlgItemText(IDC_EDIT5,m_timer);
	//UpdateData(false);
	CDialog::OnTimer(nIDEvent);
}

void CMy080426dbdialogDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	MessageBox("你确定要退出吗!");
	CDialog::OnClose();
}

void CMy080426dbdialogDlg::OnAddmap() 
{
	// TODO: Add your control notification handler code here
	VARIANT   varChunk;   
	SAFEARRAY   *psa;   
	SAFEARRAYBOUND  * rgsabound=(SAFEARRAYBOUND *)malloc(sizeof(SAFEARRAYBOUND)); 
	//allocate a SAFEARRAYBOUND struct for built a Boundarray;
	CString sql;
	sql.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb");
	//database connectstring
	_bstr_t sql_=sql;
	//m_pConnection->Open(sql_,"","",-1);  
	//Connect to database;
    m_pRecordset->Open("SELECT* FROM student1",sql_,adOpenDynamic,adLockOptimistic,adCmdText); 
	//VT_ARRAY   │   VT_UI1  
	//Open a bmp files as binary style;
	static char BASED_CODE szFilter[] = "bmp Files (*.bmp)|*.bmp|All Files (*.*)|*.*||";
	CFileDialog dlg(TRUE,"bmp",NULL,  OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
	if (dlg.DoModal() == IDOK)
	{
	 m_strpath=dlg.GetPathName();
	 MessageBox(m_strpath);
	}
	CFile   f(m_strpath,CFile::modeRead); 
	UINT ChunkSize=f.GetLength();
	char   *bVal=new char[ChunkSize+1];   
	UINT   uIsRead=0;   
	//Create   a   safe   array   to   store   the   array   of   BYTES     
		uIsRead=f.Read(bVal,ChunkSize);
		if(uIsRead==0)return;  
		rgsabound[0].cElements   =uIsRead;   
		rgsabound[0].lLbound   =   0;   
		psa=SafeArrayCreate(VT_UI1,1,rgsabound);   
		for(long index=0;index<uIsRead;index++)
			if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index])))   
			{::MessageBox(NULL,"啊,又出毛病了。","提示",MB_OK|MB_ICONERROR);  
			return; } 
		varChunk.vt   =  VT_ARRAY|VT_UI1;   
		varChunk.parray   = psa;   
		try{
			
			m_pRecordset->AddNew();
			m_pRecordset->Fields->GetItem("name")->AppendChunk(varChunk);   
		}   
		catch(_com_error   &e)   
		{   
			CString str=(char*)e.Description();   
			::MessageBox(NULL,str+"\n又出毛病了。","提示",MB_OK); 
			return;
		}   
		::VariantClear(&varChunk);   
		::SafeArrayDestroyData(psa);     
	delete [] bVal;
  f.Close();
	 
	MessageBox("添加成功!");
	m_pRecordset->Update();
	m_pRecordset->Close();

	Invalidate();
}


void CMy080426dbdialogDlg::OnButview() 
{  
	CString sql;
    sql.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb");
    _bstr_t sql_=sql;
    //m_pConnection->Open(sql_,"","",-1);  
   m_pRecordset->Open("SELECT* FROM student1",sql_,adOpenDynamic,adLockOptimistic,adCmdText); 
     
	CFile   f;   
  f.Open("d:\\bbb.bmp",CFile::modeWrite|CFile::modeCreate);   
  m_pRecordset->MoveLast();
  long   lPhotoSize   = m_pRecordset->Fields->Item["name"]->ActualSize;   
  long   lIsRead=0;   
    
  _variant_t   varChunk;   
  char   *buf=new char[lPhotoSize];   
  while(lPhotoSize>0)   
  {   
  lIsRead=lPhotoSize;//>=ChunkSize;  ChunkSize:lPhotoSize; 
  varChunk   =   m_pRecordset->Fields->   
  Item["name"]->GetChunk(lIsRead);  
  for(long index=0;index<lIsRead;index++)   
  {   
  ::SafeArrayGetElement(varChunk.parray,&index,buf+index);   
  }//注意这里读出的是BITMAPFILEHEADER文件流(就是二进制序列);   
  BITMAPFILEHEADER bmpHeader;
  DWORD bmfHeaderLen = sizeof(bmpHeader);
  strncpy((LPSTR)&bmpHeader, (LPSTR)buf, bmfHeaderLen);
  
  // 是否是位图 ----------------------------------------
  if (bmpHeader.bfType == (*(WORD*)"BM"))
  {
	  char* lpDIBBits = buf + bmfHeaderLen;
	  BITMAPINFOHEADER &bmpiHeader = *(LPBITMAPINFOHEADER)lpDIBBits;
	  BITMAPINFO &bmpInfo = *(LPBITMAPINFO)lpDIBBits;//
	  lpDIBBits = buf + ((BITMAPFILEHEADER *)buf)->bfOffBits;
	  
	  // 创建位图 --------------------------------------
	  CDC dc;
	  HDC hdc =::GetDC(NULL);//为什么?
   	  dc.Attach(hdc);
	  // A Win32-based application uses a handle to refer to a resource that has been loaded into memory.
	  //handle 都是同一类型的;
	  HBITMAP hBmp =CreateDIBitmap(dc.m_hDC, &bmpiHeader, CBM_INIT, lpDIBBits,
		  &bmpInfo, DIB_RGB_COLORS);
	  if (m_Bitmap.GetSafeHandle() != NULL) 
	    m_Bitmap.DeleteObject();
	  m_Bitmap.Attach(hBmp);
	  m_BOOLTag=true;
	  dc.Detach();
	  ReleaseDC(&dc);
	  Invalidate();
	  }
  f.Write(buf,lIsRead);   
  lPhotoSize-=lIsRead;   
  }//while()   
  f.Close(); 
  m_pRecordset->Close();
}

HBRUSH CMy080426dbdialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if (nCtlColor== CTLCOLOR_EDIT) 
     pDC->SetTextColor(RGB (255, 155 , 0));
	 //pDC->SetBkColor(RGB(255, 255 , 0));
	 if (nCtlColor==CTLCOLOR_STATIC)
	 {pDC->SetTextColor(RGB (255, 0 , 0));
	 //pDC->SetBkColor(RGB(1,255,0));
	 pDC->SetBkMode(TRANSPARENT);
	 }
	 if (nCtlColor==CTLCOLOR_BTN)
	 {
		 pDC->SetTextColor(RGB(0,0 , 0));
		 pDC->SetBkColor(RGB(255, 255 ,0));//不行呢?
	 }
	// TODO: Return a different brush if the default is not desire
	return hbr;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -