有这样一个需求。
要求有一个表格。其中行肯定是可变的了。然后是列。列也要求用户可以定制(添加、删除、修改)。
用户可以对表格中的任意单元格的内容进行修改。
然后入库。可查询。
请问用什么方式比较好呢?
1、用一个表存储。动态添加列。(性能会不会下降?会不会稳定)
2、用两个表存储(一个存行,一个存列)(Sql语句是不是很麻烦。)
3、其他
要求有一个表格。其中行肯定是可变的了。然后是列。列也要求用户可以定制(添加、删除、修改)。
用户可以对表格中的任意单元格的内容进行修改。
然后入库。可查询。
请问用什么方式比较好呢?
1、用一个表存储。动态添加列。(性能会不会下降?会不会稳定)
2、用两个表存储(一个存行,一个存列)(Sql语句是不是很麻烦。)
3、其他
不知道有没有什么简单的方法。
我现在倾向于一个表的方式。
毕竟理解和维护起来方便。写sql几乎一行就都可以搞定。
两个表看似正规。但是存储操作太麻烦。
矛盾呀。
Private Sub GridShow() '表格显示
'On Error GoTo ErrHend
'***********************************表头************
MSFlexGrid1.Clear '清空表格内容
Dim M As Integer
M = 2
SumMoney = 0
MSFlexGrid1.Rows = 2
If BaseDataType = "A" Then 'Access2000/2003
Rs.Open "select * From T_Dish Where Dish_State='1'", DataConn, 3, 2
Else 'SqlServer2000/2005
Rs.Open "select * From T_Dish Where Dish_State='1'", Conn, 3, 2
End If
If Rs.EOF <> True Then
MSFlexGrid1.Cols = 3 + Rs.RecordCount
MSFlexGrid1.TextMatrix(0, 0) = "序号"
MSFlexGrid1.TextMatrix(0, 1) = "读者证号"
MSFlexGrid1.ColWidth(0) = 800
MSFlexGrid1.ColWidth(1) = 1000
Do While Rs.EOF <> True
MSFlexGrid1.TextMatrix(0, M) = Rs.Fields(2)
MSFlexGrid1.ColWidth(M) = 1000
Rs.MoveNext
M = M + 1
Loop
MSFlexGrid1.TextMatrix(0, M) = "收款员"
MSFlexGrid1.ColWidth(M) = 2000
End If
Rs.Close
'***************************表头结束****************
'***************************表体内容****************
Dim X As Integer, Y As Integer
X = 1
If BaseDataType = "A" Then 'Access2000/2003
Rs.Open Sql, DataConn, adOpenKeyset, adLockOptimistic
Ds.Open SQL1, DataConn, 1, 3
Else 'SqlServer2000/2005/其它
Rs.Open SqlServer, Conn, adOpenKeyset, adLockOptimistic
Ds.Open SqlServer1, Conn, 1, 3
End If
If Ds.EOF <> True Then
MSFlexGrid1.Rows = Ds.RecordCount + 3
Else
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 0) = "合计:"
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 1) = Format(SumMoney, "0.00")
End If
If Rs.EOF <> True Then
Do While Ds.EOF <> True
With MSFlexGrid1
.TextMatrix(X, 0) = X
.TextMatrix(X, 1) = Trim(Ds.Fields(0))
X = X + 1
End With
Ds.MoveNext
Loop
Else
MSFlexGrid1.Rows = 3
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 0) = "合计:"
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 4) = Format(SumMoney, "0.00")
End If
Do While Rs.EOF <> True
For Y = 1 To Ds.RecordCount
With MSFlexGrid1
For M = 2 To .Cols - 1
If Trim(Rs.Fields(5)) = .TextMatrix(Y, 1) Then
If .TextMatrix(Y, M) <> "" Then
If Rs.Fields(2) = .TextMatrix(0, M) Then
If CDbl(Rs.Fields("Quantity")) < 0 Then
.TextMatrix(Y, M) = Format(CDbl(Rs.Fields(0) * -1) + CDbl(.TextMatrix(Y, M)), "0.00")
Else
.TextMatrix(Y, M) = Format(CDbl(Rs.Fields(0) * 1) + CDbl(.TextMatrix(Y, M)), "0.00")
End If
'.TextMatrix(Y, M) = Format(CDbl(Rs.Fields(0)) + CDbl(.TextMatrix(Y, M)), "0.00")
End If
Else
If Rs.Fields(2) = .TextMatrix(0, M) Then
If CDbl(Rs.Fields("Quantity")) < 0 Then
.TextMatrix(Y, M) = Format(CDbl(Rs.Fields(0) * -1), "0.00")
Else
.TextMatrix(Y, M) = Format(CDbl(Rs.Fields(0) * 1), "0.00")
End If
'.TextMatrix(Y, M) = Format(CDbl(Rs.Fields(0)), "0.00")
End If
End If
.TextMatrix(Y, .Cols - 1) = "(" & Trim(Rs.Fields(1)) & ")" & Trim(Rs.Fields(7))
End If
Next M
End With
Next Y
Rs.MoveNext
Loop
'处理各项合计
Dim SumMoney1(32767) As Double, SumMoney2 As Double
For j = 2 To MSFlexGrid1.Cols - 2
For Y = 1 To Ds.RecordCount
If MSFlexGrid1.TextMatrix(Y, j) <> "" Then
SumMoney1(j) = SumMoney1(j) + CDbl(MSFlexGrid1.TextMatrix(Y, j))
Else
SumMoney1(j) = SumMoney1(j) + 0
End If
Next Y
Next j
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 2, 0) = "合计:"
For j = 2 To MSFlexGrid1.Cols - 2
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 2, j) = Format(SumMoney1(j), "0.00")
Next j
For j = 2 To MSFlexGrid1.Cols - 2
SumMoney2 = SumMoney1(j) + SumMoney2
Next j
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 0) = "总合计:"
MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, 4) = Format(SumMoney2, "0.00")
'***************************表体内容结束************
Rs.Close
Ds.Close
Exit Sub
'ErrHend:
' MsgBox "查询收款日报错误" & Chr$(13) & "" & Chr$(10) & "错误代码-" & Err.Number & "", 32, Me.Caption ', Err.Source, Err.Description
'End
End Sub