本帖最后由 aion1949 于 2009-08-26 21:08:06 编辑

解决方案 »

  1.   

    StrConn:='Provider=MSDASQL.1;DSN=MyODBC;UID=s42334125db0;PWD=ashfre6zfki3wk1im;DESCRIPTION=My_ODBC_5_1;SERVER=161.1.0.71;DATABASE=s427gb5db0;PORT=3306;Initial Catalog=s445125db0';
    oConn:= TAdoConnection.Create(nil);
    try
      oConn.ConnectionString:=StrConn;
      oConn.LoginPrompt:=false;
      oConn.Connected:=True; 
     //创建放循环外面,只需要TAdoConnection就可以了
      for i := 0 to MyStrList.Count - 1 do
      begin 
        ...............
        oConn.Excute('INSERT INTO table1  (x1,x2,x3,x4,x5,x6,x7) values ('+atmp[6]+','+atmp[4]+','+atmp[0]+','+Quotedstr(atmp[1])+','+Quotedstr(atmp[3])+','+atmp[5]+','+Quotedstr(atmp[2])+')');//直接执行sql语句
                        
      end;
    finally
      oConn.Connected:=false; 
      oConn.free;
    end;这样试试
      

  2.   

    oConn.Excute应该是这样的
    oConn.Execute
      

  3.   

    哈哈 ... 问题是出在那里呀,晕..发现自己不用脑子的(在循环内重复做无聊的事)。
    因为是刚建的空表呀,目前只插入已知的唯一性数据纪录。录入完后,以后可能要判断Update/insert不知有没有更好的效率的方法呀 ... 我基本不懂这些东西,刚学不久,就是为了做个东西。如果有更好的插入方法,指导指导呀 .. 数据纪录大概500W左右..数据都是在网络上采集的。
      

  4.   

    通过数据库内部的处理来实现数据的判断和插入不要用select 来判断是否存在数据再插入或者更新在update 后跟 where??用 insert ...select 来批量插入
      

  5.   

    重复利用  oConn 和 oQuery , 即只建一次和free一次(在循环外)
      

  6.   

    通过数据库内部的处理来实现数据的判断和插入?我不懂噢,能否详细一点?先谢谢大家
    insert ...select 来批量插入 ? 我要插入的数据全部是从网站上网页上动态截取出来的,能用insert ... select 吗?(刚google了一下才知道有insert...select这东西,汗)
    在update 后跟 where?? 是的呀,我要更新某条指定纪录的字段值呀,我试了下,能执行呀,更好的方法是什么呢?
    ________________________________________________
    另外我再问几个数据库方面基础问题:
    帖中提到的那段线程内插入代码是控制成单线程顺序执行的,请问能不能不控制线程而让所有已经开启的线程同时插入或更新数据库呢(当然,这时我要把那写本地文本的代码去掉)?这样会带会什么其它问题吗?如何影响用户查询数据库速度吗(所有采集的数据仅供用户查询)?
      

  7.   

    循环中怎么还重复打开ado连接,放到循环外,连接一次就行了
    而且频繁创建query,放到外边,创建一次
      

  8.   

    insert 语句用绑定参数方式