| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1232 人关注过本帖
标题:急:access2003 创建表 问题请教!
只看楼主 加入收藏
daviemeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-10-15
收藏
 问题点数:0 回复次数:6 
急:access2003 创建表 问题请教!

各位大虾 :
我在用VC6.0创建 ACCESS的时候使用语句:
m_connection->Execute("CREATE TABLE list(ID INTEGER,Name TEXT,PDTag TEXT,Value TEXT,Quality TEXT,TimeStamp TEXT,DeviceID TEXT,DeviceIP TEXT,DeviceType TEXT,Help TEXT)",&RecordsAffected,adCmdText); 的时候异常中断 ;
而改成:
m_connection->Execute("CREATE TABLE list(ID INTEGER,Name TEXT,PDTag TEXT)",&RecordsAffected,adCmdText); 就会 成功 ,不知为啥 啊 ?只不过是前一个比后面的多几个字段而已.ACCESS 最多不可以创建255个字段吗 ?


哪位 高手请 指教啊!谢谢 !!!!!!!!


我的代码是这样的 :
CoInitialize(NULL); //初始化COM库
_ConnectionPtr m_connection;
HRESULT hr;
_bstr_t strcnn("Provider=Microsoft.JET.OLEDB.4.0;"
"Data source=C:\\ddd.mdb");
try
{
ADOX::_CatalogPtr m_pCatalog=NULL;
hr=m_pCatalog.CreateInstance(_uuidof(ADOX::Catalog));
if(FAILED(hr))
{
_com_issue_error(hr);
}
else
{
try
{
m_pCatalog->Create(_bstr_t(strcnn));
}
catch (...)
{

}
}

}
catch (...)
{
AfxMessageBox("生成数据库失败");
return true;

}
try
{
LoadDBSource("ddd","C:\\ddd.mdb","access database");//这个是 动态加载数据源的函数,在注册表中能看到调用 这个函数后成功
}
catch(...)
{
TRACE("加载数据源失败");
return true;
}
hr=m_connection.CreateInstance(_uuidof(Connection));//创建与数据源的连接
if(FAILED(hr))
{
TRACE("与数据源连接失败");
return true;
}
hr=m_connection->Open("DSN=ddd","","",adConnectUnspecified);//打开数据源
if(FAILED(hr))
{
TRACE("打开数据源失败");
return true;
}

//m_connection->Execute("CREATE TABLE list(ID INTEGER,Name TEXT,PDTag TEXT)",&RecordsAffected,adCmdText);
m_connection->Execute("CREATE TABLE list(ID INTEGER,Name TEXT,PDTag TEXT,Value TEXT,Quality TEXT,TimeStamp TEXT,DeviceID TEXT,DeviceIP TEXT,DeviceType TEXT,Help TEXT)",&RecordsAffected,adCmdText);
......

搜索更多相关主题的帖子: TEXT INTEGER connection 字段 
2007-10-15 21:57
NS2007
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-14
收藏
得分:0 
access2003 是用Microsoft.JET.OLEDB.4.0吗?
2007-10-15 23:46
daviemeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-10-15
收藏
得分:0 

我试了Provider=Microsoft.JET.OLEDB.3.51也 不行 .就是执行 到 m_connection->Execute("CREATE TABLE list(ID INTEGER,Name TEXT,PDTag TEXT,Value TEXT,Quality TEXT,TimeStamp TEXT,DeviceID TEXT,DeviceIP TEXT,DeviceType TEXT,Help TEXT)",&RecordsAffected,adCmdText); 这块就异常中断 提示:

0x7c812a5b处未处理的异常:Miscrosoft c++ exeception:_com_error @0x0012d55c


完后点中断后 指示在:

inline _RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) {
struct _Recordset * _result = 0;
HRESULT _hr = raw_Execute(CommandText, RecordsAffected, Options, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
---> return _RecordsetPtr(_result, false);
}
请问 connection->Execute语句是不是有什么限制啊 ?因为我在 使用3个字段时候就不会异常 多了就异常 ,很是不解

2007-10-16 12:52
tanfox
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-10-16
收藏
得分:0 
回复:(daviemeng)急:access2003 创建表 问题请教!
頂起來先
2007-10-16 13:00
daviemeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-10-15
收藏
得分:0 
可气的是 使用 m_connection->Execute("CREATE TABLE list(ID INTEGER,Name TEXT,PDTag TEXT)",&RecordsAffected,adCmdText);会成功 但是要是将其中的 一个字段名改了比如 :
m_connection->Execute("CREATE TABLE list(ID INTEGER,Name TEXT,Value TEXT)",&RecordsAffected,adCmdText); 就又 会异常 中断 ,到底为什么啊 ?是不是有什么记忆的东西啊 ? 哪位大虾 指点指点啊.
2007-10-16 14:34
daviemeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-10-15
收藏
得分:0 
_com_error &e得到的内容是:IDispatch error #3092(errormessage())
[Microsoft][ODBC Microsoft Access Driver] 字段定义语法错误。(discription())
Microsoft OLE DB Provider for ODBC Drivers(source())
调了2天了 服了!
2007-10-16 16:31
daviemeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-10-15
收藏
得分:0 
弄明白了 原来 是字段名与ACCESS的固有的冲突 把字段名加上[]就可以了 .....!就是:
m_connection->Execute("CREATE TABLE list([ID] INTEGER,[Name] TEXT,[PDTag] TEXT,[Value] TEXT,[Quality] TEXT,[TimeStamp] TEXT,[DeviceID] TEXT,[DeviceIP] TEXT,[DeviceType] TEXT,[Help] TEXT)",&RecordsAffected,adCmdText);
2007-10-17 21:19
快速回复:急:access2003 创建表 问题请教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013253 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved