vc++ 数据库 插入记录 90

先介绍下程序的整体设计哈:程序界面如下图所示:我的需求是:点击刷新后,在一个Excel文档中插入一段记录(因为知识个自习用的模型,所以就没用Access或是别的更高端的数... 先介绍下程序的整体设计哈:
程序界面如下图所示:

我的需求是:点击刷新后,在一个Excel文档中插入一段记录(因为知识个自习用的模型,所以就没用Access或是别的更高端的数据库了哈)

Excel文档的表格结构如下图所示:

下面是点击刷新按钮后的代码:
void C数据库自习模型Dlg::OnBnClickedButton1()
{
if(DB_writer->CanAppend())
{
DB_writer->MoveFirst();
DB_writer->AddNew();
DB_writer->column1="aaaaaaaaaaa";
DB_writer->column2="1111111111";
DB_writer->column3=2;
//*****下面这行代码出现了问题*****//
DB_writer->Update();
}
}
这里的DB_writer变量为一个MFC ODBC使用者对象,此时已近与目标Excel文件建立了连接,并且可以正常读取文件中的信息,但每当运行到“DB_writer->Update();”这句代码的时候,都会弹出如下图所示的错误提示:

在实际操作中,我发现如果删除下面这几行代码:
DB_writer->column1="aaaaaaaaaaa";
DB_writer->column2="1111111111";
DB_writer->column3=2;
程序就不会报错,但这实际上就是什么都没修改啊。。。

小弟我实在水平有限,百度了很久都没有找到合适的解决方案,还求高手们不吝赐教啊。。。
上面的代码调用了检测代码后的结果如下所示哈:

bool i;

i=DB_writer->CanUpdate();//本句运行后,i=false
i=DB_writer->CanAppend();//本句运行后,i=true

另外DB_writer->open()函数的返回值始终为1,看似一切正常哈

open的代码如下(写在OnInitDialog()中):

DB_writer=new CSheet1;
int i=false;
i=DB_writer->Open(CRecordset::dynaset , _T("[Sheet1$]"),CRecordset::appendOnly);
//运行后i=true

还求高手不吝赐教呀。。。
展开
 我来答
lhf118
2014-04-05 · TA获得超过1611个赞
知道小有建树答主
回答量:633
采纳率:100%
帮助的人:493万
展开全部
你都知道调用CanAppend,也应该要知道update前调用canupdate.
你这个问题,应该把Open的代码贴出来看看,我估计你是以readonly方式打开的文件。
因此无法更新。
virtual BOOL Open(
UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
LPCTSTR lpszSQL = NULL,
DWORD dwOptions = none
);

看它的第三个参数dwOptions
追问
canupdate函数返回值始终为false,我open的代码用的是默认值:

DB_writer=new CShe;
DB_writer->Open();

后我将其改为下面的样子,但依然失败

DB_writer->Open(CRecordset::dynaset, NULL,CRecordset::appendOnly);

上面的反回值为1

字数限制真讨厌哎
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式