我想实现这样一种功能:
将数据库中符合查询条件的所有记录显示在MSFlexGrid空间中(MSFlexGrid每行对应数据库中的一条记录),然后选择其中任意一条,点击窗口中的修改按钮,这时弹出一个新窗口,被选中那条记录的所有字段值都显示在这个窗口中,这时能够对其进行修改,修改完成后点击保存按钮,这时将刚才输入的数据替换之前保存在数据库中的那条记录。本人是初学者,还请各位慷慨作答。
将数据库中符合查询条件的所有记录显示在MSFlexGrid空间中(MSFlexGrid每行对应数据库中的一条记录),然后选择其中任意一条,点击窗口中的修改按钮,这时弹出一个新窗口,被选中那条记录的所有字段值都显示在这个窗口中,这时能够对其进行修改,修改完成后点击保存按钮,这时将刚才输入的数据替换之前保存在数据库中的那条记录。本人是初学者,还请各位慷慨作答。
Private Sub cmdModify_Click()
'取得选中的哪行的Id
If myFlexGrid.RowSel = 1 Then
MsgBox "请选中要修改的行", vbOKOnly + vbInformation, "提示"
Else
txtStuSQL = "select * from student_Info where student_ID='" & myFlexGrid.TextMatrix(myFlexGrid.RowSel, 0) & "'"
frmModifyStudentInfo.Show
End If
'conn.Execute " delete from tablename where 编号= ' " & flexgrid.TextMatrix(flexgrid.RowSel, 0) & " ' "
' If myFlexGrid.RowSel = 1 Then
' MsgBox "请选择要修改的数据", vbOKOnly + vbExclamation, "警告"
' Exit Sub
' Else
' End If
End Sub那个RowSel表示你的选择行
修改时弹出另一个窗体 ,你只要记录查询的语句就好了,传给另一个窗体
Option ExplicitPublic LoadSql As String
Public ConnSql As String
Public LoadRs As New ADODB.Recordset
Public SqlConn As New ADODB.Connection2、主窗体:
Option Explicit
'Dim LoadSql As String
'Dim ConnSql As String
'Dim LoadRs As New ADODB.Recordset
'Dim SqlConn As New ADODB.ConnectionPrivate Sub cmdLoadData_Click()
On Error GoTo eNext:
If SqlConn.State = 1 Then SqlConn.Close
ConnSql = "Provider=sqloledb;Data Source=IQMS-PETERPAN;Initial Catalog=AideSolar_BarCodeMIS;User Id=SA;Password=lovelyh;"
SqlConn.ConnectionString = ConnSql
SqlConn.Open
LoadSql = "SELECT * FROM [AideSolar_BarCodeMIS].[dbo].[tabPowerRange]"
If LoadRs.State = 1 Then LoadRs.Close
LoadRs.Open LoadSql, SqlConn, adOpenKeyset, adLockOptimistic
If Not LoadRs.EOF Then
Set MSHFlexGrid1.DataSource = LoadRs
Else
'Your function code
End If
Exit Sub
eNext:
MsgBox Err.Description, vbCritical, Err.Number
End SubPrivate Sub MSHFlexGrid1_Click()
Call LoadData(MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1))
End SubPublic Function LoadData(ByVal strID As String)
Dim LoadSql As String
Dim LoadRs As New ADODB.Recordset
If LoadRs.State = 1 Then LoadRs.Close
LoadSql = "SELECT * FROM tabPowerRange where id=" & Trim(strID)
LoadRs.Open LoadSql, SqlConn, adOpenKeyset, adLockOptimistic
If Not LoadRs.EOF Then
LoadRs.MoveFirst
With frmEditData
.txtID.Text = LoadRs!id
.txtRatedPower.Text = LoadRs!ratedpower
.txtRatedV.Text = LoadRs!ratedv
.Show 1
End With
End If
End FunctionPublic Function ReLoadData()
Call cmdLoadData_Click
End Function3、编辑窗体
Option ExplicitPrivate Sub cmdCancel_Click()
Unload Me
End SubPrivate Sub cmdSave_Click()
Dim UpdateSql As String
Dim UpdateCommand As New ADODB.Command
On Error GoTo eNext:
UpdateSql = "update tabPowerRange set " + _
"RatedPower=" + Trim(txtRatedPower.Text) + "," + _
"Ratedv=" + Trim(txtRatedV.Text) + " where id=" & Trim(txtID.Text)
UpdateCommand.ActiveConnection = SqlConn
UpdateCommand.CommandType = adCmdText
UpdateCommand.CommandText = UpdateSql
UpdateCommand.Execute
Call frmMain.ReLoadData
MsgBox "Update Success...", vbInformation, App.Title
Unload Me
eNext:
MsgBox Err.Description, vbCritical, Err.Number
End Sub
http://hi.erp100.com/data/attachment/album/201008/24/2114239cla91k1qqlzvccc.jpg
判定 LoadRs 是否已经打开,若已经打开,您再次打开,就会出错,若打开,先关闭,然后再重新打开。