相关帖子:
http://community.csdn.net/Expert/topic/3624/3624168.xml?temp=.2998468
以上帖子中就数据的单向插入耙子老大的方法最快!
现有以下表的操作征求最快的方法!估计很多初学者也是困惑!ACCESS表
数据库: test.mdb
表:book
字段: id 字符
ddf 数字 要求:
随机生成 一个字符串names 然后比较是否在表BOOK的ID中存在!
如果存在就更新ddf 字段值加1;
如不存在就插入 id 为随机字符 ddf为0。
征求最快的运算方法!结构如下:var i: integer;
names, sqlstr: string;
begin
for i:=0 to 10000 do begin
names:=makestr; //随机生成长度为3的字符串//具体操作在这!end;
附随机字符串生成函数如下:
function makestr:string;
var strs, str: string;
begin
randomize;
strs := 'abcdefg1234567890';
str := '';
while (strlen(PChar(str)) < 3) do begin
str := str + copy(strs, round(Random(16)), 1);
end;
result := str;
end;
http://community.csdn.net/Expert/topic/3624/3624168.xml?temp=.2998468
以上帖子中就数据的单向插入耙子老大的方法最快!
现有以下表的操作征求最快的方法!估计很多初学者也是困惑!ACCESS表
数据库: test.mdb
表:book
字段: id 字符
ddf 数字 要求:
随机生成 一个字符串names 然后比较是否在表BOOK的ID中存在!
如果存在就更新ddf 字段值加1;
如不存在就插入 id 为随机字符 ddf为0。
征求最快的运算方法!结构如下:var i: integer;
names, sqlstr: string;
begin
for i:=0 to 10000 do begin
names:=makestr; //随机生成长度为3的字符串//具体操作在这!end;
附随机字符串生成函数如下:
function makestr:string;
var strs, str: string;
begin
randomize;
strs := 'abcdefg1234567890';
str := '';
while (strlen(PChar(str)) < 3) do begin
str := str + copy(strs, round(Random(16)), 1);
end;
result := str;
end;
// randomize; 程序开始执行一次就行了
字符操作的速度远快于字符串,有空你比较一下两者的速度function makestr:string;
const
strs:string= 'abcdefg1234567890'; // const 在编译的时候就处理了,放在赋值里面肯定慢
begin
SetLength(Result, 3);
Result[1]:= strs[random(16)+1];
Result[2]:= strs[random(16)+1];
Result[3]:= strs[random(16)+1];
end;
最近学习SQL的时候可能不得发 总感觉插入速度这么慢 还不如自定义文件格式去弄!
感觉很奇怪!只是想弄个明白 数据库除了给我们方便还给我们什么?上面的函数是我修改的!原来是给任意字符串可以生成任意长度的随机字符!呵呵!稍加修改就弄上来了!
见笑:_)
ACCESS表
数据库: test.mdb
表:book
字段: id 字符
ddf 数字 select id from test where ddf='''+strs+''';你是说这样查询的效率会低?
插入:19S
更新:21S 用的就是你这这样类似语句!如果10000个循环的时候 来解决问题的话用的时间可想而知!
如果存在就更新ddf 字段值加1;
如不存在就插入 id 为随机字符 ddf为0。
==================================================================哪里有循环阿?
var i: integer;
names, sqlstr: string;
begin
for i:=0 to 10000 do begin
names:=makestr; //随机生成长度为3的字符串//具体操作在这!end;
昨天尝试把导入2000条记录的数据到另一个表!
.DB TO .MDB 回头一看数据乱套 原来学东西也是麻烦! 转换过程除了慢 竟然不出错 但数据为什么乱套呢?郁闷....用ACCESS导入还不一样 写程序干什么
====================================
Dim Conn,Count,i
Set Conn = ...... //
Conn.Open "......" //
For i=1 to 10000
Conn.Execute "Update Book Set ddf=ddf+1 where id='"&names&"'",Count,AdCmdText
if Count=0 then Conn.Execute "insert into book (id,ddf) values ('"&names&"',0)"
Next
====================================
这种情况下最少的情况下会执行一次数据库操作,效率应该比较理想
可以把它转化为Delphi的代码(好像用到ActiveX,OleDB库吧)
insertData(Count int)的存储过程来调用,
而存储过程内部来产生随机数,在该字段上添加unique约束,,至少降低roundTrip
books[0,0], books[0,1], books[0,2]
更新标志 相当于id 相当于ddf
2、循环10000次对Books数组操作
如果哪一条记录有过变动就设置Books[i,0]
3、打开记录集
对数组进行遍历,如果Books[i,0]设置了,就对记录集的相关记录进行更新
4、更新记录集(RS.Update)