简单问题: 关于ADO增加记录.

TigerHu 2001-11-21 01:15:47
我想INSERT一条记录到Access表中,如果表中有这条记录,则Update,否则Insert。
...全文
264 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
TigerHu 2001-11-22
  • 打赏
  • 举报
回复
怎么回事????还是给不了分????
eng 2001-11-21
  • 打赏
  • 举报
回复
#import "c:\program files\common files\system\ado\msado15.dll" rename ("EOF","adoEOF") no_namespace
...

_ConnectionPtr m_pConnection; //数据库连接对象
_CommandPtr m_pCommand; //命令集
_RecordsetPtr m_pRecordset; //结果集

_ParameterPtr spPAR1; //参数1
_ParameterPtr spPAR2 //参数2
_ParameterPtr spPAR3; //参数3
_ParameterPtr spPAR4; //参数4

m_pConnection.CreateInstance("ADODB.Connection");
m_pCommand.CreateInstance("ADODB.Command");
m_pRecordset.CreateInstance("ADODB.Recordset");

CREATEiNSTANCE(spPAR1,Parameter) ; //参数1
CREATEiNSTANCE(spPAR2,Parameter) ; //参数2
CREATEiNSTANCE(spPAR3,Parameter) ; //参数3
CREATEiNSTANCE(spPAR4,Parameter) ; //参数4

hrCon=m_pConnection->Open("","","",-1); //连接字符串偶就不写了
m_pCommand->ActiveConnection=m_pConnection;
m_pRecordset->PutRefActiveConnection(m_pConnection);

m_pCommand->CommandType=adCmdStoredProc;//说明命令类型--存储过程

spPAR1=m_pCommand->CreateParameter("存储过程参数1", adVarChar,adParamInput,8); //指定参数类型,长度
m_pCommand->Parameters->Append(spPAR1);

spPAR2=m_pCommand->CreateParameter("存储过程参数2",
adVarChar,adParamInput,8); //指定参数类型,长度
m_pCommand->Parameters->Append(spPAR2);

spPAR3=m_pCommand->CreateParameter("存储过程参数1", adVarChar,adParamInput,8); //指定参数类型,长度
db->m_pCommand->Parameters->Append(spPAR3);

spPAR4=m_pCommand->CreateParameter("存储过程参数1", adVarChar,adParamInput,8); //指定参数类型,长度
m_pCommand->Parameters->Append(spPAR4);

spPAR4=...;
spPAR4=...;
spPAR4=...;
spPAR4=...; //参数赋值

m_pCommand->Execute(NULL,NULL,0); //执行存储过程
dephi 2001-11-21
  • 打赏
  • 举报
回复
u&p
TigerHu 2001-11-21
  • 打赏
  • 举报
回复
兄弟们,今天给不了分,老是HTTP出错看来, 不知怎么回事!只好明天结帐了!
TigerHu 2001-11-21
  • 打赏
  • 举报
回复
兄弟们,怎么给不了分!
snake1122 2001-11-21
  • 打赏
  • 举报
回复
vc和vb在ADO的操作上是很接近的!
snake1122 2001-11-21
  • 打赏
  • 举报
回复
Dim cnn1 As ADODB.Connection
Dim rstEmployees As ADODB.Recordset
Dim strCnn As String
Dim strID As String
Dim strFirstName As String
Dim strLastName As String
Dim booRecordAdded As Boolean

' 打开连接。
Set cnn1 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"
cnn1.Open strCnn

' 打开雇员表。
Set rstEmployees = New ADODB.Recordset
rstEmployees.CursorType = adOpenKeyset
rstEmployees.LockType = adLockOptimistic
rstEmployees.Open "employee", cnn1, , , adCmdTable


rstEmployees.AddNew
rstEmployees!emp_id = strID
rstEmployees!fname = strFirstName
rstEmployees!lname = strLastName
rstEmployees.Update
booRecordAdded = True

另外也可以操作sql语句insert!

hncdsun 2001-11-21
  • 打赏
  • 举报
回复
_variant_t RecordsAffected;
m_pRecordset = m_pConnection->Execute("SELECT COUNT(*) FROM table where ...",&RecordsAffected,adCmdText);

_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset->GetCollect(vIndex);

if(vCount.lVal==0)
insert...
else
update...
nichang 2001-11-21
  • 打赏
  • 举报
回复
找本SQL书看看就明白了。
TigerHu 2001-11-21
  • 打赏
  • 举报
回复
有没有资料?
nichang 2001-11-21
  • 打赏
  • 举报
回复
存储过程是存储在服务器上的一个SQL语句的命名集合,它是重复执行封装语的一种有效方法,支持用户明的变量,条件执行以及一些其它的编程功能。
实际上就是将一些比较固定的SQL指令,如复杂查询,增加,修改等情况,可以减小网络流量,增加处理速度等。
DeadWolf 2001-11-21
  • 打赏
  • 举报
回复
如果用存储过程的话,那干脆由存储过程判断并决定怎样处理
在程序中就不需要判断了
用存储过程这个主意确实不错

Select 返回的记录集的记录数为0则表示没有记录 可以做插入操作 否则做更新操作




TigerHu 2001-11-21
  • 打赏
  • 举报
回复
TO nichang: 能给我介绍一下存储过程的入门知识吗? 我再加50分!!!
nichang 2001-11-21
  • 打赏
  • 举报
回复
例表名为dangan,里面有name字段。
_RecordsetPtr rst;
...
_bstr_t bsSql="select * from dangan where name='x'"
rst->Open(bsSql,...)
if(rst->ADOEOF)
{
没有该记录。
增加
}
else
{
找到该记录,修改
}
使用存储过程
AddEditDangan
@chrName char(10)若该字段为10字节,
as
if not exist(select * from dangan where name=@chrName)
不存在该记录,增加
else
存在该记录,修改。
使用_CommandPtr对象执行该存储过程,传入name 参数,就行了。
TigerHu 2001-11-21
  • 打赏
  • 举报
回复
To DeadWolf: 如果执行Select,怎样判断有没有记录返回?

To nichang: 能给我一个具体的存储过程例子吗?
nichang 2001-11-21
  • 打赏
  • 举报
回复
写一存储过程也可。
if not exist(select where)
增加
else
修改
DeadWolf 2001-11-21
  • 打赏
  • 举报
回复
用_RecordsetPtr的连接执行Select ... where ...
看有没有记录返回


我只有这个笨办法了
TigerHu 2001-11-21
  • 打赏
  • 举报
回复
TO DeadWolf:
我就是不知道怎样用_RecordsetPtr类来判断。 望狼兄指点一二!
nichang 2001-11-21
  • 打赏
  • 举报
回复
判断是否有记录,再作相应动作。
DeadWolf 2001-11-21
  • 打赏
  • 举报
回复
这个要你自己先判断
然后再决定 Update or Insert

加载更多回复(1)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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