不是所有的XP下都出错.只有在某些XP下出错.而且都是SP2的.昨天同事在出错的那台机上专门安装了VB6.0.在调试程序。结果连调试都通不过了。(在我自己的机上也是XPSP2是可以调试通过的。)说问题出在这里:
Lsb = "##PsYp" & Hyid & Replace(Time, ":", "_") '建立一个临时表    strSQL = "If Exists(Select * From TempDb.Dbo.SysObjects Where Name = '" & Lsb & "') Drop Table " & Lsb
    Deyp.cnYp.Execute strSQL
由于临时表我也不是很熟
只能向大家求救了.
现在怀疑是不是MDAC的原因?还有怎么把MDAC2.8的安装程序用SETUP FECTORY 7.0一起连同程序打包到安装程序里.安装的时候自动安装呢???????

解决方案 »

  1.   

    你直接如下调试:
    Lsb = "##PsYp
    Deyp.cnYp.Execute strSQL据我所知,对于临时表,只要本次请求连接断开,临时表就不存在了,所以可以根据这个特点考虑修改一下设计思路,这样以下if判断就可不要了,也就减少了出错的可能性。还有临时表名称无需如此复杂,SQL数据库有成熟的临时表管理机制,不用担心多用户迸发处理发生错误。
      

  2.   

    可是如果把if都去掉。这一段都去掉.只留LSB=.....
    然后执行到下面还是出错
    strSQL = "Select c.Id As Cgjhid, c.Bdxmid, c.Sl As Cgsl, Pssid,"
        strSQL = strSQL & " (Select Bz From Psmx, Pszb Where Pszb.Id = Pszbid And Psmx.Cgjhid = c.Id And Psdh = '0' And Pssid = p.Pssid) As Bz,"
        strSQL = strSQL & " (Select Cgjg From Psmx, Pszb Where Pszb.Id = Pszbid And Psmx.Cgjhid = c.Id And Psdh = '0' And Pssid = p.Pssid) As Cgjg,"
        strSQL = strSQL & " ((Select Isnull(Sum(Sl), 0) From Psmx, Pszb Where Pszb.Id = Pszbid And Psmx.Cgjhid = c.Id And Psdh <> '0') + (Select Isnull(Sum(Sl), 0) From Psmx, Pszb Where Pszb.Id = Pszbid And Psmx.Cgjhid = c.Id And Psdh = '0' And Pssid <> p.Pssid))As Pssl,"
        strSQL = strSQL & " (Select Isnull(Sum(Sl), 0) From Psmx, Pszb Where Pszb.Id = Pszbid And Psmx.Cgjhid = c.Id And Psdh = '0' And Pssid = p.Pssid) As XPssl"
        strSQL = strSQL & " Into " & Lsb
        strSQL = strSQL & " From Cgjh c, PzPss p"
        strSQL = strSQL & " Where c.Bdxmid = p.Bdxmid"
        strSQL = strSQL & " And p.QxZg = 0"
        strSQL = strSQL & " And Zbryid = " & Hyid
        Deyp.cnYp.Execute strSQL '为Lsb临时表建立结构和插入数据
    还有一点很重要:并不是所有的机器都会出问题。大部分是不会出问题。只有少部分XP的系统才出错
      

  3.   

    第X行附近有语法错误。第X行就是指那条SQL语句
      

  4.   

    按你的出错信息,那么可以基本断定是SQL语法错误吧
    你debug.print你的SQL语句,复制到SQL查询分析器中去调试吧
      

  5.   

    调试过了。在查询分析器中可以通过
    可能你没注意到我下面那句啊;在大部分XP系统下程序是没有任何问题的。只有在部分XP系统下才出错.如果真是SQL语法错误应该是完全通不过的啊.所以我不知道问题到底出在哪里
      

  6.   

    那的的确有点奇怪 :(
    提示是SQL语法错误,看了下你这名SQL语句中用了二个变量Lsb 和 Hyid,猜想一下会不会是不同的系统上这二个返回值不一样呢? 你试试在每台机器上debug.print一下这二个返回值,或者改为一个简单的常量在出错的机器上试试
      

  7.   

    哥们.+我QQ好吗。这样有问题好请教你啊.我的QQ83377264.收我做徒弟吧.
    还有一点:为什么要返回的值一样呢。这个lsb只是临时的表名.临时的表名不一定要每次登录都一样吧?而且后面还加了time进去命名的。这样每次命名都是不一样的哦
      

  8.   

    不好意思,上班不准聊天的,所以没有QQ
    并不是要看你返回值是否一样,而是担心会不会是返回了非法字符不符合表的命名规则。
    在我记忆中,临时表在SQL语句中用一样的名称是没关系的,对此SQL数据库有自身的管理功能,每个连接的临时表不会相互干扰的。
      

  9.   

    现在测试了一下:两次登录的lsb分别是##PsYp10617_12_04
    ##PsYp10617_14_23
    本来每次就是不一样的哦
      

  10.   

    真有点奇怪,呵呵
    Zbryid是什么字段类型
      

  11.   

    Zbryid是int类型的。就是放hyid的。表和表之间数据联系用的.会不会问题不出在这里?因为这个系统是从B/S移植到C/S上的。会不会问题出在客户机的环境上面?比如数据驱动MDAC,控件版本?
      

  12.   

    ##XXX為系統臨時表,建議使用#XXX做臨時表
      

  13.   

    如果怀疑是MDAC问题,你可以在出错机器上调试时,重新引用一下ADO。
    XP SP2好象集成的MDAC是2.8版本,要么你就用2.5版本的,这样在2000以上机器上就都可以用了