在VB中使用ADO连接MYSQL数据库,通过语句查询表结构的时候,反映很慢,数据库是远程数据库,运行查询后程序会暂时没有响应一段时间才能获取到表结构,这是为什么啊?是程序的问题还是网络速度或服务器响应慢?我用的SQL语句是
RS.Open strTableName, Conn, , , adCmdTable

解决方案 »

  1.   

    是外网的,互联网上的,可是这样程序就好象进入了一种无响应的状态,知道读完数据,有没有办法可以不出现这种无响应状态呢?就是没有读完数据之前,用户依然可以操作这个程序?我用了DOEVENTS,可是还是一样。
      

  2.   

    那你设置connection的联接时间短一点吧。doevents可以,但,用户操作起来实际上,很慢。
    这个,如果用后台进行联接,试一下,用多线程方法(这个方法,听过没做过,你查一下多线程,应该有的)。
      

  3.   

    如何设置CONNECTION的连接时间呢?我是用代码连接mysql的。。用DOEVENTS感觉好象不起作用,就是打开语句那里,好象程序没有响应了,等一会之后才可以,我在打开语句的前后,包括循环读取字段名的时候都在循环里加上了DOEVENTS,可是还是慢。
      

  4.   

    如何设置CONNECTION的连接时间呢?我是用代码连接mysql的。。
    --
     cn.ConnectionTimeout = 30 '这里指30秒,超过30秒就提示错误。
      

  5.   

    这个只能修改连接到数据库的时间啊?我现在的问题是,已经连接了数据库,可是在对表进行查询操作的时候(也就是RS。OPEN这里),程序好象就没有响应了一样,大概等了有十几二十秒以后,才开始返回数据,这时候窗口也正常了,不知道这个问题有没有办法改善呢?
      

  6.   

    没的办法的,用Active exe来写数据库组件吧。要不就忍着。
      

  7.   

    to samwzhang:可否给介绍一下什么是Active exe???
      

  8.   

    可以在 RecordSet.Open 方法中指定最后一个参数为 adAsyncFetch,该调用取的 CacheSize 指定的记录数后马上返回;一直到 RecordSet 的 FetchComplete 事件触发时所有数据才取完。这中间是可以进行界面响应的,注意进行状态判断。
      

  9.   

    问题已解决,只要读取1条数据,速度会加快很多,否则如果使用
    RS.Open strTableName, Conn, , , adCmdTable
    的话,会变成读取所有记录后才返回,即便加了cachesize后也是如此,所以修改了SQL语句,变成了sql="select * from table limit 0,1"
    rs.open sql,conn,1,1
    或许还应该加上分页功能来缩短查询时间不过却要分几次查询,好象效率不高,不知道大家有没有什么好的办法?
      

  10.   

    ADO执行SQL语句的时候是单线程的,根本无法通过DOEVENTS来取得CPU的控制权,除非再做一个线程来单独执行查询!!否则不行~~~~~
      

  11.   

    如果是连接外网的数据库,通常比本地要慢许多,而且要看网络状况,比如说DNS解析等等。在连接的时候要让客户做其他操作基本不太可能,因为vb不支持多线程,所以没有办法做到(虽然可以用Api达到多线程,但是很不稳定)。
      

  12.   

    感谢楼上的所有xdjm,大家新年快乐啊