http://www.wzjcw.net/vbgood/taishan/index.html【迷你数据库浏览器】源代码。添加、删除表、列,点击列标头排序,ADO对象,DataGrid操作
解决方案 »
- 编写五子棋游戏中,向棋盘走子这一步被卡住了,高手帮忙
- 自动编号类型数据作为select的参数,查询时出问题!如何写这个SQL语句?急!在线等,揭贴!
- 【问】如何在窗体运行时设置ShowInTaskBar属性?
- VB成绩统计程序
- 高分请教,怎么样对dbase III文件库进行操作,望各位能人帮忙,这个问题我在这里已经有一个月没有得到解答了.望各位朋友共同参与!
- 求助:编译器
- 如何在DBGrid中实现Combo功能
- 获取文件名路径问题,请高手指教!
- 位图菜单的问题
- VB的四个问题?
- 请问 Seedling(叶子):你写过关于图像抖动处理的程序吗?或有相关的资料吗?
- 求vb对xls文件操作的编程代码!
------------------------------------------------------------------------
--------
由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
------------------------------------------------------------------------
--------
由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
------------------------------------------------------------------------
--------
由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
'的路径。
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
?使用 DROP COLUMN 删除字段。只要指定欲删除的字段名即可。
?使用 DROP CONSTRAINT 删除多重字段索引。只要在 CONSTRAINT 保留字后面指定索引名即可。注意?不能同时添加或删除一个以上的字段或索引。
?可以使用 CREATE INDEX 语句添加单一或多重字段索引至一表,也可以用 ALTER TABLE 或 DROP语句来删除用 ALTER TABLE 或 CREATE INDEX 创建的索引。
?可以在单一字段上使用 NOT NULL,或在名为 CONSTRAINT 的子句中使用 NOT NULL,这个名为 CONSTRAINT 的子句应用于单一字段或名为 CONSTRAINT 的多重字段。不管怎样,只能在一字段上使用 NOT NULL 一次,否则将发生执行时的错误。
别人都是乱七八糟,简单问题复杂化!不过你在加入字段时,该字段应该是可以为空的。不然就出问题!