mdlMain.bas
上传用户:yexiandon
上传日期:2022-07-12
资源大小:895k
文件大小:13k
源码类别:

百货/超市行业

开发平台:

Visual Basic

  1. Attribute VB_Name = "mdlMain"
  2. '****************************************************************************
  3. '人人为我,我为人人
  4. '枕善居收藏整理
  5. '发布日期:2008/01/21
  6. '描    述:汽车维修管理系统SQL2000版
  7. '网    站:http://www.Mndsoft.com/  (VB6源码博客)
  8. '网    站:http://www.VbDnet.com/   (VB.NET源码博客,主要基于.NET2005)
  9. 'e-mail  :Mndsoft@163.com
  10. 'e-mail  :Mndsoft@126.com
  11. 'OICQ    :88382850
  12. '          如果您有新的好的代码别忘记给枕善居哦!
  13. '****************************************************************************
  14. Option Explicit
  15. '*********************************
  16. '公司:辽宁正昊企业集团
  17. '设计:孙新
  18. '编码:孙新
  19. '时间:2007-11-23
  20. '*********************************
  21. Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  22. Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal lSize As Long, ByVal lpFilename As String) As Long
  23. Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As Any, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFilename As String) As Long
  24. Public g_Conn As New Connection     '用于全局的数据连接
  25. Public g_CnStr As String            '用于全局的数据连接字符串
  26. Public g_Admin As String            '当前用户名
  27. Public g_DBname As String           '当前数据库名
  28. Public g_ACCname As String          '当前帐套名
  29. Public g_QX(15) As Boolean
  30. Private Const gintMAX_SIZE% = 255   'Maximum buffer size
  31. Public Const qMSG$ = "您无此权限,请管理员分配。"
  32. '连接到数据库
  33. Public Function ConnectToDatabase(ByVal ServerName As String, ByVal DBName As String, ByVal UserName As String, ByVal strPwd As String) As Boolean
  34.   On Error GoTo ERR_CONN
  35.   '连接到数据库
  36.   With g_Conn
  37.      .CursorLocation = adUseClient
  38.      .CommandTimeout = 10
  39.      
  40.       ' 连接到SQL Server数据库
  41.         g_CnStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
  42.         "User ID=" & UserName & ";Data Source=" & ServerName & _
  43.         ";pwd=" & strPwd & ";Initial Catalog=" & DBName
  44.         .ConnectionString = g_CnStr
  45.      .Open
  46.   End With
  47.   ConnectToDatabase = True
  48.   Exit Function
  49.   
  50. ERR_CONN:
  51.   ConnectToDatabase = False
  52.   MsgBox Err.Description
  53.   
  54. End Function
  55. Function IDnum(clas As String, tbn As String) As String
  56. '*********************************************************
  57. '* 名称:IDNUM
  58. '* 功能:生成单据编号
  59. '* 用法:IDNUM(类别,表名)
  60. '*********************************************************
  61. Dim pid As String
  62. Dim Rs As ADODB.Recordset
  63. Set Rs = g_Conn.Execute("SELECT IDN FROM " & tbn & " WHERE LEFT(IDN,13)='" & clas & Format(Now(), "yyyy-mm-dd") & "' ORDER BY IDN")
  64. If Rs.RecordCount = 0 Then
  65.     pid = clas & Format(Now(), "yyyy-mm-dd") & "-" & Format(1, "###000")
  66. ElseIf Not Rs.EOF Then Rs.MoveLast
  67.     If clas & Format(Now(), "yyyy-mm-dd") = Left(Rs("idn"), 13) Then
  68.         pid = Left(Rs("IDN"), 13) & "-" & Format(Val(Right(Rs("idn"), 3)) + 1, "###000")
  69.     ElseIf clas & Format(Now(), "yyyy-mm-dd") <> Left(Rs("idn"), 13) Then
  70.         pid = clas & Format(Now(), "yyyy-mm-dd") & "-" & Format(1, "###000")
  71.     End If
  72. End If
  73. Set Rs = Nothing
  74. IDnum = pid
  75. End Function
  76. Public Function ConvertBTD(strBin As String) As String
  77.   Dim tmpVal   As String
  78.   Dim iCount   As Long
  79.     For iCount = 1 To Len(strBin)
  80.             tmpVal = Val(tmpVal) + Val(Mid$(strBin, iCount, 1)) * (2 ^ (Len(strBin) - iCount))
  81.     Next iCount
  82. ConvertBTD = tmpVal
  83. End Function
  84. Public Function ConvertDTB(strBin As String) As String
  85.   Dim tmpVal   As String
  86.   Dim iCount   As Long
  87.   iCount = Val(strBin)
  88.     While (iCount <> 0)
  89.         tmpVal = iCount Mod 2 & tmpVal
  90.         iCount = (iCount - iCount Mod 2) / 2
  91.     Wend
  92.     ConvertDTB = tmpVal
  93. End Function
  94. Public Function ReadIniFile(ByVal strIniFile As String, ByVal strSection As String, ByVal strKey As String, Optional ByVal strKeyDefault As String = vbNullString) As String
  95.     Dim strBuffer As String
  96.     strBuffer = Space$(gintMAX_SIZE)
  97.     If GetPrivateProfileString(strSection, strKey, strKeyDefault, strBuffer, gintMAX_SIZE, strIniFile) Then
  98.        ReadIniFile = StringFromBuffer(strBuffer)
  99.     End If
  100. End Function
  101. Private Function StringFromBuffer(Buffer As String) As String
  102.     Dim nPos As Long
  103.     nPos = InStr(Buffer, vbNullChar)
  104.     If nPos > 0 Then
  105.         StringFromBuffer = Left$(Buffer, nPos - 1)
  106.     Else
  107.         StringFromBuffer = Buffer
  108.     End If
  109. End Function
  110. Sub LoadResStrings(frm As Form)
  111.   On Error Resume Next
  112.   Dim ctl As Control
  113.   Dim obj As Object
  114.   Dim fnt As Object
  115.   Dim sCtlType As String
  116.   Dim nVal As Integer
  117.   '设置窗体的 caption 属性
  118.   frm.Caption = LoadResString(CInt(frm.Tag))
  119.   
  120.   '设置字体
  121.   Set fnt = frm.Font
  122.   fnt.Name = LoadResString(20)
  123.   fnt.Size = CInt(LoadResString(21))
  124.   
  125.   '设置控件的标题,对菜单项使用 caption 属性并对所有其他控件使用 Tag 属性
  126.   For Each ctl In frm.Controls
  127.     Set ctl.Font = fnt
  128.     sCtlType = TypeName(ctl)
  129.     If sCtlType = "Label" Then
  130.       ctl.Caption = LoadResString(CInt(ctl.Tag))
  131.     ElseIf sCtlType = "Menu" Then
  132.       ctl.Caption = LoadResString(CInt(ctl.Caption))
  133.     ElseIf sCtlType = "TabStrip" Then
  134.       For Each obj In ctl.Tabs
  135.         obj.Caption = LoadResString(CInt(obj.Tag))
  136.         obj.ToolTipText = LoadResString(CInt(obj.ToolTipText))
  137.       Next
  138.     ElseIf sCtlType = "Toolbar" Then
  139.       For Each obj In ctl.Buttons
  140.         obj.ToolTipText = LoadResString(CInt(obj.ToolTipText))
  141.       Next
  142.     ElseIf sCtlType = "ListView" Then
  143.       For Each obj In ctl.ColumnHeaders
  144.         obj.Text = LoadResString(CInt(obj.Tag))
  145.       Next
  146.     Else
  147.       nVal = 0
  148.       nVal = Val(ctl.Tag)
  149.       If nVal > 0 Then ctl.Caption = LoadResString(nVal)
  150.       nVal = 0
  151.       nVal = Val(ctl.ToolTipText)
  152.       If nVal > 0 Then ctl.ToolTipText = LoadResString(nVal)
  153.     End If
  154.   Next
  155. End Sub
  156. '替换字符串中的单引号
  157. Public Function RealString(strOrigional) As String
  158.   RealString = Replace(strOrigional, "'", "''")
  159. End Function
  160. Public Function PassIsTrue(ByVal strUname As String, ByVal strPass As String, Optional ByVal strTable As String = "Users") As Boolean
  161.   Dim Rs As Recordset
  162.   Set Rs = g_Conn.Execute("SELECT COUNT(*) FROM " & strTable & " Where UserName='" & strUname & "' and Upass='" & strPass & "'")
  163.   PassIsTrue = (Rs(0).Value = 1)
  164.   Set Rs = Nothing
  165. End Function
  166. Public Function IsSys(strUser As String) As Boolean
  167.   Dim Rs As New ADODB.Recordset
  168.   Set Rs = g_Conn.Execute("select issys from users where username='" & strUser & "'")
  169.   IsSys = Rs(0).Value
  170.   Set Rs = Nothing
  171. End Function
  172. '保存最后登陆的用户
  173. Public Function LetUser(ByVal strUser As String, Optional ByVal strTable As String = "Users")
  174.   '参数是表的名称
  175.    g_Conn.Execute ("Update " & strTable & " SET LastLogin = '" & Now() & "' Where UserName='" & strUser & "'")
  176.   
  177. End Function
  178. '得到某个数据表中主键的下一个值,即当前主键值加1
  179. Public Function NextID(ByVal strTable As String, ByVal strID As String) As Long
  180.   '两个参数分别是表的名称与主键的名称
  181.   Dim Rs As Recordset
  182.   Set Rs = g_Conn.Execute("SELECT MAX(" & strID & ") FROM " & strTable & "")
  183.   
  184.   If IsNull(Rs(0)) Then
  185.     '如果值为NULL,则说明无任何数据记录,此时ID应为1
  186.     NextID = 1
  187.   Else
  188.     '使新ID为最大ID值+1
  189.     NextID = Rs(0).Value + 1
  190.   End If
  191.   Set Rs = Nothing
  192. End Function
  193. '得到某个数据表中主键的最大值
  194. Public Function MaxID(ByVal strTable As String, ByVal strID As String) As Long
  195.   '两个参数分别是表的名称与主键的名称
  196.   Dim Rs As Recordset
  197.   Set Rs = g_Conn.Execute("SELECT MAX(" & strID & ") FROM " & strTable)
  198.   
  199.   If IsNull(Rs(0)) Then
  200.     '如果值为NULL,则说明无任何数据记录,此时ID应为1
  201.     MaxID = 0
  202.   Else
  203.     '使新ID为最大ID值+1
  204.     MaxID = Rs(0).Value
  205.   End If
  206.   Set Rs = Nothing
  207. End Function
  208. '查看某个数据表中,是否存在某个字段等于某个值的记录(整型)
  209. Public Function ExistByID(ByVal strTable As String, ByVal strID As String, _
  210.                           ByVal lngID As Long) As Boolean
  211.   '第一个参数为表名,第二个为字段名,第三个为具体的字段值
  212.   Dim Rs As Recordset
  213.   Set Rs = g_Conn.Execute("Select Count(*) from " & strTable & _
  214.                           " where " & strID & "=" & lngID)
  215.   ExistByID = (Rs(0).Value >= 1)
  216.   Set Rs = Nothing
  217. End Function
  218. '查看某个数据表中,是否存在某个字段等于某个值的记录(整型)
  219. Public Function ExistByValueID(ByVal strTable As String, ByVal strID As String, _
  220.                           ByVal strIDv As Long, ByVal strValue As String, _
  221.                           ByVal strValuev As String) As Boolean
  222.   '第一个参数为表名,第二个为字段名,第三个为具体的字段值
  223.   Dim Rs As Recordset
  224.   Set Rs = g_Conn.Execute("Select Count(*) from " & strTable & _
  225.                           " where " & strID & "<>" & strIDv & " and " & strValue & "='" & strValuev & "'")
  226.   ExistByValueID = (Rs(0).Value >= 1)
  227.   Set Rs = Nothing
  228. End Function
  229. '查看某个数据表中,是否存在某个字段等于某个值的记录(字符型)
  230. Public Function ExistByName(ByVal strTable As String, ByVal strFieldName As String, ByVal strName As String) As Boolean
  231.   '第一个参数为表名,第二个为字段名,第三个为具体的字段值
  232.   Dim Rs As Recordset
  233.   Set Rs = g_Conn.Execute("Select Count(*) from " & strTable & " where " & strFieldName & "='" & strName & "'")
  234.   ExistByName = (Rs(0).Value >= 1)
  235.   Set Rs = Nothing
  236. End Function
  237. '以上两个函数实际上可以合并,本程序中为了说明问题,故而分开
  238. '根据给定的主键值,获取某一指定的字段值
  239. Public Function GetValueByID(ByVal strTable As String, ByVal strID As String, _
  240.                   ByVal lngID As Long, ByVal strValueField As String) As String
  241.   '第一个参数为表名,第二个为主键字段名,第三个为主键字段值,第四个为要获取值的字段名
  242.   Dim Rs As Recordset
  243.   Set Rs = g_Conn.Execute("Select " & strValueField & " from " & strTable & _
  244.                           " where " & strID & "=" & lngID)
  245.   If Rs.RecordCount = 1 Then
  246.     GetValueByID = Rs(0).Value
  247.   Else
  248.     GetValueByID = ""
  249.   End If
  250.   Set Rs = Nothing
  251. End Function
  252. '根据给定的主键值,获取某一指定的字段值
  253. Public Function GetIDByValue(ByVal strTable As String, ByVal strValue As String, _
  254.                   ByVal strIDField As Long, ByVal strValueField As String) As String
  255.   '第一个参数为表名,第二个为主键字段名,第三个为主键字段值,第四个为要获取值的字段名
  256.   Dim Rs As Recordset
  257.   Set Rs = g_Conn.Execute("Select " & strIDField & " from " & strTable & _
  258.                           " where " & strValueField & "=" & strValue)
  259.   If Rs.RecordCount = 1 Then
  260.     GetIDByValue = Rs(0).Value
  261.   Else
  262.     GetIDByValue = ""
  263.   End If
  264.   Set Rs = Nothing
  265. End Function
  266. '//
  267. '// 执行一条无返回结果的 SQL 语句
  268. '//
  269. Public Function RunSql(strSQL As String, ByRef strErrMsg As String) As Boolean
  270.   
  271.   On Error Resume Next
  272.   
  273.   g_Conn.Execute strSQL '执行SQL语句
  274.   
  275.   '根据是否出错,返回给调用者相应的信息
  276.   If Err.Number = 0 Then
  277.     RunSql = True
  278.   Else
  279.     strErrMsg = Err.Description
  280.     RunSql = False
  281.   End If
  282. End Function
  283. '//
  284. '// 执行一条有返回结果的 SQL 语句
  285. '//
  286. Public Function GetRecordset(strSQL As String, ByRef strErrMsg As String, ByRef Rs As Recordset) As Boolean
  287.   
  288.   On Error Resume Next
  289.   
  290.   Set Rs = g_Conn.Execute(strSQL) '执行SQL语句
  291.   
  292.   '根据是否出错,返回给调用者相应的信息
  293.   If Err.Number = 0 Then
  294.     GetRecordset = True
  295.   Else
  296.     strErrMsg = Err.Description
  297.     GetRecordset = False
  298.   End If
  299. End Function
  300. Public Function GetID(strKey As String) As Long
  301.   GetID = Val(Right(strKey, Len(strKey) - 1))
  302. End Function
  303. Public Function ListViewToExcel(ByRef lvw As MSComctlLib.ListView) As Boolean
  304.     Dim i, iCols, iRows         As Integer
  305.     Dim itm                     As ListItem
  306.     Dim objExcel                As Excel.Application
  307.     Dim objWorkbook             As Excel.Workbook
  308.     Dim objWorksheet            As Excel.Worksheet
  309.     
  310.     If lvw.SelectedItem Is Nothing Then MsgBox "表格没有任何资料。", vbOKOnly + vbInformation, "导出失败": Exit Function
  311.     Screen.MousePointer = vbHourglass
  312.     
  313.     
  314.     On Error Resume Next
  315.     Set objExcel = New Excel.Application
  316.           
  317.     If Err.Number > 0 Then MsgBox "本机未安装 Excel 。", vbOKOnly + vbCritical, "加载 Excel 失败": Exit Function
  318.     
  319.     Set objWorkbook = objExcel.Workbooks.Add
  320.     Set objWorksheet = objWorkbook.Sheets(1)
  321.     
  322.     objWorksheet.Rows(1).Font.Bold = True
  323.     objWorksheet.Cells.Font.Size = 9
  324.     For i = 1 To lvw.ColumnHeaders.Count
  325.         objWorksheet.Cells(1, i) = lvw.ColumnHeaders(i).Text
  326.     Next i
  327.     
  328.     iCols = i - 1
  329.     iRows = 1
  330.     For Each itm In lvw.ListItems
  331.         iRows = iRows + 1
  332.         For i = 1 To iCols
  333.             If i = 1 Then
  334.                 objWorksheet.Cells(iRows, 1) = itm.Text
  335.             Else
  336.                 objWorksheet.Cells(iRows, i) = itm.SubItems(i - 1)
  337.             End If
  338.         Next i
  339.     Next itm
  340.     
  341.     objWorksheet.Columns.AutoFit
  342.     objExcel.Application.Visible = True
  343.     
  344.     
  345.     Set objWorksheet = Nothing
  346.     Set objWorkbook = Nothing
  347.     Set objExcel = Nothing
  348.     Screen.MousePointer = vbDefault
  349.     
  350. End Function