赠送1000分可用分,寻求ALT OLE DB的问题解答
1.用ALT OLE DB访问ACCESS数据库,如何知道记录的某字段为空,如何设置该字段为空。
2.用ALT OLE DB访问ACCESS数据库,如何新建ACCESS数据库
3.用ALT OLE DB访问ACCESS数据库,如何使用除SELECT以外的SQL语句(比如Create Table).
能提供范例更好!
我赶工程急用,希望各位大虾指教,我在此谢谢大家!!
问题点数:100、回复次数:11Top
1 楼pony_utc(天外来客)回复于 2002-04-21 17:59:03 得分 0
我的环境是Window98,VC6.0,用ACCESS97,Microsoft.Jet.OLEDB.3.51连接Top
2 楼Haiwer(海阔天空)回复于 2002-04-21 18:10:26 得分 5
1、对你的ALT不了解,但可以用SQL语句来区分:
where colname is null
update ... set colname = null ...
3、没用过VC的OLE DB,但在VB里的用法不复杂,你看看VC的对应语句应该是什么。
con.execute "Create tabel test(...)"
con.execute "insert into test(a,b,c) values('z',1,#2002-4-21#)"
con.execute "update testset c=#2002-4-21# where a='a'"
等等。
Top
3 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-04-21 18:29:57 得分 10
#import "c:\Program Files\Common Files\system\ado\msadox.dll" no_namespace
#import "c:\Program Files\Common Files\system\ado\msado15.dll"
#define TESTHR(x) if FAILED(x) _com_issue_error(x);
//------------------------------------------------------------ //
//CreateDatabaseX
//Purpose: create a new Jet database with the Create method
//------------------------------------------------------------ //
void CreateDatabaseX()
{
HRESULT hr = S_OK;
// Define ADOX object pointers.
// Initialize pointers on define.
// These are in the ADOX:: namespace.
_CatalogPtr m_pCatalog = NULL;
//Set ActiveConnection of Catalog to this string
_bstr_t strcnn("Provider=Microsoft.JET.OLEDB.4.0;"
"Data source = c:\\new.mdb");
try
{
TESTHR(hr = m_pCatalog.CreateInstance(__uuidof (Catalog)));
m_pCatalog->Create(strcnn);
}
catch(_com_error &e)
{
// Notify the user of errors if any.
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\n\tSource : %s \n\tdescription : %s \n ",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
}
catch(...)
{
cout << "Error occured in include files...."<< endl;
}
}
Top
4 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-04-21 18:32:32 得分 0
#import "c:\Program Files\Common Files\system\ado\msadox.dll" \
no_namespace
//Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
//////////////////////////////////////////////////////////
// //
// CreateTableX Function //
// //
//////////////////////////////////////////////////////////
void CreateTableX()
{
HRESULT hr = S_OK;
// Define ADOX object pointers.
// Initialize pointers on define.
// These are in the ADOX:: namespace.
_CatalogPtr m_pCatalog = NULL;
_TablePtr m_pTable = NULL;
try
{
TESTHR(hr = m_pCatalog.CreateInstance(__uuidof(Catalog)));
//Open the catalog
m_pCatalog->PutActiveConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;" \
"data source=c:\\Program Files\\Microsoft Office"
"\\Office\\Samples\\Northwind.mdb;");
TESTHR(hr = m_pTable.CreateInstance(__uuidof(Table)));
m_pTable->PutName("MyTable");
m_pTable->Columns->Append("Column1",adInteger,0);
m_pTable->Columns->Append("Column2",adInteger,0);
m_pTable->Columns->Append("Column3",adVarWChar,50);
m_pCatalog->Tables->Append(
_variant_t((IDispatch *)m_pTable));
//Delete the table
m_pCatalog->Tables->Delete("MyTable");
}
catch(_com_error &e)
{
// Notify the user of errors if any.
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\n\tSource : %s \n\tdescription : %s \n ",
(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
}
catch(...)
{
cout << "Error occured in include files...."<< endl;
}
}
Top
5 楼Viper()回复于 2002-04-22 08:57:47 得分 0
gzerTop
6 楼biggo(biggo)回复于 2002-04-24 10:46:25 得分 20
呵,呵!
不错,居然还有人喜欢直接使用原生的OleDB
OleDB最大的优势,就是快,
我做个一个项目,
第一次做的时候用的是VC+OleDB访问数据库,
第二次做的时候是Delphi_ADO,
在程序的核心——处理数据部分速度上的感觉简直差了一个数量级。
你问我为什么第二次用的时候不用VC+OleDB了,
因为想贪图方便,把界面等做好点,也就只好牺牲速度了。
使用OleDB有两种方法,一种是真正的原生OleDB,不过这种方式,除非你是开发数据库引擎驱动驱动程序之类的,才建议采用,不然,这种方式的代码,简直可以用海量来形容。不好写。
第二种是采用MFC封装的OleDB类来写,我建议采用这种方式,我也是这么用的。
用它来开发程序,感觉和用ADO来开发差不多,但执行效率要高很多。
如果你要学,你的问题,不是三言两语就能说完的,建议你下载VC6的“模板库参考手册”那里面说的很清楚使用方法,全中文,文件大小12M多,华康格式的书,
用VC6你要装上sp5再用Oledb,sp4中Oledb有一个小问题。
你先研究这本书,然后在Msdn中间看看相关内容。不用多长时间能掌握的。
楼上的朋友用的其实是ADO,回答错了方向。
希望你成功。Top
7 楼pony_utc(天外来客)回复于 2002-04-25 08:37:32 得分 0
谢谢你!biggo!!你能告诉我如何建表呢?建库和判断空值的问题我都解决了。Top
8 楼biggo(biggo)回复于 2002-04-25 09:38:11 得分 50
建立一个CCommand对象
CCommand.open(session , '你建表的指令', &propset, NULL, DBGUID_DBSQL, False)
propset是什么东西,如果你用Oledb就应该知道吧,不要我说了。
好象propset的位置写为Null就可以了,最后一个参数一定是False
时间长了,我有点记不清指令的写法。
如果你想判断空值,好象利用alt向导自动产生的数据绑定类型是做不到的。
因为它们有的是确定的数据类型,如int类型等,你可以手工改为Variant类型,Variant类型数据是可以判断空值的。
你自己尝试一下Top
9 楼pony_utc(天外来客)回复于 2002-04-25 10:07:08 得分 0
谢谢你,biggo!!Top
10 楼ezway(高手的零头★★★★☆)回复于 2002-04-25 11:02:13 得分 0
我很困惑的是:你是一级用户,怎么能赠送1000分可用分,
就是1分也没这个权限呀,,,,,,Top
11 楼blue_flash(蓝色闪电)回复于 2002-04-25 11:16:06 得分 15
会写存取器吗?
将
COLUMN_ENTER
改成
COLUMN_ENTRY_STATUS
将Status变量设置成 DBSTATUS_S_ISNULLTop
相关问题
- 求动态报表生成源码,可用分全部赠送。
- 有谁能给个解答啊?Delphi技巧问题!30大赠送!
- 二维搜索问题。(高手快进!!!!如解答满意,500~1000分赠送)
- JSP问题,高手进,48小时内结贴.高分赠送解答者
- 求高手解答:TreeView子节点不可用的处理方法!高分相赠!
- 请问如何恢复Ctrl+Alt+Del键为可用
- 用VC或VB如何屏闭掉ctrl + alt + del 热启动键,急等解答
- 谁做过分布式三层数据库系统开发,请进。100分赠送(解答更好还加分)急,谢谢。
- 一个多线程问题,UP一次10分,回答有关20分,解答得好100分,我有7036可用分
- 为什么大家都这么多分可以赠送,本人的可用分少得可怜啊,帮帮我啊!




