一个窗口A ,里面有一个ListView, 启动的时候,从某数据库读出数据并显示这个时候,单击A里面的一个Button,启动另外一个窗口, 输入数据,然后将数据写入数据库,然后调用A里面的显示程序,更新ListView,但是ListView 不会马上被更新。 不知道为什么。 我用了两种方法,一种调用form A 的函数, 更新控件内容,另一种调用公共模块的函数,更新。 结果都不行。不知道是什么问题。麻烦帮我解决以下,马上给分。另外,我的程序已经打好包,如果帮我研究的话,留下email地址,我给发过去,谢谢了程序列在下面
form1 Public connectionstrings As String
Dim cn As New ADODB.ConnectionPrivate Sub Command1_Click()
Form2.Show
End SubPrivate Sub Form_Load()
ListView1.View = lvwReport
connectionstrings = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\works\datarefresh\data.mdb"
cn.ConnectionString = connectionstrings
cn.CursorLocation = adUseClient
cn.Open
loadData
End Sub
Public Sub loadData() ListView1.ListItems.Clear
Dim rs As New ADODB.Recordset
rs.Open "select * from student order by id", cn, adOpenDynamic, adLockOptimistic
Dim i As Long
Dim itmx As ListItem
i = 0
Do While Not rs.EOF
Set itmx = ListView1.ListItems.Add(, "G" & CStr(i), CStr(rs.Fields(0)))
itmx.SubItems(1) = rs.Fields(1)
i = i + 1
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End SubPrivate Sub Form_Unload(Cancel As Integer)
cn.Close
Set cn = Nothing
End Sub
//form2 Dim cn As New ADODB.ConnectionPrivate Sub Command1_Click()
Dim id As String
Dim name As String
id = Text1.Text
name = Text2.Text
cn.Execute "insert into student values('" & id & "','" & name & "')"
'call the function of form1, 更新数据
Form1.loadData
Unload Me
End SubPrivate Sub Command2_Click()
Dim id As String
Dim name As String
id = Text1.Text
name = Text2.Text
cn.Execute "insert into student values('" & id & "','" & name & "')"
'调用公共模块的函数,更新数据
Call load(Form1.ListView1)
Unload MeEnd SubPrivate Sub Form_Load()
cn.ConnectionString = Form1.connectionstrings
cn.CursorLocation = adUseClient
cn.Open
End SubPrivate Sub Form_Unload(Cancel As Integer)
cn.Close
Set cn = Nothing
End Sub//公共模块Public fMainForm As Form1Sub main()
Set fMainForm = New Form1
fMainForm.Show
End SubPublic Sub load(ListView1 As ListView)
Dim cn As New ADODB.Connection
cn.ConnectionString = Form1.connectionstrings
cn.CursorLocation = adUseClient
cn.Open
Dim rs As New ADODB.Recordset
rs.Open "select * from student order by id", cn, adOpenDynamic, adLockOptimistic
ListView1.ListItems.Clear
Dim i As Long
Dim itmx As ListItem
i = 0
Do While Not rs.EOF
Set itmx = ListView1.ListItems.Add(, "G" & CStr(i), CStr(rs.Fields(0)))
itmx.SubItems(1) = rs.Fields(1)
i = i + 1
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
form1 Public connectionstrings As String
Dim cn As New ADODB.ConnectionPrivate Sub Command1_Click()
Form2.Show
End SubPrivate Sub Form_Load()
ListView1.View = lvwReport
connectionstrings = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\works\datarefresh\data.mdb"
cn.ConnectionString = connectionstrings
cn.CursorLocation = adUseClient
cn.Open
loadData
End Sub
Public Sub loadData() ListView1.ListItems.Clear
Dim rs As New ADODB.Recordset
rs.Open "select * from student order by id", cn, adOpenDynamic, adLockOptimistic
Dim i As Long
Dim itmx As ListItem
i = 0
Do While Not rs.EOF
Set itmx = ListView1.ListItems.Add(, "G" & CStr(i), CStr(rs.Fields(0)))
itmx.SubItems(1) = rs.Fields(1)
i = i + 1
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End SubPrivate Sub Form_Unload(Cancel As Integer)
cn.Close
Set cn = Nothing
End Sub
//form2 Dim cn As New ADODB.ConnectionPrivate Sub Command1_Click()
Dim id As String
Dim name As String
id = Text1.Text
name = Text2.Text
cn.Execute "insert into student values('" & id & "','" & name & "')"
'call the function of form1, 更新数据
Form1.loadData
Unload Me
End SubPrivate Sub Command2_Click()
Dim id As String
Dim name As String
id = Text1.Text
name = Text2.Text
cn.Execute "insert into student values('" & id & "','" & name & "')"
'调用公共模块的函数,更新数据
Call load(Form1.ListView1)
Unload MeEnd SubPrivate Sub Form_Load()
cn.ConnectionString = Form1.connectionstrings
cn.CursorLocation = adUseClient
cn.Open
End SubPrivate Sub Form_Unload(Cancel As Integer)
cn.Close
Set cn = Nothing
End Sub//公共模块Public fMainForm As Form1Sub main()
Set fMainForm = New Form1
fMainForm.Show
End SubPublic Sub load(ListView1 As ListView)
Dim cn As New ADODB.Connection
cn.ConnectionString = Form1.connectionstrings
cn.CursorLocation = adUseClient
cn.Open
Dim rs As New ADODB.Recordset
rs.Open "select * from student order by id", cn, adOpenDynamic, adLockOptimistic
ListView1.ListItems.Clear
Dim i As Long
Dim itmx As ListItem
i = 0
Do While Not rs.EOF
Set itmx = ListView1.ListItems.Add(, "G" & CStr(i), CStr(rs.Fields(0)))
itmx.SubItems(1) = rs.Fields(1)
i = i + 1
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
解决方案 »
- [原创/探讨]Windows 核心编程研究系列之一(改变进程 PTE)
- matrixvb的问题!!!
- vb连接打印机的问题
- 关于ActiveX DLL 放到其他机子上出现“ActiveX 部件不能创建对象”。请问怎么回事?
- vb编程怎样暂停计时游戏或看影碟程序
- 有没有指针变量?
- 请教如何在ActiveBar 2控件中保存菜单等的自定义设置,又如何下次启动时读取和恢复回来?
- 如何用VB编写动态链接库?(请给出例子)谢!
- 急急急,如何完全删除DBF文件中的纪录,而不是对DBF文件间做上删除标志?????
- 这个如何处理!!!(来者有分)
- 如何在MFlexGrid网格中保存多行数据?
- WebBrowser与frames框架的问题,凡是有建设性回复全部加分
也就是说,公共函数load中对ListView1的操作都没有写入Form1.ListView1中。
改成如下就OK了,建议多看一下基础知识:
Form1:
Dim connectionstrings As String
Private Sub Command1_Click()
Form2.Show
End SubPrivate Sub Form_Load()
ListView1.View = lvwReport
connectionstrings = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\data.mdb"
cn.ConnectionString = connectionstrings
'cn.CursorLocation = adUseClient
cn.Open
loadData
End Sub
Public Sub loadData() ListView1.ListItems.Clear
Dim rs As New ADODB.Recordset
rs.Open "select * from student order by id", cn, adOpenDynamic, adLockOptimistic
Dim i As Long
Dim itmx As ListItem
i = 0
Do While Not rs.EOF
Set itmx = ListView1.ListItems.Add(, "G" & CStr(i), CStr(rs.Fields(0)))
itmx.SubItems(1) = rs.Fields(1)
i = i + 1
rs.MoveNext
Loop
ListView1.Refresh
rs.Close
Set rs = Nothing
End SubPrivate Sub Form_Unload(Cancel As Integer)
cn.Close
Set cn = Nothing
End SubForm2:Private Sub Command1_Click()
Dim id As String
Dim name As String
id = Text1.Text
name = Text2.Text
cn.Execute "insert into student values('" & id & "','" & name & "')"
'call the function of form1, 更新数据
Form1.loadData
Unload Me
End SubPrivate Sub Command2_Click()
Dim id As String
Dim name As String
id = Text1.Text
name = Text2.Text
cn.Execute "insert into student values('" & id & "','" & name & "')"
'调用公共模块的函数,更新数据
Call load(Form1.ListView1)
Unload MeEnd Sub'模块代码:
Public fMainForm As Form1
Public cn As New ADODB.ConnectionSub main()
Set fMainForm = New Form1
fMainForm.Show
End SubPublic Sub load(ListView1 As ListView)
Dim rs As New ADODB.Recordset
rs.Open "select * from student order by id", cn, adOpenDynamic, adLockOptimistic
ListView1.ListItems.Clear
Dim i As Long
Dim itmx As ListItem
i = 0
Do While Not rs.EOF
Set itmx = ListView1.ListItems.Add(, "G" & CStr(i), CStr(rs.Fields(0)))
itmx.SubItems(1) = rs.Fields(1)
i = i + 1
rs.MoveNext
Loop
rs.Close
Set rs = NothingEnd Sub
把连接放在公共模块内。也没必要将填充数据的函数写在公共模块内,除非你做的是通用的。但看你这样连SQL语句都是写死的,根本也就不通用了。至于其他,暂时没发现什么问题啊。你可以在加载数据的地方添加断点来调试,看看是否运行,查询出来的结果是否一致。