Connection.Execute("Create Table Tablename (FieldName,FieldType....)"For i = 固定行 To 总行数 Connection.Execute("Insert into Table Values(MSFlexGrid的各值)" Next i
Private Sub 保存_Click() 'On Error GoTo SaveErr Dim i As Integer For i = 1 To Grid1.Rows - 1 With Data1.Recordset .FindFirst "id =" & Grid1.TextMatrix(i, 0) If .NoMatch Then .AddNew Else .Edit End If .Fields(1) = Grid1.TextMatrix(i, 1) .Fields(2) = Grid1.TextMatrix(i, 2) .Fields(3) = Grid1.TextMatrix(i, 3) .Fields(4) = Grid1.TextMatrix(i, 4) .Fields(5) = Grid1.TextMatrix(i, 5) .Fields(6) = Grid1.TextMatrix(i, 6) '...... .Update End With Next i Exit Sub SaveErr: MsgBox Err.Description End Sub
Private Sub Command1_Click() '保存表格中的数据到数据库 With Me.MSHFlexGrid1 Dim str As String For i = 1 To .Cols - 1 If .TextMatrix(i, 1) = "" Then Exit For '以第一个字段为关健字。 cn.Execute "INSERT INTO TableName (字段1,字段2) values ('" & .TextMatrix(i, 1) & "','" & .TextMatrix(i, 2) & "' ) " Next i End With Set cn = Nothing End SubPrivate Sub Form_Load()'初始化表格 With Me.MSHFlexGrid1 .Cols = 3 .Rows = 20 .FormatString = "|字段1|字段2" .ColWidth(0) = 0 .ColWidth(1) = 2000 .ColWidth(2) = 2000
'往表格中加测试数据 For i = 1 To 2 For j = 1 To 5 .TextMatrix(j, i) = i * j '测试数据 Next j Next i
End With End Sub ------------ www.vicmiao.com 努力就有美好时光!
'定义数据集对象 Dim rs1 As New ADODB.Recordset Dim RS2 As New ADODB.Recordset Dim rs3 As New ADODB.Recordset Dim rs4 As New ADODB.Recordset Dim rs5 As New ADODB.Recordset Dim rs6 As New ADODB.Recordset Dim s, Y, i, j '定义变量 Public khbh As String Private Sub DataCombo1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then MS1.Row = 1: MS1.Col = 3 '注意行和列的号码要相同 text1.Visible = True 'text1输入框可见 text1.SetFocus 'text1获得焦点 End If If KeyCode = 37 Then txtguest.SetFocus KeyCode = 0 End If End SubPrivate Sub DataCombo2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 39 Then txtguest.SetFocus KeyCode = 0 End If End SubPrivate Sub Form_Load() Dim j rq.Value = Date MS1.Rows = 46: MS1.Cols = 13 '定义MS1表的总行数、总列数 '定义MS1表格的列宽及表头 s = Array("500", "1600", "900", "700", "900", "900", "800", "800", "800", "800", "800") Y = Array("序号", "规格", "光别", "标记", "已槽筒", "未槽筒", "库存", "入库", "发槽筒", "染坏") For i = 0 To 9 '定义表头的名称的显示 MS1.ColWidth(i) = s(i): MS1.TextMatrix(0, i) = Y(i) MS1.TextMatrix(45, i) = Y(i) Next i '定义MS1表的列序号 For i = 1 To 43 MS1.TextMatrix(i, 0) = i Next i DataCombo1.Enabled = False txtguest.Enabled = False DataCombo2.Enabled = False rq.Enabled = False End Sub Private Sub MS1_entercell() '确定text1在MS1表中的位置 Dim X As String, Y As String, p As String '显示声明一个单精度浮点型变量 If MS1.CellWidth <= 0 Or MS1.CellHeight <= 0 Then Exit Sub X = MS1.TextMatrix(MS1.FixedRows, MS1.Col) '给变量赋初值 Y = MS1.TextMatrix(MS1.Row, 0) '给变量赋初值 If Y <> "" Then If MS1.Col - MS1.LeftCol <= 3 Then MS1.LeftCol = MS1.LeftCol + 1 End If If MS1.CellWidth > 0 And MS1.CellHeight > 0 Then text1.Width = MS1.CellWidth: text1.Height = MS1.CellHeight text1.Left = MS1.CellLeft + MS1.Left: text1.Top = MS1.CellTop + MS1.Top End If X = MS1.TextMatrix(MS1.FixedRows, MS1.Col): Y = MS1.TextMatrix(MS1.Row, 0) p = MS1.TextMatrix(MS1.Row, MS1.Col) text1.Text = MS1.Text text1.SelStart = 0: text1.SelLength = Len(text1.Text) End If End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then If MS1.Col = 9 Then If MS1.Row <= 43 Then MS1.Row = MS1.Row + 1 MS1.Col = 3 '控制回车后光标的位置 Else MS1.Row = MS1.Row End If Else If MS1.Col + 1 <= MS1.Cols - 1 Then MS1.Col = MS1.Col + 1 Else If MS1.Row + 1 <= MS1.Rows - 1 Then MS1.Row = MS1.Row + 1 MS1.Col = 3 '控制回车后光标的位置 End If End If End If End If If KeyCode = vbKeyUp Then If MS1.Row > 1 Then MS1.Row = MS1.Row - 1 End If If KeyCode = vbKeyDown Then If MS1.Row < 43 Then MS1.Row = MS1.Row + 1 End If If KeyCode = vbKeyLeft Then If text1.Text <> "" Then text1.SelStart = 2 text1.SelLength = Len(text1.Text) End If If MS1.Col - 7 <= MS1.Cols + 1 Then MS1.Col = MS1.Col - 1 If MS1.Col = 2 Then MS1.Col = 3 Else If MS1.Row + 1 <= MS1.Row - 1 Then MS1.Row = MS1.Row + 1 MS1.Col = 3 End If End If End If If KeyCode = vbKeyRight Then If text1.Text <> "" Then text1.SelStart = 2 text1.SelLength = Len(text1.Text) End If If MS1.Col + 1 <= 10 Then MS1.Col = MS1.Col + 1 Else If MS1.Row + 1 <= 43 Then MS1.Row = MS1.Row + 1 MS1.Col = 3 End If End If End If End Sub
Private Sub Text1_Change() MS1.Text = text1.Text '赋值给MS1 If MS1.Col = 1 Then If text1.Text = "" Then text1.SetFocus 'text1获得焦点 End If End If End Sub Private Sub Comdj_Click() '登记 '确定文本框在MS1表格中的大小和位置 text1.Width = MS1.CellWidth: text1.Height = MS1.CellHeight text1.Left = MS1.CellLeft + MS1.Left: text1.Top = MS1.CellTop + MS1.Top MS1.Enabled = True Combc.Enabled = True Comqx.Enabled = True: Comdj.Enabled = False text1.Enabled = True DataCombo2.Enabled = True DataCombo1.Enabled = True txtguest.Enabled = True rq.Enabled = True '清空数据 For i = 1 To 44 '确定文体框的长度 For j = 3 To 9 '确定文体框的宽度 MS1.TextMatrix(i, j) = "" Next j Next i DataCombo2.SetFocus 'kh获得焦点 End Sub Private Sub Combc_Click() '保存 rs3.Open "select * from 进存信息表", Cnn, adOpenKeyset, adLockOptimistic '打开数据库 For i = 1 To 44 '在文本中的填充的长度 If (MS1.TextMatrix(i, 4) <> "" Or MS1.TextMatrix(i, 6) <> "" Or MS1.TextMatrix(i, 5) <> "" Or MS1.TextMatrix(i, 7) <> "" Or MS1.TextMatrix(i, 8) <> "" Or MS1.TextMatrix(i, 9) <> "") Then '添加新记录到"进存信息表"表中 rs3.AddNew If MS1.TextMatrix(i, 1) <> "" Then rs3.Fields("规格") = Trim(MS1.TextMatrix(i, 1)) If MS1.TextMatrix(i, 2) <> "" Then rs3.Fields("光别") = Trim(MS1.TextMatrix(i, 2)) If MS1.TextMatrix(i, 3) <> "" Then rs3.Fields("标记") = Trim(MS1.TextMatrix(i, 3)) If MS1.TextMatrix(i, 4) <> "" Then rs3.Fields("已槽筒") = Trim(MS1.TextMatrix(i, 4)) If MS1.TextMatrix(i, 5) <> "" Then rs3.Fields("未槽筒") = Trim(MS1.TextMatrix(i, 5)) If MS1.TextMatrix(i, 6) <> "" Then rs3.Fields("库存") = Trim(MS1.TextMatrix(i, 6)) If MS1.TextMatrix(i, 7) <> "" Then rs3.Fields("入库") = Trim(MS1.TextMatrix(i, 7)) If MS1.TextMatrix(i, 8) <> "" Then rs3.Fields("发槽筒") = Val(MS1.TextMatrix(i, 8)) If MS1.TextMatrix(i, 9) <> "" Then rs3.Fields("染坏") = Val(MS1.TextMatrix(i, 9)) If rq.Value <> "" Then rs3.Fields("日期") = Trim(rq.Value) If DataCombo1.Text <> "" Then rs3.Fields("操作员") = Trim(DataCombo1.Text) If DataCombo2.Text <> "" Then rs3.Fields("本厂或客户") = Trim(DataCombo2.Text) If txtguest.Text <> "" Then rs3.Fields("客户") = Trim(txtguest.Text) rs3.Update End If Next i '设置控件有效或无效 Combc.Enabled = False: Comdj.Enabled = True '添加时对各按扭的控制 Comqx.Enabled = False: MS1.Enabled = False text1.Visible = False 'Else ' MsgBox ("填写数据不完整,请核对,再保存!") ' MS1.Col = 1: MS1.Row = 2 '到第1行、到第1列 'End If rs3.Close End Sub Private Sub Comqx_Click() '取消操作 For i = 1 To 44 For j = 3 To 9 '取消后清空 MS1.TextMatrix(i, j) = "" Next j Next i MS1.Enabled = False: Comdj.Enabled = True text1.Visible = False Comdj.SetFocus End Sub Private Sub Comend_Click() Unload Me End Sub
用ADO吧!只把修改了的值保存起来
Connection.Execute("Insert into Table Values(MSFlexGrid的各值)"
Next i
'On Error GoTo SaveErr
Dim i As Integer
For i = 1 To Grid1.Rows - 1
With Data1.Recordset
.FindFirst "id =" & Grid1.TextMatrix(i, 0)
If .NoMatch Then
.AddNew
Else
.Edit
End If
.Fields(1) = Grid1.TextMatrix(i, 1)
.Fields(2) = Grid1.TextMatrix(i, 2)
.Fields(3) = Grid1.TextMatrix(i, 3)
.Fields(4) = Grid1.TextMatrix(i, 4)
.Fields(5) = Grid1.TextMatrix(i, 5)
.Fields(6) = Grid1.TextMatrix(i, 6)
'......
.Update
End With
Next i
Exit Sub
SaveErr:
MsgBox Err.Description
End Sub
给定一个“保存”按钮,调用一个保存的函数。
保存的函数应该是遍历所有mshflexgrid的数据,然后保存。
检查库里是否有flesgrid 的数据,没有就添加不就可以了
想实时添加就 整个timer控件上去
'保存表格中的数据到数据库
With Me.MSHFlexGrid1
Dim str As String
For i = 1 To .Cols - 1
If .TextMatrix(i, 1) = "" Then Exit For '以第一个字段为关健字。
cn.Execute "INSERT INTO TableName (字段1,字段2) values ('" & .TextMatrix(i, 1) & "','" & .TextMatrix(i, 2) & "' ) "
Next i
End With
Set cn = Nothing
End SubPrivate Sub Form_Load()'初始化表格
With Me.MSHFlexGrid1
.Cols = 3
.Rows = 20
.FormatString = "|字段1|字段2"
.ColWidth(0) = 0
.ColWidth(1) = 2000
.ColWidth(2) = 2000
'往表格中加测试数据
For i = 1 To 2
For j = 1 To 5
.TextMatrix(j, i) = i * j '测试数据
Next j
Next i
End With
End Sub
------------
www.vicmiao.com
努力就有美好时光!
Dim rs1 As New ADODB.Recordset
Dim RS2 As New ADODB.Recordset
Dim rs3 As New ADODB.Recordset
Dim rs4 As New ADODB.Recordset
Dim rs5 As New ADODB.Recordset
Dim rs6 As New ADODB.Recordset
Dim s, Y, i, j '定义变量
Public khbh As String
Private Sub DataCombo1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
MS1.Row = 1: MS1.Col = 3 '注意行和列的号码要相同
text1.Visible = True 'text1输入框可见
text1.SetFocus 'text1获得焦点
End If
If KeyCode = 37 Then
txtguest.SetFocus
KeyCode = 0
End If
End SubPrivate Sub DataCombo2_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 39 Then
txtguest.SetFocus
KeyCode = 0
End If
End SubPrivate Sub Form_Load()
Dim j
rq.Value = Date
MS1.Rows = 46: MS1.Cols = 13 '定义MS1表的总行数、总列数
'定义MS1表格的列宽及表头
s = Array("500", "1600", "900", "700", "900", "900", "800", "800", "800", "800", "800")
Y = Array("序号", "规格", "光别", "标记", "已槽筒", "未槽筒", "库存", "入库", "发槽筒", "染坏")
For i = 0 To 9 '定义表头的名称的显示
MS1.ColWidth(i) = s(i): MS1.TextMatrix(0, i) = Y(i)
MS1.TextMatrix(45, i) = Y(i)
Next i
'定义MS1表的列序号
For i = 1 To 43
MS1.TextMatrix(i, 0) = i
Next i
DataCombo1.Enabled = False
txtguest.Enabled = False
DataCombo2.Enabled = False
rq.Enabled = False
End Sub
Private Sub MS1_entercell() '确定text1在MS1表中的位置
Dim X As String, Y As String, p As String '显示声明一个单精度浮点型变量
If MS1.CellWidth <= 0 Or MS1.CellHeight <= 0 Then Exit Sub
X = MS1.TextMatrix(MS1.FixedRows, MS1.Col) '给变量赋初值
Y = MS1.TextMatrix(MS1.Row, 0) '给变量赋初值
If Y <> "" Then
If MS1.Col - MS1.LeftCol <= 3 Then
MS1.LeftCol = MS1.LeftCol + 1
End If
If MS1.CellWidth > 0 And MS1.CellHeight > 0 Then
text1.Width = MS1.CellWidth: text1.Height = MS1.CellHeight
text1.Left = MS1.CellLeft + MS1.Left: text1.Top = MS1.CellTop + MS1.Top
End If
X = MS1.TextMatrix(MS1.FixedRows, MS1.Col): Y = MS1.TextMatrix(MS1.Row, 0)
p = MS1.TextMatrix(MS1.Row, MS1.Col)
text1.Text = MS1.Text
text1.SelStart = 0: text1.SelLength = Len(text1.Text)
End If
End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
If MS1.Col = 9 Then
If MS1.Row <= 43 Then
MS1.Row = MS1.Row + 1
MS1.Col = 3 '控制回车后光标的位置
Else
MS1.Row = MS1.Row
End If
Else
If MS1.Col + 1 <= MS1.Cols - 1 Then
MS1.Col = MS1.Col + 1
Else
If MS1.Row + 1 <= MS1.Rows - 1 Then
MS1.Row = MS1.Row + 1
MS1.Col = 3 '控制回车后光标的位置
End If
End If
End If
End If
If KeyCode = vbKeyUp Then
If MS1.Row > 1 Then MS1.Row = MS1.Row - 1
End If
If KeyCode = vbKeyDown Then
If MS1.Row < 43 Then MS1.Row = MS1.Row + 1
End If
If KeyCode = vbKeyLeft Then
If text1.Text <> "" Then
text1.SelStart = 2
text1.SelLength = Len(text1.Text)
End If
If MS1.Col - 7 <= MS1.Cols + 1 Then
MS1.Col = MS1.Col - 1
If MS1.Col = 2 Then MS1.Col = 3
Else
If MS1.Row + 1 <= MS1.Row - 1 Then
MS1.Row = MS1.Row + 1
MS1.Col = 3
End If
End If
End If
If KeyCode = vbKeyRight Then
If text1.Text <> "" Then
text1.SelStart = 2
text1.SelLength = Len(text1.Text)
End If
If MS1.Col + 1 <= 10 Then
MS1.Col = MS1.Col + 1
Else
If MS1.Row + 1 <= 43 Then
MS1.Row = MS1.Row + 1
MS1.Col = 3
End If
End If
End If
End Sub
MS1.Text = text1.Text '赋值给MS1
If MS1.Col = 1 Then
If text1.Text = "" Then
text1.SetFocus 'text1获得焦点
End If
End If
End Sub
Private Sub Comdj_Click() '登记
'确定文本框在MS1表格中的大小和位置
text1.Width = MS1.CellWidth: text1.Height = MS1.CellHeight
text1.Left = MS1.CellLeft + MS1.Left: text1.Top = MS1.CellTop + MS1.Top
MS1.Enabled = True
Combc.Enabled = True
Comqx.Enabled = True: Comdj.Enabled = False
text1.Enabled = True
DataCombo2.Enabled = True
DataCombo1.Enabled = True
txtguest.Enabled = True
rq.Enabled = True
'清空数据
For i = 1 To 44 '确定文体框的长度
For j = 3 To 9 '确定文体框的宽度
MS1.TextMatrix(i, j) = ""
Next j
Next i
DataCombo2.SetFocus 'kh获得焦点
End Sub
Private Sub Combc_Click() '保存
rs3.Open "select * from 进存信息表", Cnn, adOpenKeyset, adLockOptimistic '打开数据库
For i = 1 To 44 '在文本中的填充的长度
If (MS1.TextMatrix(i, 4) <> "" Or MS1.TextMatrix(i, 6) <> "" Or MS1.TextMatrix(i, 5) <> "" Or MS1.TextMatrix(i, 7) <> "" Or MS1.TextMatrix(i, 8) <> "" Or MS1.TextMatrix(i, 9) <> "") Then
'添加新记录到"进存信息表"表中
rs3.AddNew
If MS1.TextMatrix(i, 1) <> "" Then rs3.Fields("规格") = Trim(MS1.TextMatrix(i, 1))
If MS1.TextMatrix(i, 2) <> "" Then rs3.Fields("光别") = Trim(MS1.TextMatrix(i, 2))
If MS1.TextMatrix(i, 3) <> "" Then rs3.Fields("标记") = Trim(MS1.TextMatrix(i, 3))
If MS1.TextMatrix(i, 4) <> "" Then rs3.Fields("已槽筒") = Trim(MS1.TextMatrix(i, 4))
If MS1.TextMatrix(i, 5) <> "" Then rs3.Fields("未槽筒") = Trim(MS1.TextMatrix(i, 5))
If MS1.TextMatrix(i, 6) <> "" Then rs3.Fields("库存") = Trim(MS1.TextMatrix(i, 6))
If MS1.TextMatrix(i, 7) <> "" Then rs3.Fields("入库") = Trim(MS1.TextMatrix(i, 7))
If MS1.TextMatrix(i, 8) <> "" Then rs3.Fields("发槽筒") = Val(MS1.TextMatrix(i, 8))
If MS1.TextMatrix(i, 9) <> "" Then rs3.Fields("染坏") = Val(MS1.TextMatrix(i, 9))
If rq.Value <> "" Then rs3.Fields("日期") = Trim(rq.Value)
If DataCombo1.Text <> "" Then rs3.Fields("操作员") = Trim(DataCombo1.Text)
If DataCombo2.Text <> "" Then rs3.Fields("本厂或客户") = Trim(DataCombo2.Text)
If txtguest.Text <> "" Then rs3.Fields("客户") = Trim(txtguest.Text)
rs3.Update
End If
Next i
'设置控件有效或无效
Combc.Enabled = False: Comdj.Enabled = True '添加时对各按扭的控制
Comqx.Enabled = False: MS1.Enabled = False
text1.Visible = False
'Else
' MsgBox ("填写数据不完整,请核对,再保存!")
' MS1.Col = 1: MS1.Row = 2 '到第1行、到第1列
'End If
rs3.Close
End Sub
Private Sub Comqx_Click() '取消操作
For i = 1 To 44
For j = 3 To 9 '取消后清空
MS1.TextMatrix(i, j) = ""
Next j
Next i
MS1.Enabled = False: Comdj.Enabled = True
text1.Visible = False
Comdj.SetFocus
End Sub
Private Sub Comend_Click()
Unload Me
End Sub
高手帮忙去看下,楼上各位谢谢捧场,等今天或者明天整理好了,另开帖加分