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

📄 mod_sqlserver.bas

📁 导出Access、Sql Server数据库表到Html vb源吗
💻 BAS
字号:
Attribute VB_Name = "Mod_SQLServer"
Type SqlTable
   strName                          As String                     '在SQLSERVER数据库里的表名称
   lngID                            As Long                       '在SQLSERVER数据库里的表编号
End Type

Dim adoRS_Fields                    As New ADODB.Recordset        '用来读取字段信息

'导出一个数据库(SqlServer)的数据库结构到一个HTML文件。
Public Function SqlServerToHtml(ByVal strConn As String, ByVal strHtmlFileName As String)
   Dim adoRS                        As New ADODB.Recordset        'ADO记录集
   Dim i As Integer, j As Integer
   Dim S As Integer
   Dim lngFileNum                   As Long
   Dim lngCount                     As Long                       '表里的记录数
   Dim userTabs()                   As SqlTable                   '保存数据库里的所有表名
   Dim strNULL                      As String                     '是否必填
   Dim strDefault                   As String                     '默认值
   Dim strDescription               As String                     '字段说明
   Dim strSQL                       As String                     'SQL 语句
   Dim strFieldName                 As String                     '字段名称
   Dim strIsKey                     As String                     '是否为关键字
   Dim lngLen                       As Long                       '临时保存长度
      
   On Error GoTo LocalErr
   
   '从系统表 sysobjects 里读取用户数据表
   strSQL = "SELECT * FROM sysobjects WHERE (xtype = 'U' AND name<>'dtproperties') ORDER BY name"
   
   With adoRS
      .ActiveConnection = strConn
      .CursorLocation = adUseServer
      .CursorType = adOpenStatic
      .LockType = adLockReadOnly
      .Source = strSQL
      .Open
      
      If .EOF And .BOF Then
         Exit Function
      End If
   End With
   
   Set adoRS_Fields = Nothing
   With adoRS_Fields
      .ActiveConnection = strConn
      .CursorLocation = adUseServer
      .CursorType = adOpenStatic
      .LockType = adLockReadOnly
   End With
   
   S = adoRS.RecordCount - 1
   ReDim userTabs(S)
   
   '记录表名和表的编号
   For i = 0 To S
      userTabs(i).strName = adoRS.Fields("name").Value
      userTabs(i).lngID = adoRS.Fields("id").Value
      adoRS.MoveNext
   Next i
   
   adoRS.Close
   
   '判断这个文件是否存在
   If Exists(strHtmlFileName, vbNormal) = False Then
      lngFileNum = FreeFile
      Open strHtmlFileName For Output As #lngFileNum
      Close #lngFileNum
   Else
      If MsgBox(strHtmlFileName & "文件已经存在,是否覆盖?", vbYesNo + vbInformation) = vbYes Then
         Kill strHtmlFileName
         lngFileNum = FreeFile
         Open strHtmlFileName For Output As #lngFileNum
         Close #lngFileNum
      Else
         Exit Function
      End If
   End If
   
   '打开那个HTML文件,准备写入数据
   lngFileNum = FreeFile
   Open strHtmlFileName For Append As #lngFileNum
      Print #lngFileNum, "<html>"
      Print #lngFileNum, "<head>"
      Print #lngFileNum, "<meta http-equiv=Content-Type content=text/html; charset=gb2312>"
      Print #lngFileNum, "<title>数据库结构表</title>"
      
      Print #lngFileNum, "<style type='text/css'>"
      Print #lngFileNum, "body{FONT-SIZE: 12px;"
      Print #lngFileNum, "COLOR: #505050;"
      Print #lngFileNum, "FONT-FAMILY: 宋体;"
      Print #lngFileNum, "background-color: #FFFFFF;}"
      Print #lngFileNum, "A:visited{TEXT-DECORATION: none;Color:#3366CC}"
      Print #lngFileNum, "A:active{TEXT-DECORATION: none;Color:#3366CC}"
      Print #lngFileNum, "A:hover{TEXT-DECORATION: underline;Color:#FF9933}"
      Print #lngFileNum, "A:link{text-decoration: none;Color:#3366CC}"
      Print #lngFileNum, "TD{font-family: 宋体;"
      Print #lngFileNum, "font-size: 12px;"
      Print #lngFileNum, "background-color: #FFFFFF;}"
      Print #lngFileNum, "td.TableTitle{"
      Print #lngFileNum, "Color: #FFFFFF;"
      Print #lngFileNum, "font-weight: bold;"
      Print #lngFileNum, "background-color: #336699;}"
      Print #lngFileNum, "td.TableTitle2{"
      Print #lngFileNum, "Color: #FF6600;"
      Print #lngFileNum, "background-color: #F1F1F1;}"
      Print #lngFileNum, "</style>"
      Print #lngFileNum, "</head>"
      Print #lngFileNum, "<body>"

      Print #lngFileNum, "<p align=center><font color=#336699>" & strFileName & "数据库结构</font></p>"
      Print #lngFileNum, "<div align=center>"
      Print #lngFileNum, "<Table border=1 width=90% cellspacing=0 cellpadding=2 bordercolordark=#FFFFFF bordercolorlight=#AABBCC>"
      
     
      For i = 0 To S
         If userTabs(i).strName = "" Then GoTo NextFor
         DoEvents
         Frm_Main.lblState.Caption = "正在导出表 -> " & userTabs(i).strName
         '增加一个表名的单元格
         Print #lngFileNum, "<TR><TD Width=100% colspan=7 Class='TableTitle' align=center>" _
                            & userTabs(i).strName & "</TD></TR>"
                            
         adoRS.Source = "SELECT Col.NAME COLNAME,Types.name AS COLTYPE," & _
                        "Col.length AS COLLENGTH,(" & _
                        "SELECT CONVERT(nvarchar,value) AS COLMEMO " & _
                        "FROM sysproperties WHERE id=Obj.id AND smallid=Col.colid) AS COLMEMO " & _
                        "FROM sysobjects Obj,syscolumns Col,systypes Types " & _
                        "WHERE Obj.id=Col.id AND Obj.xtype='U' AND Col.xtype=Types.xtype " & _
                        " AND Types.name<>'sysname' AND Obj.NAME='" & userTabs(i).strName & "' ORDER BY Col.colid "

         adoRS.Open
         lngCount = adoRS.RecordCount - 1
         
         Print #lngFileNum, "<TR><TD Width=20% align=center Class='TableTitle2'>字段名称</TD>"
         Print #lngFileNum, "<TD Width=10%  align=center Class='TableTitle2'>字段大小</TD>"
         Print #lngFileNum, "<TD Width=15% align=center Class='TableTitle2'>字段类型</TD>"
         Print #lngFileNum, "<TD Width=8% align=center Class='TableTitle2'>默认值</TD>"
         Print #lngFileNum, "<TD Width=7% align=center Class='TableTitle2'>必填</TD>"
         Print #lngFileNum, "<TD Width=10% align=center Class='TableTitle2'>允许空</TD>"
         Print #lngFileNum, "<TD Width=30% align=center Class='TableTitle2'>说明</TD></TR>"
         
         For j = 0 To lngCount
            DoEvents
            strFieldName = adoRS.Fields("COLNAME").Value
            If IsNull(adoRS.Fields("COLMEMO").Value) Then
               strDescription = "-"
            Else
               strDescription = adoRS.Fields("COLMEMO").Value
            End If
            
            Call GetFieldInfos(userTabs(i).lngID, strFieldName, strDefault, strNULL, strIsKey)
            
            If strIsKey = "True" Then
               strFieldName = strFieldName & "(*)"
            End If
            
            lngLen = adoRS.Fields("COLLENGTH").Value
            If adoRS.Fields("COLTYPE").Value = "nvarchar" Then
               lngLen = lngLen / 2
            End If
            
            Print #lngFileNum, "<TR><TD Width=20% align=left>" & strFieldName & "</TD>"
            Print #lngFileNum, "<TD Width=10% align=center>" & lngLen & "</TD>"
            Print #lngFileNum, "<TD Width=10% align=center>" & adoRS.Fields("COLTYPE").Value & "</TD>"
            Print #lngFileNum, "<TD Width=10% align=center>" & IIf(Len(strDefault) = 0, "-", strDefault) & "</TD>"
            Print #lngFileNum, "<TD Width=10% align=center>" & strNULL & "</TD>"
            Print #lngFileNum, "<TD Width=10% align=center>" & IIf(strNULL = "√", "×", "√") & "</TD>"
            Print #lngFileNum, "<TD Width=30% align=center>" & strDescription & "</TD></TR>"
            adoRS.MoveNext
         Next j
         adoRS.Close
NextFor:
      Next i
      Set adoRS = Nothing
      Print #lngFileNum, "</Table></div>"
      Print #lngFileNum, "<p align='center'>谢谢使用!如有问题请E-Mail联系我,或到论坛给我留言!"
      Print #lngFileNum, "<br>BBS:<a href='http://www.5ivb.net'>程序太平洋社区</a>"
      Print #lngFileNum, "<br>E-Mail:<a href='mailto:zhouronggang@163.com'>zhouronggang@163.com</a></p>"
      Print #lngFileNum, "</body>"
      Print #lngFileNum, "</html>"
   Close #lngFileNum
   Set adoRS_Fields = Nothing
   Frm_Main.lblState.Caption = "导出操作已经完成!"
   MsgBox "导出操作已经完成!", vbInformation
   
   Exit Function
LocalErr:
   MsgBox "导出过程发生错误!!" & Err.Description, vbExclamation
   Err.Clear
   Set adoRS_Fields = Nothing
   Set adoRS = Nothing
End Function

'取得字段的一些属性
Function GetFieldInfos(ByVal lngTabID As Long, _
                       ByVal strFieldName As String, _
                       strDefault As String, _
                       strIsNull As String, _
                       strIsKey As String) As Boolean
   
   Dim strSQL                       As String                     '保存SQL语句
   Dim i                            As Integer
   Dim intCount                     As Integer                    '记录集里的记录数
   
   
   '取得某个表里的“关键字”
   strSQL = "SELECT name FROM syscolumns S WHERE id=" & lngTabID & _
            " AND colid IN(SELECT colid FROM sysindexkeys WHERE S.id=id and indid IN(" & _
            "SELECT indid FROM sysindexes WHERE S.id=id and name IN(" & _
            "SELECT name FROM sysobjects WHERE xtype='PK' and parent_obj=S.id)))"
   
   With adoRS_Fields
      .Source = strSQL
      .Open
      
      strIsKey = "False"
      If .EOF And .BOF Then
         GoTo CloseAdo
      End If
      
      intCount = adoRS_Fields.RecordCount
      
      For i = 1 To intCount
         If strFieldName = .Fields(0).Value Then
            strIsKey = "True"
            Exit For
         End If
         .MoveNext
      Next i
      
CloseAdo:
      .Close
      
      '取得一个字段的是否允许为空及说明信息
      .Source = "SELECT isnullable,(SELECT [text] FROM syscomments WHERE id = (" & _
                "SELECT cdefault FROM syscolumns WHERE name='" & _
                strFieldName & "' AND id=" & lngTabID & ")) As Def FROM syscolumns WHERE name='" & _
                strFieldName & "' AND id=" & lngTabID & ""
      .Open
      
      If .EOF And .BOF Then
         .Close
         Exit Function
      End If
      If IsNull(.Fields("Def").Value) Then
         strDefault = ""
      Else
         strDefault = .Fields("Def").Value
      End If
      
      If .Fields("isnullable").Value = 0 Then
         strIsNull = "√"
      Else
         strIsNull = "×"
      End If
      .Close
   End With
End Function

⌨️ 快捷键说明

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