我想在dagagrid中直接输入(或修改)数据以求快捷,但比如在第6行输入(或修改)某一个或几个字段的数据时,鼠标先指定这个字段,输入数据后要立即保存这第6行的数据就必须将鼠标指定到dagagrid中的其它任意行,而不能是第6行,缺了这一步数据就不能保存了!我想在一个“命令按钮”编写代码来实现保存数据的功能,那如何获取此第6行字段的行和列号,保存数据的方法我偿试了好久未能成功,请各位楼主有空帮我想想吧,麻烦你们了。最好能粘上详细的代码,因为我是菜鸟。谢谢了!
调试欢乐多
Private Sub dagd1_LostFocus()
Dim mrc As New ADODB.Recordset
txtsql = "select * from zb1 order by 日期时间 desc"
Set mrc = exesql(txtsql)‘取得记录集
mrc.Update
Set mrc = Nothing
End Sub
没有出错,就是数据未能更新,当我用鼠标点窗口中的其它功能按钮时,datagrid中原来的旧的数据又代替了新数据!
Dim mrc As New ADODB.Recordset
txtsql = "select * from zb1 order by 日期时间 desc"
Set mrc = exesql(txtsql)‘取得记录集
mrc.Update
Set mrc = Nothing
End Sub
我发现上面的代码并没有把新数据更新到数据库中,如何写这段更新代码呢?
=========================
这是我见到的指责datagrid的理由中最好笑的一个。。
Dim mrc As New ADODB.Recordset
Dim i As Integer
txtsql = "select * from zb1 order by 日期时间 desc"
Set mrc = exesql(txtsql)'获取记录集
If mrc.RecordCount > 0 Then
mrc.MoveFirst
Do While Not mrc.EOF()
If dagd1.Columns(0).Value = mrc.Fields("日期时间") And dagd1.Columns(1).Value = mrc.Fields("值别") Then
For i = 2 To 8
mrc.Fields(i) = dagd1.Columns(i).Value
Next i
Else
'Print dagd1.Columns(0).Value, dagd1.Columns(1).Value, mrc.Fields(0), mrc.Fields(1)
“上面的打印语句显示dagd1.Columns(0).Value和mrc.Fields(0)、dagd1.Columns(1).Value和mrc.Fields(1)有相同值,即表中有这条记录。”
mrc.MoveNext
End If
Loop
Else
MsgBox "表中无历史记录!你可以设置条件后、添加记录。"
End If
mrc.MovePrevious
mrc.Update
Set mrc = Nothing
End Sub
上面就是我的程序,执行时没有语法错误,但就是不能找到对应的记录,不知为何! mrc.Fields("日期时间")字段为日期型;
mrc.Fields("值别")字段为字符型。
如果我把if语句改为:If str$(dagd1.Columns(0).Value) = str$(mrc.Fields("日期时间")) And str$(dagd1.Columns(1).Value) = str$(mrc.Fields("值别")) Then
或者
If dagd1.Columns(0).Value = str$(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
或者
If cdate(dagd1.Columns(0).Value) = cdate(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
就会显示类型不匹配,估计问题出在日期时间比较上面,你们帮我看看吧!谢谢!
本人发表一下自己的看法,仅是自己通常这样做,不代表权威.
一般在表格中的使用程序,要看表格中的数据量的多少来定,
如果你的表格中数据量很大,就不要在表格中直接修改保存,你可以单做一个显示某条记录明细的窗体或者放在一个frame或者picture里,每个textbox对应一个单元格,这样改完之后,点个按钮让这些textbox里的数据update,然后让textbox消失掉就行了呗
如果数据量不是很大的话,你直接在grid里修改,然后在grid失去焦点的时候,或者你单做个按钮,
将原来的记录在数据库里全删掉,然后再全加上.:)很方便 速度也不会很慢,因为其实存一条和存十条是差不多的时间的.以上是我软件设计中的经验,望对你有用处,并且希望高手指点我的不是!
Private Sub dagd1_LostFocus()
Dim mrc As New ADODB.Recordset
Dim i As Integer
txtsql = "select * from zb1 order by 日期时间 desc"
Set mrc = exesql(txtsql)'获取记录集
If mrc.RecordCount > 0 Then
mrc.MoveFirst
Do While Not mrc.EOF()
If dagd1.Columns(0).Value = mrc.Fields("日期时间") And dagd1.Columns(1).Value = mrc.Fields("值别") Then
For i = 2 To 8
mrc.Fields(i) = dagd1.Columns(i).Value
Next i
Else
'Print dagd1.Columns(0).Value, dagd1.Columns(1).Value, mrc.Fields(0), mrc.Fields(1)
“上面的打印语句显示dagd1.Columns(0).Value和mrc.Fields(0)、dagd1.Columns(1).Value和mrc.Fields(1)有相同值,即表中有这条记录。”
mrc.MoveNext
End If
Loop
Else
MsgBox "表中无历史记录!你可以设置条件后、添加记录。"
End If
mrc.MovePrevious
mrc.Update
Set mrc = Nothing
End Sub
上面就是我的程序,执行时没有语法错误,但就是不能找到对应的记录,不知为何! mrc.Fields("日期时间")字段为日期型;
mrc.Fields("值别")字段为字符型。
如果我把if语句改为:If str$(dagd1.Columns(0).Value) = str$(mrc.Fields("日期时间")) And str$(dagd1.Columns(1).Value) = str$(mrc.Fields("值别")) Then
或者
If str$(dagd1.Columns(0).Value) = str$(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
或者
If cdate(dagd1.Columns(0).Value) = cdate(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
就会显示类型不匹配,估计问题出在日期时间比较上面,你们帮我看看吧!谢谢!