ACCESS批量插入(C++,控制台)跪求~~~~

cqdjyy01234 2011-03-25 03:46:33
下面是我代码:
问题有两个:1.表为空的时候可以插入;2。表不空时只能插入一条记录!跪求了跪求了!!!请不要到网上复制,既然贴在这儿就已经在网上找过办法了!不要让我换数据库,没条件~~~帮忙顶一哈也好啊!

#include <link2Access.h>
#include <cstringt.h>
#include <iostream>
#include "icrsint.h"
class ATTACKTYPE : public CADORecordBinding
{
BEGIN_ADO_BINDING(ATTACKTYPE)
ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, key1, sizeof(key1), status1, TRUE)
ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, key2, sizeof(key2), status2, TRUE)
ADO_VARIABLE_LENGTH_ENTRY2(4, adVarChar, key3, sizeof(key3), status3, TRUE)
ADO_VARIABLE_LENGTH_ENTRY2(5, adVarChar, cipher, sizeof(cipher), status4, TRUE)
END_ADO_BINDING()
public:
char key1[10],key2[10],key3[10];
ULONG status1,status2,status3;
char cipher[10];
ULONG status4;
};

int main()
{
_ConnectionPtr m_pConnection;
CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open(_ACCESS"Data Source=d:\\我的文档\\Access\\mydb.mdb","","",adConnectUnspecified);
}
catch(_com_error &e)
{
printError(e);
return 1;
}

IADORecordBinding* m_pBind=0;
ATTACKTYPE att;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
try{
m_pRecordset->Open("attack1",_variant_t(m_pConnection,true),adOpenDynamic,adLockBatchOptimistic,adCmdTable);
m_pRecordset->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&m_pBind);
m_pBind->BindToRecordset(&att);
strcpy(att.key1,"aaa");
strcpy(att.key2,"aaa");
strcpy(att.key3,"aaa");
strcpy(att.cipher,"aaa");
for (long i=1;i<=200;++i)
{
m_pBind->AddNew(&att);
}
m_pRecordset->UpdateBatch(adAffectAll);

//m_pBind->AddNew(&att);
//m_pRecordset->UpdateBatch(adAffectAll);
}
catch(_com_error& e)
{
m_pRecordset->CancelBatch(adAffectAll);
}
if(m_pBind)
m_pBind->Release();
if(m_pRecordset)
if(m_pRecordset->State==adStateOpen)
m_pRecordset->Close();

//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
if(m_pConnection)
if (m_pConnection->State==adStateOpen)
m_pConnection->Close();
m_pConnection=0;

CoUninitialize();

return 0;
}
...全文
229 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
问题二已自行解决!请达人帮忙解决第一个问题!跪求了~
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
不好意思,弄错了!注掉之后数据添加不进去!如果把m_pBind->AddNew(&att);换成m_pRecordset->AddNew();而且注掉,则出现上面说的错误!
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
谢谢ACMAIN_CHM,可是注释掉之后提示:
ADO Error
Code = -2147217836
Code meaning = 0017A308
Source = Provider
Description = 有挂起更改的行数已超过限制。
怎么回事呢?
ACMAIN_CHM 2011-03-25
  • 打赏
  • 举报
回复
把这句注释掉。

m_pRecordset->UpdateBatch(adAffectAll);
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
ACCESS中除自增字段,其余全是文本类型
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
程序“[2984] HeloADO.exe: 本机”已退出,返回值为 0 (0x0)。
我在catch设置了断点,没有停在catch内部!
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
没有错误提示,因为catch没有获取到异常~~~
wwwwb 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cqdjyy01234 的回复:]
因为这只是测试,所以只插入200,事实上我需要插入6的数据,用insert into不会太慢了??没有提示,因为代码编译,运行通过!
[/Quote]
能够运行,没有插入记录?那应该有错误提示,字段类型与变量类型是否一致
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
代码中
strcpy(att.key1,"aaa");
strcpy(att.key2,"aaa");
strcpy(att.key3,"aaa");
strcpy(att.cipher,"aaa");
就是了,一个示例
wwwwb 2011-03-25
  • 打赏
  • 举报
回复
自增字段可以 不写
尝试用INSERT INTO VALUES试试
要插入的 具体内容贴出来看看
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
就一组数据(char,char,char,string)这样子的东西,但是有很多很多!因为是测试代码,赋值之后再循环体中没有更改数据的值!数据库的属性有:ID(自动编号),key0,key1,key2,cipher
wwwwb 2011-03-25
  • 打赏
  • 举报
回复
你是用循环插入的,要插入MDB表中的内容是什么 ?
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
是6万的数据,而且不止一次!
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
因为这只是测试,所以只插入200,事实上我需要插入6的数据,用insert into不会太慢了??没有提示,因为代码编译,运行通过!
wwwwb 2011-03-25
  • 打赏
  • 举报
回复
直接INSERT INTO 不行?提示什么?怎样连接MDB的?
cqdjyy01234 2011-03-25
  • 打赏
  • 举报
回复
笔误!是表空时,插入没有结果!

7,712

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧