我在数据库中建了几个视图,然后在delphi 中用sql 语句查询视图中的数据
Str:='select * from view where deviceId='123' ' 
if C1.checked then
 Str:=Str+' and deviceName='256666'';
对deviceName的查询限制条件不起作用,有时候点击查询按钮次数过多的话,就出现 内部sql server错误
请问高手,这是什么原因造成的?

解决方案 »

  1.   

    deviceName这个字段是什么类型的
      

  2.   

    字符型的,里面只有字符型和float以及smallint型
      

  3.   

    str 给值应该在C1是否CHECKED事件里给值
      

  4.   

    出现这个错误后,在delphi程序中无法再查询数据,必须重新启动计算机
      

  5.   

    Str:='Select * from View where 1=1 ';
    if C1.Checked=true then
     Str:=Str+' and  QH='+QH.Text+'';//QH是smallint
    if C2.checked=true then
     str:=Str+' and DeviceID='''+trim(DeviceID.Text)+'''';//字符型 pbl.opensql(Str,Query);
    查询只有第一次是有效的,以后无效
      

  6.   

    pbl.opensql(Str,Query);是什么函数?可能是里面出错
      

  7.   

    pbl.opensql(Str,Query); 把这个代码贴出来看看
      

  8.   

    Query.close;
    Query.Sql.Text:=SQLText;
    Query.prepared;
    Query.Open;
      

  9.   

    pbl.opensql(Str,Query);
    你这里的query是动态创建的还是自己利用控件来做的
      

  10.   

    SELECT ItemID, QH, ISNULL
              ((SELECT SUM(Measure.Num * List.Price)
              FROM Measure INNER JOIN
                    List ON Measure.ProjectID = List.ProjectID
              WHERE List.ItemID = A.ItemID AND Measure.QH = A.QH), 0) AS YTotal, 
          ISNULL
              ((SELECT SUM(Num)
              FROM ConcreteMst
              WHERE ConcreteMst.ItemID = A.ItemID AND ConcreteMst.QH = A.QH), 0) 
          AS CNum, ISNULL
              ((SELECT SUM(ConcreteDtl.Total)
              FROM ConcreteDtl INNER JOIN
                    ConcreteMst ON ConcreteDtl.DH = ConcreteMst.DH
              WHERE ConcreteMst.ItemID = A.ItemID AND ConcreteMst.QH = A.QH), 0) 
          AS TTotal, ISNULL
              ((SELECT SUM(GetOutDtl.Total)
              FROM GetOutDtl INNER JOIN
                    GetOutMst ON GetOutDtl.DH = GetOutMst.DH
              WHERE GetOutMst.ItemID = A.ItemID AND GetOutMst.QH = A.QH), 0) AS MTotal, 
          ISNULL
              ((SELECT SUM(pjtCheckDtl.Total)
              FROM pjtCheckDtl INNER JOIN
                    pjtCheckMst ON pjtCheckDtl.DH = pjtCheckMst.Dh
              WHERE pjtCheckMst.ItemID = A.ItemID AND pjtCheckMst.QH = A.QH), 0) 
          AS RTotal, ISNULL
              ((SELECT SUM(DCost.Total)
              FROM (SELECT WTimer.DeviceID, WTimer.ItemID, WTimer.QH, WTimer.WTimer, 
                            (DWCost.MTotal + DWCost.ZTotal + DWCost.STotal + DWCost.RTotal) 
                            * WTimer.WTimer / WTimer.DTimer AS Total
                      FROM (SELECT A.DeviceID, A.ItemID, A.QH, SUM(A.Timer) AS WTimer,
                                        (SELECT SUM(Timer)
                                       FROM DeviceRunMst
                                       WHERE DeviceRunMst.DeviceID = A.DeviceID AND 
                                             DeviceRunMst.QH = A.QH) AS DTimer
                              FROM dbo.DeviceRunMst A
                              GROUP BY A.DeviceID, A.ItemID, A.QH) WTimer INNER JOIN
                            DWCost ON WTimer.DeviceID = DWCost.DeviceID AND 
                            WTimer.QH = DWCost.QH) DCost
              WHERE DCost.ItemID = A.ItemID AND DCost.QH = A.QH), 0) AS DTotal
    FROM (SELECT DISTINCT QH, ItemID
            FROM pjtCheckMst
            UNION
            SELECT DISTINCT QH, ItemID
            FROM ConcreteMst
            UNION
            SELECT DISTINCT QH, ItemID
            FROM Measure INNER JOIN
                  List ON Measure.ProjectID = List.ProjectID
            UNION
            SELECT DISTINCT QH, ItemID
            FROM GetOutMst
            UNION
            SELECT DISTINCT QH, ItemID
            FROM DeviceRunMst) A 把原来的几个视图拼接成的试图改成一个视图的形式,代码如上,但是还是不行啊,提示内部sql server错误,
      

  11.   

    这个语句,我在delphi中用动态语句的形式打开得到的也是同样的错误:内部sql server错误
    改成在存储过程,函数中也是一样
      

  12.   

    这个SQL语句够长的,能不能优化一下。
    在查询分析器中试试看执行结果如何