| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖
标题:[求助]数据库只能读不能向其中写入数据
只看楼主 加入收藏
victor
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-3-29
收藏
 问题点数:0 回复次数:2 
[求助]数据库只能读不能向其中写入数据
我现在正试开始做毕业设计了,我的毕业设计题目是研究生入学管理
信息系统中的学生信息管理模块。具体的需求分析及概念结构设计和逻辑结构设计也差不多完成了,现在在正准备进入编程阶段。在正试编程这前,我想到虽然我的VC方面的知识还过得去,可在同数据库通信方面还是一个薄弱环节,所以我特意做了一个测试,就是用基于Win32 application环境来完成数据库中数据的读出和录入。可是却在这里出现了一个问题,让我无法继续下去:下面是我做的那个示例程序:
// testArray.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "afxdisp.h"
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
//#include <adoid.h>
//#include <adoint.h>
#include "icrsint.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
::CoInitialize(NULL);
try
{
_RecordsetPtr pRs("ADODB.Recordset");
pRs->Open("MasterInfo","dsn=MISDB",adOpenUnspecified,adLockOptimistic,adCmdTable);
pRs->MoveFirst();
printf("%s",(char*)_bstr_t(pRs->GetCollect("NO")));
printf("%s",(char*)_bstr_t(pRs->GetCollect("NAME")));
printf("%s",(char*)_bstr_t(pRs->GetCollect("SEX")));
printf("%s",(char*)_bstr_t(pRs->GetCollect("ENTER_YEAR")));
printf("%s",(char*)_bstr_t(pRs->GetCollect("TEACHER_NO")));
printf("%s",(char*)_bstr_t(pRs->GetCollect("BORN_YEAR")));
printf("%s",(char*)_bstr_t(pRs->GetCollect("BORN_PLACE")));
}
catch (_com_error &e )
{
AfxMessageBox("Error: Code = " + e.Error());
printf("Error:\n");
printf("Code = %08lx\n", e.Error());//为什么用c库阿?

printf("Meaning = %s\n", e.ErrorMessage());
printf("Source = %s\n", (LPCSTR) e.Source());
printf("Description = %s\n", (LPCSTR) e.Description());
}
::CoUninitialize();
return 0;
}

这里我要说明的是,这个程序完全是数据库中数据的读出,并且事先我在SQL Server 2000(我用的是个人版)中已经生成了程序中要用的数据库及表,而且也已经相应的创建了一个名为MISDB的数据源。然后我编译运行一点错也没有,最后我把程序移植到Win32 Console application环境下,数据成功地被读到控制台上。
但是单单能读出数据还不行,我还要验证能不能录入数据,因此我又加下了以下几段代码,可现在问题就出来了。我用了不同的方法来向数据库中写入数据,可都不能完成我的要求,不是编译通不过就是链接的时候报错,查了很多资料可也弄不懂到底是什么原因,请老师帮我看一下,下面是我用的来向数据库中写入数据的几个不同的方法:
向数据库中添加一条新的记录
<方法一:>
//创建一个记录字段数据的数组
COleSafeArray vaFieldlist;
vaFieldlist.CreateOneDim(VT_VARIANT,7);
long lArrayIndex[1];
lArrayIndex[0]=0;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("NO")));
lArrayIndex[0]=1;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("NAME")));
lArrayIndex[0]=2;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("SEX")));
lArrayIndex[0]=3;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("ENTER_YEAR")));
lArrayIndex[0]=4;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("TEACHER_NO")));
lArrayIndex[0]=5;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("BORN_YEAR")));
lArrayIndex[0]=6;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("BORN_PLACE")));
//创建一个记录字段值的数组
COleSafeArray vaValuelist;
vaValuelist.CreateOneDim(VT_VARIANT,7);
lArrayIndex[0]=0;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("wer")));
lArrayIndex[0]=1;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("wer")));
lArrayIndex[0]=2;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("wer")));
lArrayIndex[0]=3;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("wer")));
lArrayIndex[0]=4;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("wer")));
lArrayIndex[0]=5;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("wer")));
lArrayIndex[0]=6;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("wer")));
pRs->AddNew(vaFieldlist,vaValuelist);
pRs->Close();
<方法二:>同样是向数据库中添加一条新的记录

pRs->AddNew();
pRs->Fields->GetItem("NO")->PutValue(_variant_t("2000"));
pRs->Fields->GetItem("NAME")->PutValue(_variant_t("2000"));
pRs->Fields->GetItem("SEX")->PutValue(_variant_t("2000"));
pRs->Fields->GetItem("ENTER_YEAR")->PutValue(_variant_t("2000"));
pRs->Fields->GetItem("TEACHER_NO")->PutValue(_variant_t("2000"));
pRs->Fields->GetItem("BORN_YEAR")->PutValue(_variant_t("2000"));
pRs->Fields->GetItem("BORN_PLACE")->PutValue(_variant_t("2000"));
pRs->Close();


这两种方法目的都是一样的,都是要向数据库中添加一条新的记录。可不管是把哪段代码加上去后,编译和链接都能顺利通过,运行可执行文件,此时都会出现错误提示框,
第一种方法产生的错误提示是:"0x77e06673"指令引用的"0x8057ae91"内存,该内存不能为"read"
第二种方法产生的错误提示是:"0x77e06673"指令引用的"0x80556e91"内存,该内存不能为"read"
很显然两种方法产生的错误是一个类型的,可能还是编程经验少的原因,以前还没碰到过类似的问题,找了很多资料也找不到可以解决的办法。因为我做的模块是既能读又能向数据库中写入数据的,比如说查询是要读取数据的而修改则要向数据库中写入数据,因此现在这个问题如不能解决就使我的设计处于停止不前的状况。
希望有哪位高人指定一下。谢谢先
搜索更多相关主题的帖子: 数据库 信息系统 application 毕业设计 结构设计 
2006-04-04 14:31
zinking
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:35
帖 子:916
专家分:0
注 册:2004-12-5
收藏
得分:0 
看来用的是ADO的数据库,看看相关方面的书吧,我还没用过,我用的是odbc
刚好昨天也遇到了你说得那个问题,我还在想呢
呵呵,关注你的solution,解决了记得告诉我哦,让我少走一段路,呵呵

http://kongfuziandlife. http://codeanddesign.
2006-04-05 10:57
wqk1111
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-4-2
收藏
得分:0 
用 _ConnectionPtr的函数 Execute : TRY
1.sql_insert.Format("INSERT INTO WQK_EQPT(EQPT_ID,EQPT_NAME,EQPT_REMARKS) VALUES('%s','%s','%s')", cseqptid,cseqptname,cseqptremarks);

2.m_pConnection->Execute((_bstr_t)sql_insert,NULL,adCmdText);
2006-04-06 10:01
快速回复:[求助]数据库只能读不能向其中写入数据
数据加载中...
 
   



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

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