Me.Adodc1.Recordset.Update出现报错-----(改变在通知期间取消;没有列改变)---为被更新

yuanhaili 2000-07-17 09:25:00
关于adodc 和textbox的捆绑的小问题!
'用me.Adodc1.Recordset.Update方法时,修改某个字段时并不为空时,可以update!但为空时,则会报出以下错误:
'(改变在通知期间取消;没有列改变)---未被更新

原代码如下:

Private Sub Command1_Click()
Dim rs As New ADODB.Recordset
Dim i As Integer
Me.Adodc1.Recordset.Update '
'出现报错-----(改变在通知期间取消;没有列改变)---为被更新
Me.Adodc1.Refresh
End Sub

Private Sub Form_Load()
Dim i As Integer
For i = 0 To Me.Adodc1.Recordset.Fields.Count - 1
If i <> 0 Then
Load Me.Text1(i)
End If
Me.Text1(i).DataField = Me.Adodc1.Recordset.Fields(i).Name
Me.Text1(i).Visible = True
If i <> 0 Then
Me.Text1(i).Top = Me.Text1(i - 1).Top + 1.5 * Me.Text1(0).Height
End If
Next i
End Sub
...全文
484 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
老大,我只是一个程序员,不是总体设计人员!这是头的意思,你让我怎么办?
liyang 2000-07-17
  • 打赏
  • 举报
回复
老大,你为什么要用没有值来表示呢?可以用-1表示。因为字段没有值不好控制。如果程序好改,我觉得你还是改一下
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
我的意思是如果某个字段中用1~n和没有值来代表不同的意思!我就是要让此字段没有值,并不是为0的情况,怎么办?
liyang 2000-07-17
  • 打赏
  • 举报
回复
不能为0,可以是什么?或者:command1_click
if checkNull=0 then
...
end if
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
case adLong,adSmallInt...所有数字型
if trim(txtTemp.text)="" then
CheckNull=0 '问题就出在这里,我不能让他为0
else
checknull=trim(txtTemp.text)
endif
liyang 2000-07-17
  • 打赏
  • 举报
回复
你可以写这样一个函数:
private function CheckNull(astTemp as Adodb.recordset,fldTemp as string,txtTemp as object)
select astTemp(fldTemp).type
case adVarChar...所有字符型
if trim(txtTemp.text)="" then
CheckNull=""
else
checknull=trim(txtTemp.text)
endif
case adLong,adSmallInt...所有数字型
if trim(txtTemp.text)="" then
CheckNull=0
else
checknull=trim(txtTemp.text)
endif
case ...所有你想检查的类型
end select
end function

然后在command1_click中在做update前,写text1.text=checknull(text1.datasource.recordset,text1.datafield,text1)

yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
我知道这个可是properties中的那个呀?老大,另外字符型的字段可以,数字型的怎么办?
liyang 2000-07-17
  • 打赏
  • 举报
回复
应该可以。可以看field对象的properties集合。中间应该有这个属性。
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
那么该属性可以用ado对象来设置吗?
liyang 2000-07-17
  • 打赏
  • 举报
回复
oracle的字符字段也应该有这种属性吧?
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
我的数据库是oracle数据库,
liyang 2000-07-17
  • 打赏
  • 举报
回复
你的数据库是什么?如果是mdb,那你看看字符型字段的定义,mdb字符型字段缺省不能为empty.你把"允许空字符串"设为true,即可。
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
我钦佩你的聪慧!可这样我以后就没办法判断该字段是否为空了,还有字符型的可以勉强这样处理,可数字型的呢?,我不能让他为0吧,这样我的判断久混乱了!
liyang 2000-07-17
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim rs As New ADODB.Recordset
Dim i As Integer

if Trim(Text1.text)="" then
text1.text="" 不行的话 Text1.text=" "
end if
Me.Adodc1.Recordset.Update '
'出现报错-----(改变在通知期间取消;没有列改变)---为被更新
Me.Adodc1.Refresh
End Sub

yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
老大,你作个例子是一下好吗?
我的操作是把某个text框中的值删掉,在更新就报错了!
liyang 2000-07-17
  • 打赏
  • 举报
回复
不是。当text为空时,得到的不是NULL。你可以判断一下,如果Trim(text.text)=""
让text.text="",就可以。
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
我的问题补充:是指text1.text为空而且相应的数据库字段可以为空--而出现错误!
liyang 2000-07-17
  • 打赏
  • 举报
回复
"为空时"是什么意思?是不是text的内容为空。如果是,那要检查数据库相应字段是否可以为空字串。
yuanhaili 2000-07-17
  • 打赏
  • 举报
回复
老大,我找了老半天,可找出来的属性值没什么有用的呀?您的意思是找什么属性呀?
liyang 2000-07-17
  • 打赏
  • 举报
回复
那你还是找field的properties.这样:for i=0 to text1.datasource.recordset(text1.datafield).properties.count-1
debug.print text1.datasource.recordset(text1.datafield).properties(i).name &" " text1.datasource.recordset(text1.datafield).properties(i).value
next i
先把properties的名字和值打出来看了再找。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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