关于VB6+ACCESS2000的问题,承诺至少加至100分

isprogramer 2001-11-19 09:29:33
我设计了一个程序让一个文本文件导入数据库,这个文本文件的每一行是有固定规律的,行数每次大约有几百到数千行不等,导入数据库结束后我发现某些时候导入得正确,某些时候却不正确(不正确的都是每条记录正确,但是记录次序不正确或者会丢失记录),我反复测试发现有以下情况会导入数据库正确:
1、如果我单步跟踪,则导入正确
2、如果我执行的同时用ACCESS2000把MDB数据库打开(不打开表),则导入正确
请问这是不是微软产品的一个BUG,或者能有什么方法解决呢?
...全文
181 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
isprogramer 2002-02-19
  • 打赏
  • 举报
回复
问题本身已经解决了,我问了许多人,也许就像jafi(加肥猫[路德一族])所说的一样,可能access就有这个问题。
icbcnbxs 2001-11-21
  • 打赏
  • 举报
回复
导入还要次序??建个额外的ID字段就可以了吧,读一行把ID自增1
alinker 2001-11-21
  • 打赏
  • 举报
回复
我以前用DAO做过,一点问题都没,只不过TXT文件不大,每次只几K而已
icy_csdn 2001-11-21
  • 打赏
  • 举报
回复
刚才忘记说.ini规格文件的设置了,告诉你吧!!!

初始化Text和HTML Data Source 驱动程序
Text Data源和HTML数据源使用同一个数据库驱动程序。

当安装 Text Data Source 数据库驱动程序时,设置程序会在引擎的 Windows 注册表和 ISAM Formats子键中写入一些缺省值。不要直接修改这些设置;请使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Text Data Source 数据库驱动程序的初始化和 ISAM Formats 设置。

Text Data Source 的初始化设置
Jet\3.5\Engines\Text 文件夹包含用来外部访问文本数据文件的 Mstext35.dll 驱动程序的初始化设置。文件夹中项目的典型设置显示於下列示例。

win32=<path>\ mstext40.dll

MaxScanRows=25

FirstRowHasNames=True

CharacterSet= ANSI

Format=CSVDelimited

Extensions= txt,csv,tab,asc

ExportCurrencySymbols=Yes


Microsoft Jet 数据库引擎使用如下的文本文件夹项目。

项目 说明
win32 Mstext35.dll 的位置。这个完整路径在安装时就已确定。在 Windows 95 和Windows NT 4.0 中的值是字符串类型,而在 Windows NT 3.51 中是 REG_SZ 类型。
MaxScanRows 当猜测字段类型时被扫描的行数。如果设成 0,整个文件将被搜寻。缺省值是 25。 在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型,而在 Windows NT 3.51 中是 REG_DWORD 类型。
FirstRowHasNames 指示表的第一行是否包含字段名的二进制值。01 的值指示在导入期间将从第一行取得字段名。00 值指示在第一行中没有字段名。缺省值是 1。 在 Windows 95 和 Windows NT 4.0 中的值是二进制类型,而在 Windows NT 3.51 中是 REG_BINARY 类型。
CharacterSet 如何存储文本页的指示器。可能的设置是:
ANSI: ANSI代码页。 AnsiToUnicode和UnicodeToAnsi的转换完成。
OEM: OEM代码页。OemToUnicode和 UnicodeToOem 的转换完成。
Unicode 代码页的转换未执行。
<decimal number>:特殊字符集的代码页号。与Unicode的互相转换即将完成。
OEM 为缺省值。在 Windows 95 和Windows NT 4.0 中的值是字符串类型,而在 Windows NT 3.51 中是 REG_SZ 类型。

Format 可为下列任一值:TabDelimited、CSVDelimited、Delimited(<单一字符>)。在 Delimited 格式下的单一字符分隔符可以是除了双引号以外 (") 的任何单一字符。缺省值是 CSVDelimited。在 Windows 95 和Windows NT 4.0 中的值是字符串类型,而在 Windows NT 3.51 中是 REG_SZ 类型。
Extensions 当要找寻基于文本的数据时,供浏览的文件的扩展名。缺省值是 txt、csv、tab 和 asc。在 Windows 95 和Windows NT 4.0 中的值是字符串类型,而在 Windows NT 3.51 中是 REG_SZ 类型。
ExportCurrencySymbols 指示当货币字段导出时是否包含相应的货币符号的二进制值。01 的值指示将包含符号。00 的值指示只导出数值数据。缺省值是 1。 在 Windows 95 和 Windows NT 4.0 中的值是二进制类型,而在 Windows NT 3.51 中是 REG_BINARY 类型。


Text Data Source ISAM 格式
Jet\4.0\ISAM Formats\Text 文件夹包含下列项目。



项目
Windows NT 3.51 类型 Windows 95 and Windows NT 4.0 类型


Engine REG_SZ String Text
ExportFilter REG_SZ String Text Files(*.txt;*.csv;*.tab;*.asc)
ImportFilter REG_SZ String Text Files(*.txt;*.csv;*.tab;*.asc)
CanLink REG_BINARY Binary 01
OneTablePerFile REG_BINARY Binary 01
IsamType REG_DWORD DWORD 2
IndexDialog REG_BINARY Binary 00
CreateDBOnExport REG_BINARY Binary 00
ResultTextImport REG_SZ String 从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink REG_SZ String 在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport REG_SZ String 从当前数据库将数据导入正文文件。如果导入已存在的文件,这次处理将改写已存在的数据。
SupportsLongNames REG_BINARY Binary 01


--------------------------------------------------------------------------------

注意 当更改 Windows 注册表设置时,要使新设置生效,必须先退出,然后重新激活数据库引擎。


--------------------------------------------------------------------------------

HTML 导入 ISAM 格式
Jet\3.5\ISAM Formats\HTML Import 文件夹包含下列项目。



项目
Windows NT 3.51 类型 Windows 95 and Windows NT 4.0 类型


Engine REG_SZ String Text
ImportFilter REG_SZ String HTML 文件(*.ht*)
CanLink REG_BINARY Binary 01
OneTablePerFile REG_BINARY Binary 00
IsamType REG_DWORD DWORD 2
IndexDialog REG_BINARY Binary 00
CreateDBOnExport REG_BINARY Binary 00
ResultTextImport REG_SZ String 从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink REG_SZ String 在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
SupportsLongNames REG_BINARY Binary 01


--------------------------------------------------------------------------------

注意 当更改 Windows 注册表设置时,要使新设置生效,必须先退出,然后重新激活数据库引擎。


--------------------------------------------------------------------------------

HTML 导出 ISAM 格式
Jet\3.5\ISAM Formats\HTML Export 文件夹包含下列项目。



项目
Windows NT 3.51 类型 Windows 95 and Windows NT 4.0 类型


Engine REG_SZ String Text
ExportFilter REG_SZ String HTML 文件(*.htm)
CanLink REG_BINARY Binary 00
OneTablePerFile REG_BINARY Binary 01
IsamType REG_DWORD DWORD 2
IndexDialog REG_BINARY Binary 00
CreateDBOnExport REG_BINARY Binary 00
ResultTextExport REG_SZ String 从当前数据库将数据导入正文文件。如果导入已存在的文件,这次处理将改写已存在的数据。
SupportsLongNames REG_BINARY Binary 01


--------------------------------------------------------------------------------

注意 当更改 Windows 注册表设置时,要使新设置生效,必须先退出,然后重新激活数据库引擎。


--------------------------------------------------------------------------------

定制 Text 和 HTML 数据的Schema.ini 文件
若要读入、导入、或导出文本数据,在 .ini 文件中除了包含文本 ISAM 信息以外,还需要创建一个 Schema.ini 文件。Schema.ini 包含文本数据源的特性:正文文件如何格式化、在导入时如何读入、和文件的缺省导出格式。下列示例显示定宽文件 Filename.txt 的版面设计。

[Filename.txt]

ColNameHeader=False

Format=FixedLength

FixedFormat= RaggedEdge

MaxScanRows=25

CharacterSet=OEM

Col1=columnname Char Width 24

Col2=columnname2 Date Width 9

Col3=columnname7 Float Width 10

Col4=columnname8 Integer Width 10

Col5=columnname9 LongChar Width 10


类似地,分隔文件的格式指定如下:

[Delimit.txt]

ColNameHeader=True

Format=Delimited()

MaxScanRows=0

CharacterSet=OEM

Col1=username char width 50

Col2=dateofbirth Date width 9


如果将数据导入分隔的正文文件,该文件的格式同样指定为:

[Export:My Special Export]

ColNameHeader=True

Format=TabDelimited

MaxScanRows=25

CharacterSet=OEM

DateTimeFormat=mm.dd.yy.hh.mm.ss

CurrencySymbol=Dm

CurrencyPosFormat=0

CurrencyDigits=2

CurrencyNegFormat=0

CurrencyThousandSymbol=,

CurrencyDecimalSymbol=.

DecimalSymbol=,

NumberDigits=2

NumberLeadingZeros=0

TextDelimeter=”


My Special Export 示例引用了一个特定的导出选项;可以在连接时指定导出选项的任何变化。最后一个示例也对应于一个数据源名 (DSN) ,这个数据源名 (DSN) 可在连接时有选择地传送。所有三种格式部分均可包含在一个 .ini 文件中。

Microsoft Jet 数据库引擎使用如下的 Schema.ini 项目。

项目 说明
ColNameHeader 可设置为 True (表示数据的第一个记录为字段名)或 False。
Format 可为下列任一值:TabDelimited、CSVDelimited、Delimited(<单一字符>)。在 Delimited 格式下的单一字符分隔符可以是除了双引号以外 (") 的任何单一字符。
FixedFormat 只用于Format是 FixedLength,可设置为以下值之一:RaggedEdge或TrueFixedLength.
RaggedEdge允许以一个Carriage Return字符作为行的终止。

TrueFixedLength要求每一行是一个精确的字符数,任何一个不在行边界的Carriage Return字符被视为是插入在一个字段里的。

若无该设置,缺省值为RaggedEdge.

MaxScanRows 当猜测字段类型时被扫描的行数。如果设成 0,整个文件将被搜寻。
CharacterSet 可设为OEM或ANSI或UNICODE,或一个有效代码页的十进制值,显示源文件的字符集。
DateTimeFormat 可设置为指示日期和时间的格式字符串。如果在导入/导出中所有的日期/时间字段使用同样的格式来处理,就应当指定此项。除了 AM 和 PM 外,所有 Microsoft Jet 数据库引擎格式都被支持。格式字符串不存在时,就使用 Windows“控制面板”的短日期图片和时间选项。
CurrencySymbol 指示正文文件中货币值使用的的货币符号。示例中包含的美元符号 ($) 和 Dm。如果此项目不存在,将使用 Windows “控制面板”的缺省值。
CurrencyPosFormat 可设置为下列任一值:
货币符号在前且没有分隔($1)

货币符号在后且没有分隔(1$)

货币符号在前且有一分隔符($ 1)

货币符号在后且有一分隔符(1 $)

如果此项目不存在,将使用 Windows “控制面板”的缺省值。

CurrencyDigits 指定用来作货币量小数部分的十进制数。如果此项目不存在,将使用 Windows “控制面板”的缺省值。
CurrencyNegFormat 可设置为下列值之一:
($1)

–$1

$–1

$1–

(1$)

–1$

1–$

1$–

–1 $

–$ 1

1 $–

$ 1–

$ –1

1– $

($ 1)

(1 $)

此示例的目的为显示美元符号,但是在实际程序之中,它应被相应的 CurrencySymbol 值取代。如果此项目不存在,将使用 Windows “控制面板”的缺省值。

CurrencyThousandSymbol 指示在正文文件中使用哪一个字符符号来分隔货币值的千位。如果此项目不存在,将使用 Windows “控制面板”的缺省值。
CurrencyDecimalSymbol 可以设置任一字符来分隔货币量的整数与小数部分。如果此项目不存在,将使用 Windows “控制面板”的缺省值。
DecimalSymbol 可以设置任一字符来分隔一个数的整数与小数部分。如果此项目不存在,将使用 Windows “控制面板”的缺省值。
NumberDigits 指示一个数的小数部分的十进制数。如果此项目不存在,将使用 Windows “控制面板”的缺省值。
NumberLeadingZeros 指定一个小于 1 而且大于 -1 的十进制数是否应该包含前导零;此值可为 False (没有前导零)或 True。
Col1, Col2, ... 列出正文文件中被读入的字段。此项的格式为:
Coln=columnName type [Width #]

columnName:嵌有空格的字段名应括在括号中。

Type:可以是 Bit, Byte, Short, Long, Decimal, Currency, Single, Double, DateTime.Binary, OLE, Text, or Memo.

除此之外,还支持下列 ODBC 文本驱动程序类型:

Char(同 Text)
Float(同 Double)
Integer(同 Short)
LongChar(同 Memo)
Date 日期格式

在Memo类型中,一个附加的格式标记[Attribute Hyperlink]可用于指明Access中激活的URL’s列。

在十进制类型中应使用附加格式标记[Scale #] Precision #] should be used.

TextDelimiter 可设置为单个的字符用来限定包含其他特殊字符的字符串。
E.g.“abc”,”xyz,pqr”,”hij”

若无入口,缺省值为两次引用。入口为”none”字符串则无定界符。

:)祝你开心
icy_csdn 2001-11-21
  • 打赏
  • 举报
回复
用ACCESS2000的application对象的宏语句可以实现,如:
DoCmd.TransferText acImportDelim, "e:\score.ini", "test", "e:\score.txt", True, ""
你可以在Access2000中建立一个transfertext的宏,然后转换成VB代码可以参考一下。

以下是Access2000帮助中的:
TransferText 操作


用 TransferText 操作可以在当前的 Microsoft Access 数据库(.mdb) 或 Access 项目 (.adp) 与文本文件之间导入或导出文本。还可以将文本文件中的数据链接到当前的 Access 数据库中。通过链接的文本文件,在允许字处理程序完全访问该文本文件的同时还可以用 Microsoft Access 查看该文本数据。也可以导入、导出或链接到 HTML 文件 (*.html) 中的 (*.html) 表或列表中。

注意 如果 Microsoft Access 链接到文本文件或 HTML 文件中的数据,则该数据是只读的。

设置

TransferText 操作具有以下参数:

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
:)祝你开心!
isprogramer 2001-11-21
  • 打赏
  • 举报
回复
这样吧,大家有没有文本入库的好方法。
我用的方法可能比较笨,大概就是用input line #f,tstring依次读出每一行文本,然后用客户约定的格式取,由于每一行文本中都有汉字,由于VB中unicode编码的问题,不能用left(),mid()这些函数,我写了个函数,转换成byte类型后取的,每次表记录.addnew,然后把取出的文本写入字段。
还有,客户的文本每一行字段的间隔不是用“|”等特殊字符间隔的,是约定的长度,比如从2——40代表单位名称等。
有没有好方法使入库容易些?
伽楠 2001-11-21
  • 打赏
  • 举报
回复
最好把你的文本文件贴出来,看一下
jafi 2001-11-20
  • 打赏
  • 举报
回复
有一个办法,大概可行,给我发邮件吧,我发一个示例给你。
mrjafi@21cn.com
lty 2001-11-20
  • 打赏
  • 举报
回复
记录次序不重要吧?不过不知道你是怎样写的代码。一般的文本文件可以直接导入导数据库中,并不需要写代码呀!
Apin 2001-11-20
  • 打赏
  • 举报
回复
sdfsdfsdf
heyijpn 2001-11-20
  • 打赏
  • 举报
回复
建议先导入excel,然后导入access
白掌柜 2001-11-20
  • 打赏
  • 举报
回复
split,好像是这个。
isprogramer 2001-11-20
  • 打赏
  • 举报
回复
不行,客户要求必须是.TXT文件。
有什么办法?
isprogramer 2001-11-20
  • 打赏
  • 举报
回复
文本的每一行是中英文都有的。
icy_csdn 2001-11-19
  • 打赏
  • 举报
回复
楼上说得很对啊,用Access的application对象的DoCmd.TransferSpreadsheet这个方法可以很轻松导入到数据库中!
:)祝你开心!
jafi 2001-11-19
  • 打赏
  • 举报
回复
必须是txt文件吗?如果是xml文件的话,就好办多了!!
如果可以用xml文件,给我写信吧,我给你示例
如果不可以,我也遇到过类似的问题,解决不了
mrjafi@21cn.com

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧