Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:数据库    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  用标准控件实现Access数据库的导入导出  
 
用Delphi标准控件实现Access数据库的导入导出

Access 数据库是最常用的桌面数据库,关于用DELPHI 操作ACCESS的数据导入导出的文章也有不少,但大部分都是以第三方控件或者直接操作ADOX来操作。如果对ACCESS内置的VB编程熟悉的话,一定会使用过Docmd这个命令,我以前曾用ACCESS内置的VB给人写过程序,因此非常喜欢Docmd这个命令的强大功能,它能实现如数据库与其它任何数据格式的导入,导出,数据库表,查询的创建,并能直接打印ACCESS报表等等,但是如何在DELPHI中操作Docmd呢?。

也许你已经注意到 DELPHI中Server页中有一个AccessApplication控件,但DELPHI中几乎没有关于Server页中对象的使用帮助,因此我平时也很少使用,有一次因要对客户的软件升级(数据库也要改变),而客户的软件中有大量的数据是不能丢弃的,这就存在将一个Access数据库中的数据导入另一个Access数据库中,当然可以直接用Access数据库中的导入工具操作,但相当麻烦,同时不能保证操作的正确性,因客户不能中途停止对软件的使用(零售),另外也显得太不专业是不是^_^,后来发现用TAccessApplication也能操作Docmd,问题就显得简单了,我写了一个更新程序,升级只用了几秒钟,一切都OK了,下面是操作简要示例:

1、 将AccessApplication控件拖到窗体上,就创建了一个名叫AccessApplication1的对象;
2、 打开当前数据库
AccessApplication1.OpenCurrentDatabase(‘当前数据路径’,false,'');
3、 一般数据库导入(导出)
AccessApplication1.docmd.TransferDatabase(TransferType, DatabaseType, DatabaseName, ObjectType, Source, Destination, StructureOnly, StoreLogin)

TransferType 可选 AcDataTransferType。

AcDataTransferType 可以是下列 AcDataTransferType 常量之一:
acExport
acImport 默认
acLink

如果将该参数留空,将采用默认常量 (acImport)。

注意 Microsoft Access 项目 (.adp) 不支持 acLink 转换类型。
DatabaseType 可选 Variant 型。字符串表达式,表示一类可用来导入、导出或链接数据的数据库类型的名称。

数据库的类型

Microsoft Access(默认值)
Jet 2.x
Jet 3.x
dBase III
dBase IV
dBase 5.0
Paradox 3.x
Paradox 4.x
Paradox 5.x
Paradox 7.x
ODBC 数据库

在“宏”窗口中 TransferDatabase 操作的“数据库类型”操作参数的列表中可以查看数据库类型。
DatabaseName 可选 Variant 型。字符串表达式,表示要用来导入、导出或链接数据的数据库的完整名称(包括路径)。

ObjectType 可选 AcObjectType。
AcObjectType 可以是下列 AcObjectType 常量之一:
acDataAccessPage
acDefault
acDiagram
acForm
acFunction
acMacro
acModule
acQuery
acReport
acServerView
acStoredProcedure
acTable 默认

该参数是指要对其数据进行导入、导出或链接的对象的类型。仅当在两个 Microsoft Access 数据库之间导入或导出数据时,才可以指定 acTable 外的对象。如果要将 Microsoft Access 选择查询的结果导出为另一类型的数据库,请指定 acTable 参数。
如果将该参数留空,将采用默认常量 (acTable)。

注意 显示在该参数“自动列表成员”列表中的 acDefault 常量对于该参数是无效的。必须选择上述常量列表中的常量。
Source 可选 Variant 型。字符串表达式,表示要对其数据进行导入、导出或链接的对象的名称。
Destination 可选 Variant 型。字符串表达式,表示目标数据库中所导入、导出或链接的对象的名称。
StructureOnly 可选 Variant 型。使用 True (–1) 可以只导入或导出数据库表的结构。使用 False (0) 将导入或导出表的结构及其数据。如果将该参数留空,将采用默认值 (False)。
StoreLogin 可选 Variant 型。使用 True 可以存储数据库链接表的连接字符串中、用于 ODBC 数据库的登录标识 (ID) 和密码。如果进行了这种设置,则不必在每次打开表时都进行登录。如果不想存储登录 ID 和密码,则可以使用 False。如果将该参数留空,将采用默认值 (False)。该参数仅可用于 Visual Basic。

说明
有关该操作及其参数如何使用的详细信息,请参阅该操作的主题。
语法中的可选参数允许留空,但是必须包含参数的逗号。如果将位于末端的参数留空,则在指定的最后一个参数后面不需使用逗号。
ODBC 数据库的管理员可以禁用 saveloginid 参数所提供的功能,要求所有的用户在每次连接到 ODBC 数据库时,都必须输入登录标识和密码。
如: AccessApplication1.DoCmd.TransferDatabase(acImport,'Microsoft Access',‘目标数据库路径’, acQuery,‘要导出的表或查询’,‘导出时在目标数据库中的名称’,false,false );

4、表格数据的导入(导出)
AccessApplication1.DoCmd.TransferSpreadsheet(TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range, UseOA);

TransferType 可选 AcDataTransferType。
AcDataTransferType 可以是下列 AcDataTransferType 常量之一:
acExport
acImport 默认
acLink
如果将该参数留空,将采用默认常量 (acImport)。
SpreadsheetType 可选 AcSpreadSheetType。
AcSpreadSheetType 可以是这些 AcSpreadSheetType 常量之一:
acSpreadsheetTypeExcel3
acSpreadsheetTypeExcel4
acSpreadsheetTypeExcel5
acSpreadsheetTypeExcel7
acSpreadsheetTypeExcel8 默认
acSpreadsheetTypeExcel9 默认
acSpreadsheetTypeLotusWJ2 - 仅适用于日文版
acSpreadsheetTypeLotusWK1
acSpreadsheetTypeLotusWK3
acSpreadsheetTypeLotusWK4
注意 可以链接 Lotus 1-2-3 电子表格文件中的数据,但是这些数据在 Microsoft Access 中是只读的。可以导入自和链接到 Lotus .WK4 文件,但是不能将 Microsoft Access 数据导出为这种电子表格格式。Microsoft Access 也不再支持使用该方法对 Lotus .WKS 或 Microsoft Excel 2.0 版电子表格数据的导入、导出或链接。

如果将该参数留空,将采用默认常量 (acSpreadsheetTypeExcel8)。
TableName 可选 Variant 型。字符串表达式,表示要向其中导入电子表格数据、从中导出电子表格数据或链接电子表格数据的 Microsoft Access 表的名称,或要将其结果导出到电子表格的 Microsoft Access 选择查询的名称。
FileName 可选 Variant 型。字符串表达式,表示要从其中导入、导出到或链接到的电子表格的名称与路径。
HasFieldNames 可选 Variant 型。使用 True (-1) 可以在导入或链接时,将电子表格中的第一行用作字段名。使用 False (0) 可以将数据表第一行看成普通数据。如果将该参数留空,则采用默认值 (False)。在将 Microsoft Access 表或选择查询数据导出到电子表格中时,无论为该参数输入了何值,字段名称都将插入到电子表格的第一行中。

Range 可选 Variant 型。字符串表达式,表示电子表格中单元格的有效范围或范围名称。该参数仅可用于导入。若要导入整个电子表格,请将该参数留空。导出到电子表格时,必须将该参数留空。如果输入了一个范围,导出将失败。

UseOA 可选 Variant 型
5、 文本数据的导入(导出)

AccessApplication1.DoCmd.TransferText(TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)

TransferType 可选 AcTextTransferType。
AcTextTransferType 可以是下列 AcTextTransferType 常量之一:
acExportDelim
acExportFixed
acExportHTML
acExportMerge
acImportDelim 默认
acImportFixed
acImportHTML
acLinkDelim
acLinkFixed
acLinkHTML

如果将该参数留空,则采用默认常量 (acImportDelim)。

注意 可以链接到文本文件或 HTML 文件中的数据上,但数据在 Microsoft Access 中是只读的。

在 Microsoft Access 项目 (.adp) 中仅支持 acImportDelim、acImportFixed、acExportDelim、acExportFixed 或 acExportMerge 转换类型。

SpecificationName 可选 Variant 型。字符串表达式,表示在当前数据库中创建并保存的导入或导出规格的名称。对于固定长度的文本文件, 必须指定参数或使用 schema.ini 文件,该文件还必须保存在导入、链接或导出的文本文件的同一个文件夹中。若要创建一个方案文件, 可使用文本导入/导出向导创建此文件。对于分隔的文本文件和 Microsoft Word 邮件合并数据文件,可以将该参数留空,以便选择默认的导入/导出规格。

TableName 可选 Variant 型。字符串表达式,表示要向其导入文本数据、从中导出文本数据或链接文本数据的 Microsoft Access 表的名称,或者要将其结果导出到文本文件的 Microsoft Access 查询的名称。
FileName 可选 Variant 型。字符串表达式,表示要从中导入、导出到或链接到的文本文件的完整名称(包括路径)。
HasFieldNames 可选 Variant 型。使用 True (-1) 可以在导入、导出或链接时,使用文本文件中的第一行作为字段名。使用 False (0) 可以将文本文件中的第一行看成普通数据。如果将该参数留空,则采用默认值 (False)。该参数将被 Microsoft Word 邮件合并数据文件忽略,这些文件的第一行中必须包含字段名。
HTMLTableNam 可选 Variant 型。字符串表达式,表示要导入或链接的 HTML 文件中的表或列表的名称。除非 transfertype 参数设为 acImportHTML 或 acLinkHTML,否则该参数将被忽略。如果将该参数留空,则导入或链接 HTML 文件中的第一个表或列表。如果 HTML 文件中存在

标记,则 HTML 文件的表或列表名称取决于该标记指定的文本。如果没有 标记,则名称由 标记指定的文本决定。如果有多个表或列表具有相同的名称,则 Microsoft Access 将通过给每个表或列表名称结尾添加一个数字,如“雇员1”和“雇员2”来区分它们。<P>CodePage 可选 Variant 型。Long 型值,用于标识代码页的字符集。<P>6、 将指定的整个 Microsoft SQL Server 数据库传输给另一个 SQL Server 数据库。<BR> AccessApplication1.DoCmd.TransferSQLDatabase(Server, Database, UseTrustedConnection, Login, Password, TransferCopyData)<BR>Server 必需 Variant 型。数据库要传输到的 SQL Server 的名称。<BR>Database 必需 Variant 型。指定服务器上的新数据库的名称。<BR>UseTrustedConnection 可选 Variant 型。如果为 True,则当前连接是使用具有系统管理员权限的身份登录。如果该参数不为 True,则必须在 Login 和 Password 参数中指定登录名和密码。<BR>Login 可选 Variant 型。在目标服务器上具有系统管理员权限身份的登录名。如果 UseTrustedConnection 为 True,则忽略该参数。<BR>Password 可选 Variant 型。在 Login 中指定的登录密码。如果 UseTrustedConnection 为 True,则忽略该参数。<P>TransferCopyData 可选 Variant 型。如果为 True,则数据库中的所有数据都传输到目标数据库中。如果该参数不为 True,则仅传输数据库架构。<BR>说明<P>下列条件必须满足,否则就会发生错误:<BR>• 当前和目标服务器为 SQL Server 7.0 版或更高版本。<BR>• 用户对目标服务器拥有系统管理员的登录权限。<BR>• 目标服务器上不存在同名目标数据库。<BR>7、在使用完后要用AccessApplication1.CloseCurrentDatabase关闭对象;<BR>当然用Docmd可以进行ACCESS中的大部分操作,有兴趣的话可以在ACCESS中的帮助查看关于Docmd的用法,你会有意外的收获。 </td> </tr> <tr> <td> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> </td> </tr> <tr> <td align="center" height="5"> <hr style="color: #cc0000;" size="1"> </td> </tr> <tr> <td> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mainTxt"> <tr bordercolor="#CC6666"> <td align="center" height="4"></td> </tr> <tr> <td align="center" class="ItemLight"> 在线服务QQ:99923144 Delphi程序员QQ群(139442) </td> </tr> <tr> <td align="center">Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站</td> </tr> <tr> <td align="center" height="6"> </td> </tr> </table> </td> </tr> <tr> <td> </td> </tr> </table> </body> </html>