机房收费总结

来源:互联网 发布:安卓模拟器对比 知乎 编辑:程序博客网 时间:2024/05/16 08:42
拖拖拉拉的,我的机房收费总算是完工了,真是不容易啊,感觉进度好慢啊,都没有完成一件事情的喜悦和激情了。
真的不想总结,因为我感觉好多东西别人都写过了,再写我感觉就不想写了,不过按照米老师说的,学习完了要总结,才会变成自己的知识,多总结,打包,把新知识变为旧知识,所以我还是总结一下我的收获吧,不然回头看看,这里是一片空白。
整理一下我遇到的困难,也就是我学习到的东西。
1,窗体的命名
起初命名时,感觉好困难,问问同学,说随便起个就行,我就拼音上了,终于在一次验收的时候,师父说不行,这不仅是专业的问题,规范的命名还可以给我们带来方便嘛,毕竟代码不只是写给自己的。
之前米老师讲过驼峰命名法和匈牙利命名法,这里就不在赘述了。
2,主窗体与子窗体
在父窗体上无法添加label,text或command等控件。可以使用picturebox
mdi是其他子窗体的容器,但是如果将picturebox拉伸到与mdi窗体最大化一样大小时,子窗体就无法显示了,子窗体被picturebox挡住了,我们这里就用到了一个API函数——setparent
在模块中声明这个函数
  Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long 
在单机菜单的Click 事件中 
SetParent frmStudent.hWnd,frmMain.hWnd

格式:setParent 你要显示的子窗体名称.hWnd, MDI窗体(即你的MDI窗体名称).hWnd

在这里我要把它改成

SetParent frmStudent.hWnd,Picture.hWnd

就ok了

3,日期类型(隔天时差)

在日期这个问题上,确实出了不少错,就是日期的类型,尤其是隔天算钱的问题,起初我算的只能是当天的时间差,也就是intTime = DateDiff("n", ontime, Time),后来发现隔天的时间好像就错了,参照邱慕夏同学的博客
http://blog.csdn.net/qiumuxia0921/article/details/11714209
时间的类型不仅有date 有time还有 datetime2(n)
用date就是2013/9/15日期

用time(0)那么就是21:32:00时间

用datetime2(0)就是2013/9/15 21:32:00既有日期又有时间

intTime = DateDiff("n", datetime, now)这样时间差就不会错了


4,MSHFlexGrid控件

MSHFlexGrid控件主要是用于表显示查询到数据库的信息,

在”工程“菜单中,选择”部件“,出现部件对话框

在控件选项卡中,选择Microsoft Hierarchical FlexGrid Control6.0,然后单击确定,MSHFlexGrid控件被添加到工具箱中

在工具箱中,单击MSGFlexGrid控件,然后将其拖到窗体上。

还有怎么删除控件中指定的记录,这个我之前写过一篇博客,这里就不多说了

5,导出Excel表

Dim xlapp As Excel.Application  'excel应用程序Dim xlbook As Excel.Workbook  '工作簿 Dim xlsheet As Excel.Worksheet  '工作表Set xlapp = New Excel.Application Set xlbook = xlapp.Workbooks.Add  Set xlsheet = xlbook.Worksheets.Add   Dim row As Integer '行   Dim col As Integer '列    '导出为excel表    With MSHFlexGrid1        For row = 0 To .Rows - 1            For col = 0 To .Cols - 1                xlsheet.Cells(row + 1, col + 1).Value = .TextMatrix(row, col)            Next col        Next row    End With   xlapp.Visible = True


6,结账

结账窗体要用到SSTab控件

在 工程→部件→控件 中勾选“Microsoft Tabbed Dialog Control”控件,点击应用

SSTab控件提供了一组选项卡,每个都充当一个容器,包含了其他的控件。控件中每次只有一个选项卡是活动的,给用户提供了其所包含的控件,而其他选项卡都是隐藏的。

  再说结账,这一直是我很头疼的一个地方,一直整的不是很明白,大概就是,结账就是按照一定条件选择出来的卖了多少卡,退了多少卡,冲了多少钱,退了多少钱,收了多少钱,这个账单汇总一下。

7,报表

从一听说这个东西就一直有一种恐惧,不知道是个什么东西,只知道它是后面会用到,终于在做了日报表,周报表后明白了。

vb中有报表设计器,但是我感觉好像很麻烦,就用了Grid++Report 报表设计器,具体过程我是参考别人的博客写的。

http://blog.csdn.net/wlccomeon/article/details/8269917

8,打包发布问题
(1)数据库连接问题
总是数据库就是连接不上,ping也ping不通,两台机器的数据访问不了,弄了好几次,后来把防火墙关了,就ping通了,数据库也连接上了。
(2)第三方控件没有
GRDisplayViewer在别的机器上没有,那就将相应的第三方控件的DLL文件打包到你的程序中去,就可以解决了。这里需要将gregn50.dll打包进去,报表就可以用了。

9,组合查询

这个问题也是学习的别人的博客

txtSQL1 = "select * from online_info where" & " " & fieldName(Combo1.Text) & Combo4.Text & " '" & Text1 & "'"    txtSQL2 = "select * from online_info where" & " " & fieldName(Combo1.Text) & Combo4.Text & "'" & Text1.Text & "'" & " " & fieldName(Combo7.Text) & " " & fieldName(Combo2.Text) & Combo5.Text & "'" & Text2 & "'"    txtSQL3 = "select * from online_info where" & " " & fieldName(Combo1.Text) & Combo4.Text & "'" & Text1.Text & "'" & " " & fieldName(Combo7.Text) & " " & fieldName(Combo2.Text) & Combo5.Text & "'" & Text2.Text & "'" & " " & fieldName(Combo8.Text) & " " & _                fieldName(Combo3.Text) & Combo6.Text & "'" & Text3 & "'"    MSHFlexGrid1.Clear '先清除        '按条件有三种查询    If Not Testtxt(Combo7.Text) Then        txtSQL = txtSQL1    Else        If Not Testtxt(Combo2.Text) Or Not Testtxt(Combo5.Text) Or Not Testtxt(Text2.Text) Then        MsgBox "请输入完整的查询条件", vbOKOnly + vbExclamation, "提示"        Else            If Not Testtxt(Combo8.Text) Then                txtSQL = txtSQL2            Else                If Not Testtxt(Combo3.Text) Or Not Testtxt(Combo6.Text) Or Not Testtxt(Text3.Text) Then                    MsgBox "请输入完整的查询条件", vbOKOnly + vbExclamation, "提示"                Else                    txtSQL = txtSQL3                End If            End If        End If    End If


10,SQL注入问题
对于这个问题我一直很疑惑,因为别人一直说的1'or '1'='1我好像注入不了,原来我已经防治注入了。
sql='select admin from user_info where userid=' '' & txtuser.text & ''' & ' and pwd=' & ''' & txtpassword.text & '''使用1'or '1'='1查询就变成了:select admin from user_info where userid='1'or '1'='1' and pwd='1'or '1'='1'
         这样的话,根据运算规则,这里一共有4个查询语句,那么查询结果就是 假or真and假or真,先算and 再算or,最终结果为真,将用户和密码分开查就好了不要在一个sql语句中(当然这只是其中一种办法),还有好多别的办法,参见http://blog.csdn.net/qiumuxia0921/article/details/12175677
0 0
原创粉丝点击