MSHFlexGrid更新问题

oyjliang 2005-09-19 08:01:41
不知道是不是一个bug

我的MSHFlexGrid没有绑定数据,是自己从数据库里面读出来写进去的。

现在出现下面的情况:
我要往MSHFlexGrid里面添加一条数据,MSHFlexGrid 放在form A里面,在form A里面同时有数据输入框框,有按钮Button, 单击Button后,会执行下面的操作:
1. 读取输入的数据
2. 将数据写入数据库
3. 重新读出数据
4. 将数据写入MSHFlexGrid中
当MSHFlexGrid和这些程序写在同一个form里面的时候,MSHFlexGrid更新没有问题。

但是如果这样做
1. 单击button
2. 显示Form B, 在Form B中输入数据,然后单击 Form B里面的添加Button
3. 读数据,并写入数据库
4. 调用form A里面的MSHFlexGrid的更新函数
5. 关掉Form B
这个时候, Form A 里面的MSHFlexGrid 没有更新

第二种情况下,单步调试执行的时候,可以看到MSHFlexGrid的内容被更新了,但是程序直接运行的时候,MSHFlexGrid的内容没有被更新。

不知道说明白了没有,问题就是,想在另外一个form B里面运行代码,更改Form A里面的MSHFlexGrid的内容,结果失败。

请问如何解决这个方法,谢谢了
...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
daisy8675 2005-09-20
  • 打赏
  • 举报
回复
看不明白你说的,觉得太混乱

简单点,把这个函数写成public,然后放在bas中间,而不是放在frmA中间
=================================================================

你在调用frmA的时候首先要确认frmA是否已经被load

mshflexgrid在单步调式很多地方会被阻止的,特麻烦,8过你说的是简单问题,应该不会产生影响
northwolves 2005-09-20
  • 打赏
  • 举报
回复
MSHFlexGrid.row=MSHFlexGrid.row-1
oyjliang 2005-09-20
  • 打赏
  • 举报
回复
to all

确实比较混乱,我自己也没怎么看清楚,抱歉。

调用的时候,frmA确实已经启动了

把代码贴出来看看吧

// frm A - goods
//这是启动frm B addGoodsData的函数
Private Sub goods_add_Click()
'addGoodsData.Show vbModal
addGoodsData.Show
' Loadcontrol (currentpage)
End Sub

//这里form A的 load 函数,从数据库里面读数据,显示

Public Sub Loadcontrol(lPage As Long)
Dim adoPrimaryRS As ADODB.Recordset
Dim lPageCount As Long
Dim nPageSize As Integer
Dim lCount As Long

currentpage = lPage
nPageSize = 15
Set adoPrimaryRS = New ADODB.Recordset
adoPrimaryRS.Open "select * from goods order by goods_code", cn, adOpenStatic, adLockOptimistic

totalPage = Int(adoPrimaryRS.RecordCount / nPageSize + 1)

adoPrimaryRS.pagesize = nPageSize

lPageCount = adoPrimaryRS.PageCount
If currentpage > lPageCount Then
currentpage = lPageCount
End If

adoPrimaryRS.AbsolutePage = currentpage
startIndex = nPageSize * (currentpage - 1) + 1
MSHFlexGrid1.Rows = 2
MSHFlexGrid1.FixedRows = 1
MSHFlexGrid1.Cols = 6

MSHFlexGrid1.TextMatrix(0, 1) = "商品編号"
MSHFlexGrid1.TextMatrix(0, 2) = "商品名"
MSHFlexGrid1.TextMatrix(0, 3) = "値段"
MSHFlexGrid1.TextMatrix(0, 4) = "タイプ"
MSHFlexGrid1.TextMatrix(0, 5) = "説明"

For lCount = 1 To nPageSize
If Not adoPrimaryRS.EOF Then
If lCount > 1 Then
MSHFlexGrid1.Rows = MSHFlexGrid1.Rows + 1
End If
MSHFlexGrid1.TextMatrix(lCount, 0) = startIndex
Dim i As Integer
For i = 0 To 4
If IsNull(adoPrimaryRS.Fields(i)) Then
MSHFlexGrid1.TextMatrix(lCount, i + 1) = " "
Else
MSHFlexGrid1.TextMatrix(lCount, i + 1) = adoPrimaryRS.Fields(i)
End If

Next
adoPrimaryRS.MoveNext
Else
Exit For
End If
startIndex = startIndex + 1
Next

adoPrimaryRS.Close
Set adoPrimaryRS = Nothing
End Sub

// form B
// 这里是form B的添加数据到数据库里面的函数

Private Sub Command1_Click()
Dim code As String
Dim name As String
Dim price As Long
Dim good_type As String
Dim memo As String

Dim flag
flag = 1
code = Text1.Text
name = Text2.Text

If Len(code) = 0 Then
flag = 0
MsgBox "コードは入力してない!"
Text1.SetFocus
Exit Sub
End If

If Len(name) = 0 Then
flag = 0
MsgBox "商品名は入力してない!"
Text2.SetFocus
Exit Sub
End If


If IsNumeric(Text3.Text) Then
price = CLng(Text3.Text)
Else
flag = 0
MsgBox "値段は入力してない!またはフォーマット間違い!"
Text3.SetFocus
Exit Sub
End If
good_type = Text4.Text
memo = Text5.Text



' 写入数据
If flag = 1 Then

Dim conn As New ADODB.Connection

conn.ConnectionString = frmMain.connectionstrings
conn.CursorLocation = adUseClient
conn.Open
Dim sqlstr As String

sqlstr = "insert into goods values('" & code & "','" & name & "'," & price & ",'" & good_type & "','" & memo & "')"

conn.Execute sqlstr
conn.Close
Set conn = Nothing
Goods.Loadcontrol (1) ' 调用Goods的显示数据的函数
Goods.MSHFlexGrid1.Refresh
Unload Me
End If

End Sub


上面的运行过程是这样的,首先,单击frm A里面的按钮,启动frm B,然后在frm B里面输入数据,并添加数据,添加完后,调用goods.loadControl(1)来更新数据(这里的1是一个测试数据,实际运行的时候会将当前页传入)。

帮我看看有什么问题,谢谢了。 给日本人写的程序,不要有民族情绪哟:)
射天狼 2005-09-20
  • 打赏
  • 举报
回复
Option Explicit

'工程->引用->Microsoft ActiveX Data Objects 2.0 Library (后面为版本号)
Dim rs As New ADODB.Recordset, cn As New ADODB.Connection

'在MSHFLEXGRID表格控件中显示查询到的内容
Private Sub Command1_Click()
If rs.State = adStateOpen Then rs.Close
rs.Open "SELECT * FROM USERPASSWORD", cn, adOpenDynamic, adLockOptimistic
Set MSHFlexGrid1.DataSource = rs
End Sub

'向数据库中添加数据
Private Sub Command2_Click()
If rs.State = adStateOpen Then rs.Close
rs.Open "SELECT * FROM USERPASSWORD", cn, adOpenDynamic, adLockOptimistic
rs.AddNew
rs!UID = txtUid.Text
rs!PWD = txtPwd.Text
rs!TRUENAME = txtName.Text
rs!CREATEDATE = Format(Now, "YYYY/MM/DD")
rs.Update

Command1.Value = True
End Sub

'从数据库中删除数据
Private Sub Command3_Click()
cn.Execute "DELETE FROM USERPASSWORD WHERE UID = '" & txtUid.Text & "'"
Command1.Value = True
End Sub

Private Sub Command4_Click()
With MSHFlexGrid1
Clipboard.SetText .Text
End With
End Sub

Private Sub Command5_Click()
With MSHFlexGrid1
.Text = Clipboard.GetText
End With
End Sub

Private Sub Form_Load()
cn.ConnectionString = "Driver={SQL Server};SERVER=DataServer;DATABASE=zxzx;UID=information;PWD=information*&#"

'cn.ConnectionString = "DBQ=" & App.Path & "\TelePhone.mdb;DefaultDir=" & _
App.Path & ";Driver={Microsoft Access Driver (*.mdb)};" & _
"DriverId=25;FIL=MS Access;ImplicitCommitSync=Yes;" & _
"MaxBufferSize=512;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;" & _
"Threads=3;UID=ADMIN;UserCommitSync=Yes;PWD=admind1234;"
cn.Open
'更多的查询字符串可以上这里查
'http://www.connectionstrings.com/
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

谁说没有绑定的!?
zlt982001 2005-09-19
  • 打赏
  • 举报
回复
看不大明白
1。FormB 是输入窗口,在这里完成输入,并更新数据库的操作吗?
2。. 调用form A里面的MSHFlexGrid的更新函数,<--这个是什么?
最好把你出毛病的代码段单独做个简单的示例,帖出来,大家才可以帮你

1,451

社区成员

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

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