http://www.wzjcw.net/vbgood/taishan/index.html【迷你数据库浏览器】源代码。添加、删除表、列,点击列标头排序,ADO对象,DataGrid操作

解决方案 »

  1.   

    建立、改变及重构Access数据库
    ------------------------------------------------------------------------
    --------
    由VB提供的DataManager对于开发人员来讲并不是一件强大的工具。对于那些没有
    装Access数据库的人来说,在开发
    时建立.改变或重构数据库,以及载入/重载表单都是一件痛苦的事。此外
    DataManager不能让我们打印数据库的结构。让我们编一个小程序实现上述功能,然后工程结束后把它抛弃.首先可以用一个以逗号分隔的文本文件来储存表结构,如下面这个人员表。lPersonID,Long,,person's ID 
    sPersonFirstName,Text,20,person's first name 
    sPersonLastName,Text,20,person's last name 
    bIsAFunPerson,Boolean,,invite to a party? 
    iTypeOfJob,Integer,,0=None 1=Manual 2=Office 3=programmer etc. 
    iAge,Integer,,person's age该表有六列,每列独占一行。每行中用逗号分隔下列各项:字段名.字段类型.字
    段长度(如果不是字符型字段,就留空,仅用逗号
    分隔)及字段描述。如果你想在字段描述中使用逗号,你可以不用逗号分隔各项,
    换成Tab分隔。一个通用程序能读取这些文件并根据它们建立起数据库。这种方法,连同一些通用
    的导入/导出程序能大大加快程序开发的速度。举例 来说,你不能在DM中删除一
    个表的一列,但通过删除CSV文件中对一列的定义,然后重新运行构建数据库的程
    序,你就能轻松做到这一点。如果你想打印出数据库的结构,方法也很简单:用Excel读CSV文件,再将其粘贴到
    Word中,这样你就可以打印出整个数据库的结构了。 下面是程序代码:Sub CreateTable (sDatabaseName As String, sCSVFileName As String, 
    sTableName As String) 
    Dim iTemp As Integer 
    '将控制权交还给操作系统,使其在创建数据库的同时能运行其它程序-别让
    你的计算机闲着! 
    iTemp = DoEvents() 
    '创建一个300X3数组 
    ReDim sTables(300, 3) As String 
    Dim sDataTypeLine As String ' 读取CSV文件,并将字段定义保存在数组中
    Call ReadTableDefinition(sCSVFileName, sTables()) Dim tbl As New TableDef 
    Dim fld As Field '打开数据库 
    Dim dbPersons As database 
    Set dbPersons = OpenDatabase(sDatabaseName & ".MDB", True) '记录下新的表单名 
    tbl.Name = sTableName '增添第一个字段
    Set fld = New Field 
    fld.Name = sTables(1, 1) 
    fld.Type = GetFieldType((sTables(1, 2))) 
    fld.Size = Val(sTables(1, 3)) 
    tbl.Fields.Append fld 
    dbPersons.TableDefs.Append tbl '增加其它的字段 
    Dim iNextCol As Integer 
    iNextCol = 1 
    Do While True 
    Set fld = New Field 
    iNextCol = iNextCol + 1 
    '到了表定义的底部则退出 
    If sTables(iNextCol, 1) = "***END***" Then 
    Exit Do 
    End If 
    fld.Name = sTables(iNextCol, 1) 
    fld.Type = GetFieldType((sTables(iNextCol, 2))) 
    fld.Size = Val(sTables(iNextCol, 3)) 
    '增加字段 
    dbPersons.TableDefs(tbl.Name).Fields.Append fld 
    'write field to VB data declaration file 
    'sDataTypeLine = Chr$(9) & sTables(iNextCol, 1) & " As " & 
    GetDataType((sTables(iNextCol, 2))) 
    'If GetDataType((sTables(iNextCol, 2))) = "String" Then 
    ' sDataTypeLine = sDataTypeLine & " * " & Val(sTables(iNextCol, 
    3)) 
    'End If 
    'Print #2, sDataTypeLine Loop 'close database 
    dbPersons.Close 
    End SubSub ReadTableDefinition (sTableFileName As String, sTableArray() As 
    String) ' sTableFileName为CSV文件名 
    ' sTableArray 是一个空的300行X3列的数组 
    ' 3列中储存字段名.数据类型及字段长度的信息 
    ' 一个表中可能会有多达300个字段,虽然这不太可能
    ' 你可以重新定义该数组' 打开CSV文件 
    Open sTableFileName For Input As #1 
    Dim sNextLine As String, sColName As String, sColType As String, 
    sColLength As String 
    Dim iFirstComma As Integer, iSecondComma As Integer, iThirdComma As 
    Integer, iTableArrayIndex As Integer 
    iTableArrayIndex = 0 
    ' 读取所有列的定义 
    Do While Not EOF(1) 
    Line Input #1, sNextLine 
    sNextLine = Trim$(sNextLine) 
    If sNextLine <> "" Then 
    If sNextLine <> "" And Mid$(sNextLine, 1, 2) <> "/*" Then 
    iFirstComma = InStr(1, sNextLine, ",") 
    iSecondComma = InStr(iFirstComma + 1, sNextLine, ",") 
    iThirdComma = InStr(iSecondComma + 1, sNextLine, ",") 
    iTableArrayIndex = iTableArrayIndex + 1 
    '获取字段名 
    sTableArray(iTableArrayIndex, 1) = Trim$(Mid$(sNextLine, 
    1, iFirstComma - 1)) 
    '获取字段类型
    sTableArray(iTableArrayIndex, 2) = UCase$(Trim$(Mid$(
    sNextLine, iFirstComma + 1, iSecondComma - iFirstComma - 1))) 
    '获取字段长度
    sTableArray(iTableArrayIndex, 3) = Trim$(Mid$(sNextLine, 
    iSecondComma + 1, iThirdComma - iSecondComma - 1)) 
    End If 
    End If 
    Loop Close #1 '标记数组结束 
    iTableArrayIndex = iTableArrayIndex + 1 
    sTableArray(iTableArrayIndex, 1) = "***END***" End Sub'转换数据类型
    Function GetFieldType(ByVal TypeName As String) As Integer
    Select Case LCase(TypeName) 
    Case "string" 
    GetFieldType = dbText 
    其它的代码自己完成吧
    End Select 
    End Function 
      

  2.   

    建立、改变及重构Access数据库
    ------------------------------------------------------------------------
    --------
    由VB提供的DataManager对于开发人员来讲并不是一件强大的工具。对于那些没有
    装Access数据库的人来说,在开发
    时建立.改变或重构数据库,以及载入/重载表单都是一件痛苦的事。此外
    DataManager不能让我们打印数据库的结构。让我们编一个小程序实现上述功能,然后工程结束后把它抛弃.首先可以用一个以逗号分隔的文本文件来储存表结构,如下面这个人员表。lPersonID,Long,,person's ID 
    sPersonFirstName,Text,20,person's first name 
    sPersonLastName,Text,20,person's last name 
    bIsAFunPerson,Boolean,,invite to a party? 
    iTypeOfJob,Integer,,0=None 1=Manual 2=Office 3=programmer etc. 
    iAge,Integer,,person's age该表有六列,每列独占一行。每行中用逗号分隔下列各项:字段名.字段类型.字
    段长度(如果不是字符型字段,就留空,仅用逗号
    分隔)及字段描述。如果你想在字段描述中使用逗号,你可以不用逗号分隔各项,
    换成Tab分隔。一个通用程序能读取这些文件并根据它们建立起数据库。这种方法,连同一些通用
    的导入/导出程序能大大加快程序开发的速度。举例 来说,你不能在DM中删除一
    个表的一列,但通过删除CSV文件中对一列的定义,然后重新运行构建数据库的程
    序,你就能轻松做到这一点。如果你想打印出数据库的结构,方法也很简单:用Excel读CSV文件,再将其粘贴到
    Word中,这样你就可以打印出整个数据库的结构了。 下面是程序代码:Sub CreateTable (sDatabaseName As String, sCSVFileName As String, 
    sTableName As String) 
    Dim iTemp As Integer 
    '将控制权交还给操作系统,使其在创建数据库的同时能运行其它程序-别让
    你的计算机闲着! 
    iTemp = DoEvents() 
    '创建一个300X3数组 
    ReDim sTables(300, 3) As String 
    Dim sDataTypeLine As String ' 读取CSV文件,并将字段定义保存在数组中
    Call ReadTableDefinition(sCSVFileName, sTables()) Dim tbl As New TableDef 
    Dim fld As Field '打开数据库 
    Dim dbPersons As database 
    Set dbPersons = OpenDatabase(sDatabaseName & ".MDB", True) '记录下新的表单名 
    tbl.Name = sTableName '增添第一个字段
    Set fld = New Field 
    fld.Name = sTables(1, 1) 
    fld.Type = GetFieldType((sTables(1, 2))) 
    fld.Size = Val(sTables(1, 3)) 
    tbl.Fields.Append fld 
    dbPersons.TableDefs.Append tbl '增加其它的字段 
    Dim iNextCol As Integer 
    iNextCol = 1 
    Do While True 
    Set fld = New Field 
    iNextCol = iNextCol + 1 
    '到了表定义的底部则退出 
    If sTables(iNextCol, 1) = "***END***" Then 
    Exit Do 
    End If 
    fld.Name = sTables(iNextCol, 1) 
    fld.Type = GetFieldType((sTables(iNextCol, 2))) 
    fld.Size = Val(sTables(iNextCol, 3)) 
    '增加字段 
    dbPersons.TableDefs(tbl.Name).Fields.Append fld 
    'write field to VB data declaration file 
    'sDataTypeLine = Chr$(9) & sTables(iNextCol, 1) & " As " & 
    GetDataType((sTables(iNextCol, 2))) 
    'If GetDataType((sTables(iNextCol, 2))) = "String" Then 
    ' sDataTypeLine = sDataTypeLine & " * " & Val(sTables(iNextCol, 
    3)) 
    'End If 
    'Print #2, sDataTypeLine Loop 'close database 
    dbPersons.Close 
    End SubSub ReadTableDefinition (sTableFileName As String, sTableArray() As 
    String) ' sTableFileName为CSV文件名 
    ' sTableArray 是一个空的300行X3列的数组 
    ' 3列中储存字段名.数据类型及字段长度的信息 
    ' 一个表中可能会有多达300个字段,虽然这不太可能
    ' 你可以重新定义该数组' 打开CSV文件 
    Open sTableFileName For Input As #1 
    Dim sNextLine As String, sColName As String, sColType As String, 
    sColLength As String 
    Dim iFirstComma As Integer, iSecondComma As Integer, iThirdComma As 
    Integer, iTableArrayIndex As Integer 
    iTableArrayIndex = 0 
    ' 读取所有列的定义 
    Do While Not EOF(1) 
    Line Input #1, sNextLine 
    sNextLine = Trim$(sNextLine) 
    If sNextLine <> "" Then 
    If sNextLine <> "" And Mid$(sNextLine, 1, 2) <> "/*" Then 
    iFirstComma = InStr(1, sNextLine, ",") 
    iSecondComma = InStr(iFirstComma + 1, sNextLine, ",") 
    iThirdComma = InStr(iSecondComma + 1, sNextLine, ",") 
    iTableArrayIndex = iTableArrayIndex + 1 
    '获取字段名 
    sTableArray(iTableArrayIndex, 1) = Trim$(Mid$(sNextLine, 
    1, iFirstComma - 1)) 
    '获取字段类型
    sTableArray(iTableArrayIndex, 2) = UCase$(Trim$(Mid$(
    sNextLine, iFirstComma + 1, iSecondComma - iFirstComma - 1))) 
    '获取字段长度
    sTableArray(iTableArrayIndex, 3) = Trim$(Mid$(sNextLine, 
    iSecondComma + 1, iThirdComma - iSecondComma - 1)) 
    End If 
    End If 
    Loop Close #1 '标记数组结束 
    iTableArrayIndex = iTableArrayIndex + 1 
    sTableArray(iTableArrayIndex, 1) = "***END***" End Sub'转换数据类型
    Function GetFieldType(ByVal TypeName As String) As Integer
    Select Case LCase(TypeName) 
    Case "string" 
    GetFieldType = dbText 
    其它的代码自己完成吧
    End Select 
    End Function 
      

  3.   

    建立、改变及重构Access数据库
    ------------------------------------------------------------------------
    --------
    由VB提供的DataManager对于开发人员来讲并不是一件强大的工具。对于那些没有
    装Access数据库的人来说,在开发
    时建立.改变或重构数据库,以及载入/重载表单都是一件痛苦的事。此外
    DataManager不能让我们打印数据库的结构。让我们编一个小程序实现上述功能,然后工程结束后把它抛弃.首先可以用一个以逗号分隔的文本文件来储存表结构,如下面这个人员表。lPersonID,Long,,person's ID 
    sPersonFirstName,Text,20,person's first name 
    sPersonLastName,Text,20,person's last name 
    bIsAFunPerson,Boolean,,invite to a party? 
    iTypeOfJob,Integer,,0=None 1=Manual 2=Office 3=programmer etc. 
    iAge,Integer,,person's age该表有六列,每列独占一行。每行中用逗号分隔下列各项:字段名.字段类型.字
    段长度(如果不是字符型字段,就留空,仅用逗号
    分隔)及字段描述。如果你想在字段描述中使用逗号,你可以不用逗号分隔各项,
    换成Tab分隔。一个通用程序能读取这些文件并根据它们建立起数据库。这种方法,连同一些通用
    的导入/导出程序能大大加快程序开发的速度。举例 来说,你不能在DM中删除一
    个表的一列,但通过删除CSV文件中对一列的定义,然后重新运行构建数据库的程
    序,你就能轻松做到这一点。如果你想打印出数据库的结构,方法也很简单:用Excel读CSV文件,再将其粘贴到
    Word中,这样你就可以打印出整个数据库的结构了。 下面是程序代码:Sub CreateTable (sDatabaseName As String, sCSVFileName As String, 
    sTableName As String) 
    Dim iTemp As Integer 
    '将控制权交还给操作系统,使其在创建数据库的同时能运行其它程序-别让
    你的计算机闲着! 
    iTemp = DoEvents() 
    '创建一个300X3数组 
    ReDim sTables(300, 3) As String 
    Dim sDataTypeLine As String ' 读取CSV文件,并将字段定义保存在数组中
    Call ReadTableDefinition(sCSVFileName, sTables()) Dim tbl As New TableDef 
    Dim fld As Field '打开数据库 
    Dim dbPersons As database 
    Set dbPersons = OpenDatabase(sDatabaseName & ".MDB", True) '记录下新的表单名 
    tbl.Name = sTableName '增添第一个字段
    Set fld = New Field 
    fld.Name = sTables(1, 1) 
    fld.Type = GetFieldType((sTables(1, 2))) 
    fld.Size = Val(sTables(1, 3)) 
    tbl.Fields.Append fld 
    dbPersons.TableDefs.Append tbl '增加其它的字段 
    Dim iNextCol As Integer 
    iNextCol = 1 
    Do While True 
    Set fld = New Field 
    iNextCol = iNextCol + 1 
    '到了表定义的底部则退出 
    If sTables(iNextCol, 1) = "***END***" Then 
    Exit Do 
    End If 
    fld.Name = sTables(iNextCol, 1) 
    fld.Type = GetFieldType((sTables(iNextCol, 2))) 
    fld.Size = Val(sTables(iNextCol, 3)) 
    '增加字段 
    dbPersons.TableDefs(tbl.Name).Fields.Append fld 
    'write field to VB data declaration file 
    'sDataTypeLine = Chr$(9) & sTables(iNextCol, 1) & " As " & 
    GetDataType((sTables(iNextCol, 2))) 
    'If GetDataType((sTables(iNextCol, 2))) = "String" Then 
    ' sDataTypeLine = sDataTypeLine & " * " & Val(sTables(iNextCol, 
    3)) 
    'End If 
    'Print #2, sDataTypeLine Loop 'close database 
    dbPersons.Close 
    End SubSub ReadTableDefinition (sTableFileName As String, sTableArray() As 
    String) ' sTableFileName为CSV文件名 
    ' sTableArray 是一个空的300行X3列的数组 
    ' 3列中储存字段名.数据类型及字段长度的信息 
    ' 一个表中可能会有多达300个字段,虽然这不太可能
    ' 你可以重新定义该数组' 打开CSV文件 
    Open sTableFileName For Input As #1 
    Dim sNextLine As String, sColName As String, sColType As String, 
    sColLength As String 
    Dim iFirstComma As Integer, iSecondComma As Integer, iThirdComma As 
    Integer, iTableArrayIndex As Integer 
    iTableArrayIndex = 0 
    ' 读取所有列的定义 
    Do While Not EOF(1) 
    Line Input #1, sNextLine 
    sNextLine = Trim$(sNextLine) 
    If sNextLine <> "" Then 
    If sNextLine <> "" And Mid$(sNextLine, 1, 2) <> "/*" Then 
    iFirstComma = InStr(1, sNextLine, ",") 
    iSecondComma = InStr(iFirstComma + 1, sNextLine, ",") 
    iThirdComma = InStr(iSecondComma + 1, sNextLine, ",") 
    iTableArrayIndex = iTableArrayIndex + 1 
    '获取字段名 
    sTableArray(iTableArrayIndex, 1) = Trim$(Mid$(sNextLine, 
    1, iFirstComma - 1)) 
    '获取字段类型
    sTableArray(iTableArrayIndex, 2) = UCase$(Trim$(Mid$(
    sNextLine, iFirstComma + 1, iSecondComma - iFirstComma - 1))) 
    '获取字段长度
    sTableArray(iTableArrayIndex, 3) = Trim$(Mid$(sNextLine, 
    iSecondComma + 1, iThirdComma - iSecondComma - 1)) 
    End If 
    End If 
    Loop Close #1 '标记数组结束 
    iTableArrayIndex = iTableArrayIndex + 1 
    sTableArray(iTableArrayIndex, 1) = "***END***" End Sub'转换数据类型
    Function GetFieldType(ByVal TypeName As String) As Integer
    Select Case LCase(TypeName) 
    Case "string" 
    GetFieldType = dbText 
    其它的代码自己完成吧
    End Select 
    End Function 
      

  4.   

    ALTER TABLE TableName ADD COLUMN FieldName String
      

  5.   

    此示例在员工表中增加 Currency 数据类型的一个工资字段。Sub AlterTableX1() Dim dbs As Database '在您的计算机中修改此行使其正确指到 Northwind 
    '的路径。
    Set dbs = OpenDatabase("Northwind.mdb") '添加工资字段至员工表中,
    '并且设置为 Currency 数据类型。
    dbs.Execute "ALTER TABLE Employees " _
    & "ADD COLUMN Salary CURRENCY;" dbs.CloseEnd Sub此示例从员工表中删除工资字段。Sub AlterTableX2() Dim dbs  As Database '在您的计算机中修改此行使其正确指到 Northwind 
    '的路径。
    Set dbs = OpenDatabase("Northwind.mdb") '从员工表中删除工资字段。
    dbs.Execute "ALTER TABLE Employees " _
    & "DROP COLUMN Salary;" dbs.CloseEnd Sub此示例在订单表中增加一外部键。这个外部键是基于员工编号字段和引用至员工的表中的员工编号字段。此示例中,在 REFERENCES 
    子句中并没有列出员工表的员工编号字段,这是因为员工编号为员工表的主键。Sub AlterTableX3() Dim dbs As Database '在您的计算机中修改此行使其正确指到 Northwind 的路径。
    Set dbs = OpenDatabase("Northwind.mdb") '在订单表中添加外部键。
    dbs.Execute "ALTER TABLE Orders " _
    & "ADD CONSTRAINT OrdersRelationship " _
    & "FOREIGN KEY (EmployeeID) " _
    & "REFERENCES Employees (EmployeeID);" dbs.CloseEnd Sub此示例从订单表中删除外部键。SubSub() Dim dbs As Database '在您的计算机中修改此行使其正确指到 Northwind 的路径。
    Set dbs = OpenDatabase("Northwind.mdb") '由订单表中删除 OrdersRelationship 外部键。
    dbs.Execute "ALTER TABLE Orders " _
    & "DROP CONSTRAINT OrdersRelationship;" dbs.CloseEnd Sub
      

  6.   

    使用 ALTER TABLE 语句,可用多种不同方法更改当前已存在的表:?使用 ADD COLUMN 在表中添加新的字段。需要指定字段名、数据类型、还可以 (对文本和二进制字段)指定长度。 例如,下列语句在员工表中增加一 25 个字符的、名为 Notes 的文本字段:ALTER TABLE Employees ADD COLUMN Notes TEXT(25)也可以定义此字段的索引。关于单一字段索引的详细信息,请参阅CONSTRAINT 子句主题。如果对一字段指定 NOT NULL,则在这字段中添加的新记录必须有有效的数据。?使用 ADD CONSTRAINT 添加多重字段索引。关于多重字段索引的详细信息,请参阅 CONSTRAINT 子句主题。
    ?使用 DROP COLUMN 删除字段。只要指定欲删除的字段名即可。
    ?使用 DROP CONSTRAINT 删除多重字段索引。只要在 CONSTRAINT 保留字后面指定索引名即可。注意?不能同时添加或删除一个以上的字段或索引。
    ?可以使用 CREATE INDEX 语句添加单一或多重字段索引至一表,也可以用 ALTER TABLE 或 DROP语句来删除用 ALTER TABLE 或 CREATE INDEX 创建的索引。
    ?可以在单一字段上使用 NOT NULL,或在名为 CONSTRAINT 的子句中使用 NOT NULL,这个名为 CONSTRAINT 的子句应用于单一字段或名为 CONSTRAINT 的多重字段。不管怎样,只能在一字段上使用 NOT NULL 一次,否则将发生执行时的错误。
      

  7.   

    dbcontrols(泰山__帮助你使我感到快乐.)说的Alert Table 语句是最好的办法!
    别人都是乱七八糟,简单问题复杂化!不过你在加入字段时,该字段应该是可以为空的。不然就出问题!