插入一条新纪录时,如何在程序里控制字段“编号”不能重复,ACCESS库,
字段“编号”设有主键,编号为数字,没有用自己动编号,也没有规律
因为我现在要导入大量计录(文本导入到库存,2万条),这些计录中有不少是在表里已有的,我要把记录编号不一样的导入到库,不一样的不导入,我用的是ADOTABLE写库
try
adotable.append;
adotable.post;
except
on EdatabaseError do System.Continue;
end;
这样写时,只是导入记录有一条和库中的相同就所有记录都不导入。
怎么解决啊?
字段“编号”设有主键,编号为数字,没有用自己动编号,也没有规律
因为我现在要导入大量计录(文本导入到库存,2万条),这些计录中有不少是在表里已有的,我要把记录编号不一样的导入到库,不一样的不导入,我用的是ADOTABLE写库
try
adotable.append;
adotable.post;
except
on EdatabaseError do System.Continue;
end;
这样写时,只是导入记录有一条和库中的相同就所有记录都不导入。
怎么解决啊?
解决方案 »
- 各位大大有没有用过QADERP系统
- fastreport预览正常,用delphi调用时有几个memo不显示
- 关于导入的问题,请大家帮帮忙。。急
- 有谁能提供delphi5的 下载地址吗?谢谢(很着急)
- tidhttp新问题在线等待,急急急(绝对高分)
- 一个关于 WISE installation 制作安装程序的问题
- 请问WinSocket的门外问题?
- 请问stringgrid的问题!请教高手(急)
- DELPHI6中使用Synchronize的问题
- 如何通过modem显示来电号码?
- Adoquery,的记录集更新的很慢,怎么解决。经常是条件已经改变了,查询的结果还是上次的,再重新查询一次才会改变。
- 有什么三层结构开发的好书推荐?
if not Locate('编号', 要插入的编号, [loCaseInsensitive]) then//如果没找到,就添加
begin
adotable.append;
adotable.post;
end; //否则啥也不干
except
on EdatabaseError do System.Continue;
end;
2、从临时表中将原有数据删除,一条SQL语句即可 DELETE FROM 临时表 LEFT JOIN 原表 ON 条件 WHERE 删除条件
3、把临时表中删除后的数据导入,也是一条SQL语句
然后通过SQL模式把不要的数据删除,然后再导入要导的表中当数据库有索引的时候,导入2万条记录,一次一条共2万次和一次2万条工1次在速度上有天壤之别,可能差数10倍。当然,如果你在起事阶段调整好而且你的原始数据有固定格式,通过TXT的SQL直接过滤数据后再导入那会更快。如果是ACCESS数据表,2万条记录不用15秒。
insert into tb1 select * From [Text;Database=c:\a.txt;Format=Delimited()].a.txt
还有,请问下上面这句是什么意思啊
要用怎么改啊
如果你的tbl是临时表,如果这部分通过ADO引擎,那么2万条记录倒入也就是15秒,除非你的字段特多,不相信吗?通过Access的倒入导出功能看看把TXT文件直接导到Access中看要多长时间,那么这个时间就是你的执行时间。那里导完以后两个表一比对把临时表里的重复数据删除然后导入顺利搞定
没有啊,
我现在还是一窍也不通啊!
正在查找资料中,在这里先谢谢各位了
特别是Hank(星星农场)
呵呵 insert into tb1 select * From [Text;Database=c:\a.txt;Format=Delimited()].a.txt
中
Delimited()是定义分隔符,如果是分号,用format=Delimited(;)
但我的没有分隔符,只用定义数据宽度,
比如我的数据每行是65个字节,分成15列,第一列5个字节,每二列1个字节......等怎么定义啊?
当使用 Text 驱动程序时,正文文件的格式是用结构描述信息文件来决定的。结构描述信息文件总是命名为 Schema.ini,始终放在和文本数据源相同的目录中,它提供的 IISAM 有关于文件一般格式的信息、字段名和数据类型信息、和许多其它数据特征。访问固定长度的数据时,一定需要 Schema.ini 文件;当文本表包含日期时间、货币、或十进制数据时、或当要对数据表中的数据处理有更多的控制时,都应使用 Schema.ini 文件。注意 文本 ISAM 将从注册簿中获得初始值,而不是从 SCHEMA.ini。相同的缺省文件格式应用于所有新的文本数据表。所有由 CREATE TABLE 语句创建的文件会继承那些相同的缺省格式值,在“定义文本格式”对话框选取文件格式值,并在“表”列表框中选择的 “缺省”便能设置那些缺省格式值。如果在注册簿中的值不同於在 SCHEMA.ini 中的值,SCHEMA.ini 的值将改写注册簿中的值。介绍 Schema.ini 文件Schema.ini 文件提供关于正文文件中记录的结构描述信息。每一个 Schema.ini 项目指定表的五个特征中的一个:?正文文件名称
?文件格式
?字段名、宽度、和类型
?字符集
?特殊的数据类型转换下列讨论这些特征。指定文件名Schema.ini 中的第一项始终是括在方括号中的文本源文件的名称。下面就是 Sample.txt 文件的这一项:“Sample.txt”指定文件格式Schema.ini 中的 Format 选项指定了正文文件的格式。Text IISAM 能自动地从大多数字符分隔的文件中读入格式。可用除双引号 (? 之外的任何单一字符当做为文件中的分隔符。在 Schema.ini 中的 Format 设置会覆盖每个文件的 Windows 注册中的设置。下列表格列出在 Format 选项中的有效数。格式说明符 表的格式
TabDelimited 文件中的字段由 tab 符分隔。
CSVDelimited 文件中的字段由逗点(逗点分隔的值)分隔。
Delimited(*) 文件中的字段由星号分隔。可用除双引号之外的任何字符来代替星号。
FixedLength 在文件中的字段属于固定长度。
例如,要指定逗点分隔的格式,可在 Schema.ini 中添加:Format=CSVDelimited指定字段可以用二种方法,在字符分隔的正文文件中指定字段名:?在表的第一行中包含字段名,并设定 ColNameHeader 为 TRUE。
?用数字指定每一列,并设计列的名称和数据类型。对于固定长度文件,必须用数字指定每一列,并设计列的名称、数据类型及宽度。注意 Schema.ini 的 ColNameHeader 设置会覆盖每个文件的 Windows 注册簿中的 FirstRowHasNames 设置。也能决定字段的数据类型。使用 MaxScanRows 选项指出当决定列的类型时,应该扫描多少行。如果 MaxScanRows 设置为 0,则会扫描整个文件。在 Schema.ini 中的 MaxScanRows 设置会覆盖每个文件的 Windows 注册簿中的设置。下面的两行代码指出,Microsoft Jet 应使用表的第一行的数据来决定字段名,应该检验整个文件来决定使用的数据类型:ColNameHeader=True
MaxScanRows=0下一项是利用列号 (Coln) 选项来设计表中的字段,这对于字符分隔文件是可选的,而对固定长度文件是必需的,下面的两行是两个字段的对应项:一个是 10
个字符的 CustomerNumber 文本字段,另一个是 30 个字符的 CustomerName 文本字段:Col1=CustomerNumber Text Width 10
Col2=CustomerName Text Width 30Coln 的语法是:Coln=ColumnName type “Width #”Coln 项目的每一部分是:参数 描述
ColumnName 列的文本名称。如果列名包含空格,必须用双引号括起来。
type 数据类型是:Microsoft Jet 数据类型
Bit
Byte
Short
Long
Currency
Single
Double
DateTime
Text
MemoODBC 数据类型
Char(和文本相同)
Float(和 Double 相同)
Integer(和 Short 相同)
LongChar(和 Memo 相同)
Date 日期格式
Width 文本字符串值 Width。指出后面列宽度的数字(对于字符分隔的文件而言这是可选的,对于固定长度文件而言这是必需的)。
# 指定列宽度的整型值(如果指定了 Width,则是必需的)。
选取字符集可以从二个字符集中选取一个:ANSI 和 OEM。下列示例显示在 Schema.ini 中选取 OEM 字符集的项。在 Schema.ini 中的 CharacterSet 设置会覆盖每个文件在 Windows 注册簿中的设置。下列示例显示在 Schema.ini 中选取字符集为 ANSI 的设置:CharacterSet=ANSI指定数据类型格式和转换Schema.ini 文件包含一些可用来指定数据如何转换或显示的选项。下表列出每一个选项。选项 描述
DateTimeFormat 可以设定指定日期和时间格式的字符串。如果在导入/导出中的所有日期/时间字段都用相同的格式处理,应该指定此项目。除 A.M. 和 P.M. 之外的所有 Microsoft Jet 格式都支持。若不规定格式字符串,则使用 Windows “控制面板” 的 “简短日期” 格式和 “时间” 选项。
DecimalSymbol 用来设定分隔整数部分与小数部分的单一字符。
NumberDigits 指出数值的小数部分的位数。
NumberLeadingZeros 指定小于 1 并且大于 -1 的十进制值数是否应该包含前导零;此值可以是 False (没有前导零)或 True。
CurrencySymbol 指出在正文文件中货币值使用的货币符号。例如美元符号 ($) 和 Dm。
CurrencyPosFormat 可以设定为下列任何值:?货币符号在前且没有分隔 ($1)?货币符号在後且没有分隔 (1$)?货币符号在前且有一个分隔 ($ 1)?货币符号在後且有一个分隔 (1 $)
CurrencyDigits 指定用作货币量的小数部分的位数。
CurrencyNegFormat 可设定为下列值之一:?($1)?-$1?$-1?$1-?(1$)?-1$?1-$?1$-?-1 $?-$ 1?1 $-?$ 1-?$ -1?1- $?($ 1) ?(1 $)此示例显示美元符号,但在实际程序中应该用适当的 CurrencySymbol 值取代它。
CurrencyThousandSymbol 指出在正文文件中以千位来分隔货币值的单一字符符号。
CurrencyDecimalSymbol 设定用来分隔整个货币量的小数部分的单一字符。
注意 不管省略哪一项,系统会使用在 Windows “控制面板” 的缺省值。