⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 const.bas

📁 适用一般于毕业设计! VB代码源加SQL 数据库 ··
💻 BAS
字号:
Attribute VB_Name = "Const"
Option Explicit
'声明变量
Public Conn As New ADODB.Connection '声明并创建ADO Connection对象
Public CurLoginUserNo As String     '保存当前登录的用户编号
Public CurLoginUserName As String   '保存当前登录的用户名称
Public ModifyFlag As Integer        '修改状态标志:1-修改记录,0-增加记录

'启动对象
Sub Main()
  On Error GoTo ErrorHandle
   
  '防止多次运行同一个程序
  If App.PrevInstance Then
    MsgBox "程序已运行", vbExclamation + vbOKOnly, "操作提示"
    End
  End If

  '设置使用客户端游标
  Conn.CursorLocation = adUseClient
  '设置连接字符串ConnectionString属性
  Conn.ConnectionString = "Provider=SQLOLEDB.1; " & _
                          "Data Source=jl; Initial Catalog=ClassManage; " & _
                          "User ID=sa; Password=123456"
  Conn.Open     '打开到数据库的连接
  FrmLogin.Show   '调用登录窗体

  On Error GoTo 0   '取消错误捕获
  Exit Sub
  
ErrorHandle:
  '判断连接的状态
  If Conn.State <> adStateOpen Then
    '如果连接不成功,则显示提示信息,退出程序
    MsgBox "数据库连接失败", vbExclamation + vbOKOnly, "操作提示"
  Else
    MsgBox Error(Err.Number), vbExclamation + vbOKOnly, "操作提示"
  End If
  End
End Sub


'在TreeView1控件中的TmpKey节点下加入该节点的所有下级数据
Public Sub Add_ClassToTree(TreeView1 As TreeView, ByVal TmpKey As String)
  Dim sID As String       '节点内码
  Dim TmpNode As Node           '定义节点对象
  Dim CurKey As String          '当前处理节点的关键字(直接下级的关键字)
  Dim strSql As String
  Dim rs1 As New ADODB.Recordset    'TmpKey的所有下一级班级或院系记录集
  Dim rs2 As New ADODB.Recordset    '判断用

  '从TmpKey关键字中读取当前班级或院系的内码,并赋值给sID
  sID = Right(TmpKey, Len(TmpKey) - 1)
  '查询Classes表,获得当前班级或院系的下一级数据
  strSql = "select ClassID,ClassName from Classes " & _
           "where UpperID='" & sID & "' order by ClassName"
  rs1.Open strSql, Conn, adOpenStatic, adLockReadOnly
  '循环遍历处理当前班级或院系的所有下级数据
  Do Until rs1.EOF
    '如果rs2对象已打开,则先关闭
    If rs2.State = adStateOpen Then rs2.Close
    '生成下级节点对应的关键字,格式为:字母"a"+ 内码
    CurKey = "a" & rs1!ClassID
    '判断该下级节点下是否还有下一级数据
    strSql = "select count(*) as s_count from Classes " & _
             "where UpperID='" & rs1!ClassID & "'"
    rs2.Open strSql, Conn, adOpenStatic, adLockReadOnly
    If rs2!s_count > 0 Then
      '如果有下一级数据,则把该下级节点CurKey加入到树中,并显示为文件夹图标,
      '同时,以该下级节点为参数递归调用
      Set TmpNode = TreeView1.Nodes.Add(TmpKey, tvwChild, CurKey, rs1!ClassName, _
                                                          "imgClosedFolder")
      TmpNode.ExpandedImage = "imgOpenedFolder"
      Call Add_ClassToTree(TreeView1, CurKey)
    Else
      '如果没有下一级数据,则仅需把该下级节点CurKey加入到树中,
      '并显示为叶节点图标
      Set TmpNode = TreeView1.Nodes.Add(TmpKey, tvwChild, CurKey, rs1!ClassName, _
                                    "imgDeselectedFile", "imgSelectedFile")
    End If
    rs2.Close
    Set rs2 = Nothing
    
    rs1.MoveNext
  Loop
  rs1.Close
  Set rs1 = Nothing
End Sub

'生成20个数字字符的字符串形式的(随机)内码
Public Function GetRndCode() As String
    Dim ss1 As String
    Dim ss2 As String
    
    '以当前的系统日期时间,产生14个数字的字符串(随机)
    ss1 = Format(Now, "yyyymmddhhMMss")
    '产生6位随机数的字符串
    Randomize
    ss2 = CStr(Int((999999 - 100000 + 1) * Rnd + 100000))
    
    '合并形成字符串形式内码
    GetRndCode = ss1 & ss2
End Function

'把数据库中Image字段中的内容取出并形成一个文件
Public Sub GetImage(ImageFile As String, _
           Rs As ADODB.Recordset, ByVal ImageField As String)
  Dim BlockSize As Long
  Dim TempFile As String
  Dim FieldSize  As Long
  Dim NumBlocks As Long         '定义数据块个数
  Dim LeftOver As Long          '定义剩余字节长度
  Dim SourceFile As Long        '定义自由文件号
  Dim byteChunk() As Byte
  Dim i As Long                 '定义循环变量

  BlockSize = 100
  FieldSize = Rs.Fields(ImageField).ActualSize
  If FieldSize <= 0 Then
    Exit Sub
  End If
  '提供一个尚未使用的文件号
  SourceFile = FreeFile
  '打开文件
  Open ImageFile For Binary Access Write As SourceFile
  '计算数据块
  NumBlocks = FieldSize \ BlockSize
  LeftOver = FieldSize Mod BlockSize    '得到剩余字节数
  '分块读取数据,并写入到文件中
  If LeftOver <> 0 Then
    ReDim byteChunk(LeftOver)
    byteChunk() = Rs.Fields(ImageField).GetChunk(LeftOver)
    Put SourceFile, , byteChunk()
  End If
  For i = 1 To NumBlocks
    ReDim byteChunk(BlockSize)
    byteChunk() = Rs.Fields(ImageField).GetChunk(BlockSize)
    Put SourceFile, , byteChunk()
  Next i
  Close SourceFile              '关闭文件
End Sub

'把文件保存到数据库中的Image字段中
Public Sub SaveImage(ByVal ImageFile As String, _
           Rs As ADODB.Recordset, ByVal ImageField As String)
  Dim BlockSize As Long
  Dim FileLength As Long        '标识文件长度
  Dim byteData() As Byte        '定义数据块数组
  Dim NumBlocks As Long         '定义数据块个数
  Dim LeftOver As Long          '定义剩余字节长度
  Dim SourceFile As Long        '定义自由文件号
  Dim i As Long                 '定义循环变量

  BlockSize = 100
  '提供一个尚未使用的文件号
  SourceFile = FreeFile
  '打开文件
  Open ImageFile For Binary Access Read As SourceFile
  '得到文件长度
  FileLength = LOF(SourceFile)
  '判断文件是否存在
  If FileLength = 0 Then
    Close SourceFile
    MsgBox ImageFile & "无内容或不存在!", vbExclamation + vbOKOnly, "操作提示"
  Else
    NumBlocks = FileLength \ BlockSize      '得到数据块的个数
    LeftOver = FileLength Mod BlockSize     '得到剩余字节数
    Rs.Fields(ImageField).Value = Null
    ReDim byteData(BlockSize)         '重新定义数据块的大小
    For i = 1 To NumBlocks
      Get SourceFile, , byteData()        '读到内存块中
      Rs.Fields(ImageField).AppendChunk byteData()    '写入字段中
    Next i
    ReDim byteData(LeftOver)          '重新定义数据块的大小
    Get SourceFile, , byteData()          '读到内存块中
    Rs.Fields(ImageField).AppendChunk byteData()    '写入字段中
    Close SourceFile              '关闭源文件
    Rs.Update               '更新记录集
  End If
End Sub

'把ADO记录集中的数据导出为一个Excel文件,
'注意:要使用该项功能,本机中必须安装Excel 2000或以上版本,
'然后再在程序中引用"Microsoft Excel 9.0 Object Library",
'如果本机安装的是Excel 2003,则引用的是"Microsoft Excel 11.0 Object Library"。
Public Sub ExportToExcel(RsData As ADODB.Recordset, FileNameSaveAs As String)
  Dim iRowCount As Integer
  Dim iColCount As Integer
  Dim xlApp As New Excel.Application  'Excel应用程序对象
  Dim xlBook As Excel.Workbook    'Excel工作薄对象
  Dim xlSheet As Excel.Worksheet    'Excel工作表(页)对象
  Dim xlQuery As Excel.QueryTable   'Excel查询表对象

  iRowCount = RsData.RecordCount    '记录总数(行数)
  iColCount = RsData.Fields.Count   '字段总数(列数)

  '创建对象
  Set xlApp = CreateObject("Excel.Application")
  xlApp.Visible = False
  Set xlBook = xlApp.Workbooks().Add
  Set xlSheet = xlBook.Worksheets("sheet1")

  '工作表查询表对象加入数据(记录集)
  Set xlQuery = xlSheet.QueryTables.Add(RsData, xlSheet.Range("A1"))
  xlQuery.FieldNames = True         '显示字段名
  xlQuery.Refresh
  '设置格式
  With xlSheet
    '设置标题为黑体字
    .Range(.Cells(1, 1), .Cells(1, iColCount)).Font.Name = "黑体"
    '标题字体加粗
    .Range(.Cells(1, 1), .Cells(1, iColCount)).Font.Bold = True
    '设置标题水平居中对齐
    .Range(.Cells(1, 1), .Cells(1, iColCount)).HorizontalAlignment = xlHAlignCenter
    '设置标题垂直居中对齐
    .Range(.Cells(1, 1), .Cells(1, iColCount)).VerticalAlignment = xlVAlignCenter
    '设置表格边框样式
    .Range(.Cells(1, 1), .Cells(iRowCount + 1, iColCount)).Borders.LineStyle = xlContinuous
  End With

  '保存工作薄,Excel应用程序对象退出
  xlApp.Application.Visible = False
  xlBook.SaveAs (FileNameSaveAs)
  xlApp.Quit
  
  '释放对象
  Set xlApp = Nothing       '交还控制给Excel
  Set xlBook = Nothing
  Set xlSheet = Nothing
End Sub


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -