相关帖子:
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;

解决方案 »

  1.   

    首先这个函数要改改
        // 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;
      

  2.   

    也不是作业 也不是项目作业中找不到这么怪的题! 项目也没这么样的统计!
    最近学习SQL的时候可能不得发 总感觉插入速度这么慢 还不如自定义文件格式去弄!
    感觉很奇怪!只是想弄个明白 数据库除了给我们方便还给我们什么?上面的函数是我修改的!原来是给任意字符串可以生成任意长度的随机字符!呵呵!稍加修改就弄上来了!
    见笑:_)
      

  3.   

    查询速度应该没啥问题吧?
    ACCESS表 
    数据库: test.mdb
    表:book
    字段: id  字符
           ddf  数字 select id from test where ddf='''+strs+''';你是说这样查询的效率会低?
      

  4.   

    好久没写SQL语句了今天一写还真的有点陌生了都不知道写的对不对了,呵呵
      

  5.   

    to myling(AD) :ADO Query SQLP4 1.4 /256M1000个循环!查询:10s
    插入:19S
    更新:21S  用的就是你这这样类似语句!如果10000个循环的时候 来解决问题的话用的时间可想而知!
      

  6.   

    随机生成 一个字符串names 然后比较是否在表BOOK的ID中存在! 
    如果存在就更新ddf 字段值加1;
    如不存在就插入 id 为随机字符 ddf为0。
    ==================================================================哪里有循环阿?
      

  7.   

    to   myling(AD) :
    var i: integer;
        names, sqlstr: string;
    begin
    for i:=0 to 10000 do begin
    names:=makestr;  //随机生成长度为3的字符串//具体操作在这!end;
      

  8.   

    没事顶一下!
    昨天尝试把导入2000条记录的数据到另一个表!
    .DB TO .MDB 回头一看数据乱套 原来学东西也是麻烦! 转换过程除了慢 竟然不出错 但数据为什么乱套呢?郁闷....用ACCESS导入还不一样 写程序干什么
      

  9.   

    ASP:
    ====================================
    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库吧)
      

  10.   

    最快的方式是写个
    insertData(Count int)的存储过程来调用,
    而存储过程内部来产生随机数,在该字段上添加unique约束,,至少降低roundTrip
      

  11.   

    忽然有个想法:1、把数据库中已经存在的所有数据取出来,放在一个数组books中
       books[0,0],  books[0,1],  books[0,2]
       更新标志     相当于id     相当于ddf
    2、循环10000次对Books数组操作
       如果哪一条记录有过变动就设置Books[i,0]
    3、打开记录集
       对数组进行遍历,如果Books[i,0]设置了,就对记录集的相关记录进行更新
    4、更新记录集(RS.Update)
      

  12.   

    我讨论的是怎么加快数据库的操作!耙子老大针对的是paradox数据库 只是插入数据 如果还有入库比较呢? 速度这么慢是我没有想到的!郁闷到差一点有做掉数据库的念头.
      

  13.   

    呵呵看差了原来是把数据库的查找放到长循环中了……长循环一般没有这么做的要么写成存储过程(将生成随即字符串的部分也用存储过程完成)要么就像耙子大叔说的那样,用内存表简单的内存表就是clientdataset前提是数据量不算太大