VC 操作ACCESS的建立資料庫,表,新增修改刪除記錄等
#import "C:\Program Files\Common Files\System\ado\msadox.dll"
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\
rename("EOF","adoEOF")rename("BOF","adoBOF") //匯入ADO動態連結庫
class ADO
{
public:
_ConnectionPtr m_pConnection; //連線物件指標
_RecordsetPtr m_pRecordset; //記錄集物件指標
public:
ADO();
virtual ~ADO();
BOOL CreateDB(LPCTSTR lpszFileName);
void OnInitADOConn(); //連線資料庫
_RecordsetPtr& OpenRecordset(CString sql); //開啟記錄集
void CloseRecordset(); //關閉記錄集
void CloseConn(); //關閉資料庫連線
UINT GetRecordCount(_RecordsetPtr pRecordset); //獲得記錄數
};
ADO::ADO()
{
CoInitialize(NULL);
}
ADO::~ADO()
{
CoUninitialize();
}
BOOL ADO::CreateDB(LPCTSTR lpszFile)
//{
// BOOL CPassportDoc::CreateDB(LPCTSTR lpszFile)
{
_ConnectionPtr tempConnn;
ADOX::_CatalogPtr pCatalog = NULL;
ADOX::_TablePtr pTable = NULL;
ADOX::_IndexPtr pIndexNew = NULL;
ADOX::_IndexPtr pIndex = NULL;
_variant_t d;
HRESULT hr;
CString strConnect;
CString strDBPath=lpszFile;
strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"),strDBPath);
COleVariant Connect(strConnect);
try{
hr = pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
if (FAILED(hr))
{
_com_issue_error(hr);
// return FALSE;
}
if (GetFileAttributes(lpszFile) == INVALID_FILE_ATTRIBUTES)
{
hr = pCatalog->Create((LPCTSTR)strConnect);//建立資料庫
}
tempConnn.CreateInstance(_T("ADODB.Connection"));
tempConnn->PutCommandTimeout(30);
tempConnn->PutConnectionTimeout(30);
tempConnn->put_CursorLocation(adUseClient);
tempConnn->Open(_bstr_t(strConnect),_bstr_t(),_bstr_t(),adConnectUnspecified);
pCatalog->PutActiveConnection(_variant_t((IDispatch *) tempConnn));
pTable.CreateInstance(_T("ADOX.Table"));
pTable->ParentCatalog =pCatalog;
pTable->Name="Passport1";
ADOX::ColumnsPtr pCols =pTable->Columns;
pCols->Append(_T("RecordID") ,ADOX::adInteger,0);//自動編號欄位
pCols->Append(_T("Name") ,ADOX::adWChar,255);//文字欄位
pCols->Append(_T("DateOfBirth") ,ADOX::adDate,0);//日期欄位
pCols->Append(_T("OtherInfo"),ADOX::adLongVarWChar,0);//備註欄位
pCatalog->Tables->Refresh();
long lCount=pCols->Count;
for(long i=0;i<lCount;i++)
{
pCols->GetItem(i)->ParentCatalog =pCatalog;//重要!設定Catalog,參見Q201826 PRB: Error 3265 When You Access Properties Collection
ADOX::PropertiesPtr pProperties=pCols->GetItem(i)->Properties;
if(pProperties)
{//這裡是用於除錯的屬性顯示程式碼
long lp=pProperties->Count;
TRACE("Properties for Col %s\r\n",(LPCTSTR)pCols->GetItem(i)->Name);
}
}
//設定說明
pCols->GetItem(_T("RecordID"))->Properties->GetItem(_T("Description"))->Value=_T("記錄編號");//註釋
pCols->GetItem(_T("RecordID"))->Properties->GetItem(_T("AutoIncrement"))->Value=true;//自動編號
pCols->GetItem(_T("Name"))->Properties->GetItem(_T("Jet OLEDB:Compressed UniCode Strings"))->Value=true;
pCols->GetItem(_T("Name"))->Properties->GetItem(_T("Description"))->Value=_T("姓名");
pCols->GetItem(_T("DateOfBirth"))->Properties->GetItem(_T("Description"))->Value=_T("出生日期");
pCols->GetItem(_T("OtherInfo"))->Properties->GetItem(_T("Jet OLEDB:Compressed UniCode Strings"))->Value=true;
pCols->GetItem(_T("OtherInfo"))->Properties->GetItem(_T("Description"))->Value=_T("其他資訊");
//--
pCatalog->Tables->Append(_variant_t ((IDispatch*)pTable));//新增表
pCatalog->Tables->Refresh();//重新整理
pIndexNew.CreateInstance(_T("ADOX.Index"));
pIndexNew->Name = "RecordID";//索引名稱
pIndexNew->Columns->Append("RecordID",ADOX::adInteger,0);//索引欄位
pIndexNew->PutPrimaryKey(-1);//主索引
pIndexNew->PutUnique(-1);//唯一索引
pTable->Indexes->Append(_variant_t ((IDispatch*)pIndexNew));//建立索引
pIndexNew=NULL;
pCatalog->Tables->Refresh();//重新整理
tempConnn->Close();
return TRUE;
}
catch(_com_error &e)
{
AfxMessageBox(e.Description()); //彈出錯誤處理
return FALSE;
}
catch(...)
{
}
return FALSE;
}
// return TRUE;
//}
void ADO::OnInitADOConn()
{
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection"); //建立連線物件例項
_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
uid=;pwd=;DBQ=DataBase.mdb;";
m_pConnection->Open(strConnect,"","",adModeUnknown); //開啟資料庫
}
catch(_com_error e)
{
AfxMessageBox(e.Description()); //彈出錯誤處理
}
}
_RecordsetPtr& ADO::OpenRecordset(CString sql)
{
ASSERT(!sql.IsEmpty()); //SQL語句不能為空
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset)); //建立記錄集物件例項
m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText); //執行SQL得到記錄集
}
catch(_com_error e) //捕獲可能的異常
{
AfxMessageBox(e.Description());
}
return m_pRecordset;
}
void ADO::CloseRecordset()
{
if(m_pRecordset->GetState() == adStateOpen) //判斷當前的記錄集狀態
m_pRecordset->Close(); //關閉記錄集
}
void ADO::CloseConn()
{
m_pConnection->Close(); //關閉資料庫連線
::CoUninitialize(); //釋放COM環境
}
UINT ADO::GetRecordCount(_RecordsetPtr pRecordset)
{
int nCount = 0; //宣告儲存記錄數的變數
try{
pRecordset->MoveFirst(); //將記錄集指標移動到第一條記錄
}
catch(...) //捕捉可能出現的錯誤
{
return 0; //產生錯誤時返回0
}
if(pRecordset->adoEOF) //判斷記錄集中是否沒有記錄
return 0; //無記錄時返回0
while (!pRecordset->adoEOF) //當記錄集指標沒有指向最後時
{
pRecordset->MoveNext(); //將記錄集指標移動到下一條記錄
nCount = nCount + 1; //記錄個數的變數加1
}
pRecordset->MoveFirst(); //將記錄集指標移動到第一條記錄
return nCount; //返回記錄數
}
//用例
void CUseAdoDlg::AddToGrid()
{
ADO m_Ado;
m_Ado.OnInitADOConn();//連線資料庫
CString SQL = "select * from employees order by 編號 desc"; //設定查詢字串
m_Ado.m_pRecordset = m_Ado.OpenRecordset(SQL);//開啟記錄集
while(!m_Ado.m_pRecordset->adoEOF)
{
m_Grid.InsertItem(0,"");
m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("編號"));
m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("姓名"));
m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("學歷"));
m_Ado.m_pRecordset->MoveNext();//將記錄集指標移動到下一條記錄
}
m_Ado.CloseRecordset();
m_Ado.CloseConn();//斷開資料庫連線
}
void CUseAdoDlg::OnButadd()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty())
{
MessageBox("基礎資訊不能為空!");
return;
}
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from employees";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->AddNew(); //新增新行
m_Ado.m_pRecordset->PutCollect("編號",(_bstr_t)m_ID);
m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name);
m_Ado.m_pRecordset->PutCollect("學歷",(_bstr_t)m_Culture);
m_Ado.m_pRecordset->Update(); //更新資料表記錄
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失敗");
return;
}
MessageBox("新增成功");
m_Grid.DeleteAllItems(); //刪除列表控制元件
AddToGrid();
}
void CUseAdoDlg::OnButmod()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty())
{
MessageBox("基礎資訊不能為空!");
return;
}
int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from employees";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move((long)pos,vtMissing);
m_Ado.m_pRecordset->PutCollect("編號",(_bstr_t)m_ID);
m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name);
m_Ado.m_pRecordset->PutCollect("學歷",(_bstr_t)m_Culture);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失敗");
return;
}
MessageBox("修改成功");
m_Grid.DeleteAllItems();
AddToGrid();
}
void CUseAdoDlg::OnButdel()
{
// TODO: Add your control notification handler code here
int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from employees";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move(pos,vtMissing);
m_Ado.m_pRecordset->Delete(adAffectCurrent);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失敗");
return;
}
MessageBox("刪除成功");
OnButclear();
m_Grid.DeleteAllItems();
AddToGrid();
}
相關推薦
VC 操作ACCESS的建立資料庫,表,新增修改刪除記錄等
#import "C:\Program Files\Common Files\System\ado\msadox.dll" #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\ rename("EOF","
程式設計實現順序表的以下基本操作:建立順序表,修改順序表,插入順序表,刪除順序表。
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; typedef int ElemType; typedef int Statu
Django下mysql資料庫的相關操作(建立資料表、以及增刪查改)
如有疑惑或錯誤之處可評論或郵箱聯絡博主:[email protected] 本文主要記錄了在django下使用mysql資料庫時的相關操作,包括建立資料庫、資料表、以及增刪查改。 博主開發環境:Ubuntu16.04,python2.7,d
Zookeeper客戶端基本操作java實現——建立連線、建立節點、新增修改節點內容、獲取子節點、獲取節點資料、刪除節點
一、引入Zookeeper包,新增pom依賴 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper<
用VB程式碼在SQL SERVER 中建立資料庫,表,列.以及對資料庫的操作
前面看了一編用VB程式碼建立ACCESS資料庫的文章,寫的很好.根據思路,寫下建立SQL 資料庫的方法,供大家參考.1:引用ADO2.5lib2:在窗體上新增一個按鈕COMMAND13:按鈕程式碼如下:Private Sub Command1_Click()Dim cnn A
關於PyCharm 中使用sqlite建立資料庫表,表不顯示的問題。
1.問題: 在pycharm中將爬取的資料通過sqlite3儲存在資料庫表中,資料庫名稱為:film.sqlite3,建立表名為:filmtop250。過程為 import sqlite3 film = sqlite3.connect('film.sqlite3') create_table
think PHP建立資料庫表,資料庫表更名
引用 use think\Db; 建立表方法 public function createTable($tableName) { $sql = "CREATE TABLE IF NOT EXISTS `$tableName` ( `id` in
python django建立資料庫表並連線mysql資料庫(附mysql 8.0.12安裝)
先寫下mysql zip安裝方式,在環境變數中加入mysql/bin路徑,把zip解壓到C:\program files下,在最外層資料夾建立my-default.ini 寫入內容: [mysqld] basedir=C:\Program Files\MySQL data
Shell 指令碼批量建立資料庫表
使用 Shell 指令碼批量建立資料表 系統:Centos6.5 64位 MySQL版本:5.1.73 比如下面這個指令碼: #!/bin/bash #批量新建資料表 for y in {0..199};do mysql -uroot -proot -e "use mysql; cr
按日期建立資料庫表--美美美美菜菜菜菜
<?php class TOrderBaseModel extends DbModel { const BASE_TABLE_NAME = 't_order_base'; private static $db_connection; private static
python django建立資料庫表並連線mysql資料庫(附mysql安裝)
先寫下mysql zip安裝方式,在環境變數中加入mysql/bin路徑,把zip解壓到C:\program files下,在最外層資料夾建立my-default.ini 寫入內容: [mysqld] basedir=C:\Program Files\MySQL d
springBoot下java自動建立資料庫表
####SpringBoot環境啟動專案建立資料庫表 ####使用環境 windows+eclipse+mysql+navicat ####步驟 1.建立SpringBoot專案 2.新建資料庫,配置連線資訊 3.編寫初始化資料庫表類 4.執行檢視結果 1.建立
Linux C++ 單鏈表新增,刪除,輸出,逆序操作
/*單鏈表操作*/#include <iostream>using namespace std; class Node{ public: Node(){ next=0; } Node(int el, Node *ptr=0) { info=el; next=ptr;
C#對資料庫的新增、刪除和修改
string str = "server=NO1;database=SuperMarket;integrated security=true"; SqlConnection c
Python學習筆記(2)通過sqlalchemy建立資料庫表
在之前的學習筆記中講了如何通過sqlalchemy來連線資料庫,那麼以此為前提我們通過sqlalchemy來建立資料庫表,如果不知道的話請看Python學習筆記(1) 使用sqlalchemy連線mysql # encoding: utf-8 from sqlalchem
SQL_3th_T-SQL語句建立和刪除資料庫、新增和刪除約束
在SQL Server 2008 R2中點選新建查詢,輸入如下程式碼,選中程式碼段,並點選執行,就能執行選中區域程式碼: --使用數T-SQL語句來建立資料庫 create database Students on ( name='Students', --這是資料檔案的邏
java程式碼建立資料庫表
package com.soft.share.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.util.Ar
為學生運動會比賽資訊建立資料庫表
需要儲存的資料如下: 運動員sporter(運動員編號sporterid,運動員姓名name,運動員性別sex,所屬系號department)專案item(專案編號itemid,專案名稱itemname,專案比賽地點location)成績grade(運動員編號id,專案編號i
解決Hibernate不能自動建立資料庫表的問題
HibernateTest(測試類):package club.mochunrong.hibernate.test; import java.io.PrintStream; import club.mochunrong.hibernate.bean.User; impor
sqlite3建立資料庫表
1、建立一個新的資料庫:sqlite3 檔名 先建立一個 Db 目錄,並在 Db 目錄中建立一個 test.db 資料庫檔案,開啟控制檯視窗,命令如下: mkdir Db cd Db sqlite3 test.db 2、開啟一個已經存在的資料庫:sql