请问用ADO怎样创建一个access数据库文件? 请问1.用ADO怎样创建一个access数据库文件?(test.mdb)2.假设test.mdb中有三个表,user1,user2,user3.怎样把user1和user2中不同的用户找出,写入user3中去呢?(用ADO)谢谢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.用ADOXBOOL CPassportDoc::CreateDB(LPCTSTR lpszFile){ if(::PathFileExists(lpszFile)){ CString strTemp; strTemp.Format(IDS_TARGET_EXISTS,lpszFile); AfxMessageBox(lpszFile); return FALSE; } ADODB::_ConnectionPtr tempConnn; ADOX::_CatalogPtr pCatalog = NULL; ADOX::_TablePtr pTable = NULL; ADOX::_IndexPtr pIndexNew = NULL; ADOX::_IndexPtr pIndex = NULL; CString strConnect; CString strDBPath=lpszFile; strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"),strDBPath); COleVariant Connect(strConnect); try{ pCatalog.CreateInstance(_T("ADOX.Catalog")); pCatalog->Create((LPCTSTR)strConnect);//创建数据库 tempConnn.CreateInstance(_T("ADODB.Connection")); tempConnn->PutCommandTimeout(30); tempConnn->PutConnectionTimeout(30); tempConnn->put_CursorLocation(ADODB::adUseClient); tempConnn->Open(_bstr_t(strConnect),_bstr_t(),_bstr_t(),ADODB::adConnectUnspecified); pCatalog->PutActiveConnection(_variant_t((IDispatch *) tempConnn)); pTable.CreateInstance(_T("ADOX.Table")); pTable->ParentCatalog =pCatalog; pTable->Name="Passport"; 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); for(long j=0;j<lp;j++){ TRACE("\rProperty %s:%s\r\n",g_GetValueString(pProperties->GetItem(j)->Name) ,g_GetValueString(pProperties->GetItem(j)->Value)); } } } 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();//刷新 return TRUE; } catch(_com_error &e){ ESErrPrintProviderError(tempConnn); ESErrPrintComError(e); return FALSE; } catch(...){ } return FALSE;} 第二个问题,只要给出sql语句就行了,或给个思路! 1,用adox创建数据库文件2,用sql语句,执行 我就是不知sql语句怎么写啊,能说祥细点吗?谢谢! 1、用ADOX创建Access数据库。#include <afx.h>#include <afxdisp.h>#pragma warning (disable: 4146)#import "c:\Program Files\Common Files\system\ado\msadox.dll" no_namespace#import "c:\Program Files\Common Files\system\ado\msado15.dll" rename("EOF", "EndOfFile")#include "icrsint.h"#pragma warning (default: 4146)public: _CatalogPtr m_pCatalog; bool CreateDatabase(LPCTSTR lpstrCreate);......//----------------------------------------------------bool CMyADOClass::CreateDatabase(LPCTSTR lpstrCreate){ try { m_pCatalog->Create(_bstr_t(lpstrCreate)); return true; } catch(_com_error &e) { dump_com_error(e); return false; }}......//---------------------------------------------------------2、表对象可以用ADOX创建(就是_TablePtr和_ColumnPtr)。也可以用sql语句创建:create table mytablename(id int,thename varchar(12)...); 你的第二个问题说得很不清楚~!我想你的意思是这样:INSERT INTO tUser3SELECT [Name] From tUser1 a Where a.[Name] NOT IN SELECT [Name] From tUser2 其实第二个问题意思是:假设test.mdb中有三个表:user1,user2,user3.怎样把user1.name和user2.name中不同的用户找出,写入user3.name中去呢?(用ADO) VC读取非程序创建的Excel表格文件 问个磁盘阵列的问题。。。。 请教高手,可否用后台服务来启动登陆用户的程序,从而防止用户杀死进程,不知有没有可能实现。。。 一个关于访问远程数据库,出现的延时问题 出现编译错误!!!请求帮助!! ATL开发的控件如何生成cab文件 100求WIN2K英文版下载 定时器重置怎么样搞阿?机理是什么? 线程已经结束了,但有内存泄露,怎样在主线程中释放掉这些泄露的内存 在按钮中做的一个结束进程代码 怎么实现不了功能 检测组合键的问题 大家帮忙呀,在线给分 奇怪的问题:在vc编辑环境中运行成功,直接运行生成的可执行程序却失败。(注:使用了dll)
{
if(::PathFileExists(lpszFile)){
CString strTemp;
strTemp.Format(IDS_TARGET_EXISTS,lpszFile);
AfxMessageBox(lpszFile);
return FALSE;
}
ADODB::_ConnectionPtr tempConnn;
ADOX::_CatalogPtr pCatalog = NULL;
ADOX::_TablePtr pTable = NULL;
ADOX::_IndexPtr pIndexNew = NULL;
ADOX::_IndexPtr pIndex = NULL;
CString strConnect;
CString strDBPath=lpszFile;
strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"),strDBPath);
COleVariant Connect(strConnect);
try{
pCatalog.CreateInstance(_T("ADOX.Catalog"));
pCatalog->Create((LPCTSTR)strConnect);//创建数据库
tempConnn.CreateInstance(_T("ADODB.Connection"));
tempConnn->PutCommandTimeout(30);
tempConnn->PutConnectionTimeout(30);
tempConnn->put_CursorLocation(ADODB::adUseClient);
tempConnn->Open(_bstr_t(strConnect),_bstr_t(),_bstr_t(),ADODB::adConnectUnspecified);
pCatalog->PutActiveConnection(_variant_t((IDispatch *) tempConnn));
pTable.CreateInstance(_T("ADOX.Table"));
pTable->ParentCatalog =pCatalog;
pTable->Name="Passport";
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);
for(long j=0;j<lp;j++){
TRACE("\rProperty %s:%s\r\n",g_GetValueString(pProperties->GetItem(j)->Name)
,g_GetValueString(pProperties->GetItem(j)->Value));
}
}
}
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();//刷新
return TRUE;
}
catch(_com_error &e){
ESErrPrintProviderError(tempConnn);
ESErrPrintComError(e);
return FALSE;
}
catch(...){
}
return FALSE;
}
2,用sql语句,执行
谢谢!
#include <afx.h>
#include <afxdisp.h>#pragma warning (disable: 4146)
#import "c:\Program Files\Common Files\system\ado\msadox.dll" no_namespace
#import "c:\Program Files\Common Files\system\ado\msado15.dll" rename("EOF",
"EndOfFile")#include "icrsint.h"#pragma warning (default: 4146)public:
_CatalogPtr m_pCatalog;
bool CreateDatabase(LPCTSTR lpstrCreate);
......
//----------------------------------------------------
bool CMyADOClass::CreateDatabase(LPCTSTR lpstrCreate)
{
try
{
m_pCatalog->Create(_bstr_t(lpstrCreate));
return true;
}
catch(_com_error &e)
{
dump_com_error(e);
return false;
}
}
......
//---------------------------------------------------------
2、表对象可以用ADOX创建(就是_TablePtr和_ColumnPtr)。
也可以用sql语句创建:create table mytablename(id int,thename varchar(12)...);
SELECT [Name] From tUser1 a Where a.[Name] NOT IN SELECT [Name] From tUser2
假设test.mdb中有三个表:user1,user2,user3.
怎样把user1.name和user2.name中不同的用户找出,写入user3.name中去呢?(用ADO)