请教 okokwukai(不老仙翁) 如何处理?好象与这个符号没有什么关系吧。

解决方案 »

  1.   

    你可以用sqlserver的用户自定义函数来实现这个目的
    定义用户自定义函数,函数定义如下
    IF EXISTS (SELECT * 
       FROM   sysobjects 
       WHERE  name = 'udf_maxtest')
    DROP FUNCTION udf_maxtest
    GOCREATE FUNCTION udf_maxtest 
    ( @txtxsID varchar)
    RETURNS m_累交定金 money>
    AS
    BEGIN
    declare rtn money
    select rtn = max(累交定金) 
    from 交款记录 where 交款记录.销售编号=Trim(@txtxsID)
    END
    GO调用语句如下:
    sQsql = "select * from udf_maxtest(txtxsID(0))"不妨试一下
      

  2.   

    sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "' group by 交款记录.销售编号"
      

  3.   

    这样把,我把我的部分代码贴出来供大家参考指点。
    Private Sub txtleijDJ_GotFocus() 这是 “累加定金”文本框获得焦点事件
      conn = "FileDSN=预售房系统.dsn;UID=sa;PWD=realty2002"
      adoconn.Open conn
      sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "'" 
      adors.Open sQsql, adoconn, adOpenKeyset, adLockOptimistic
      If adors.RecordCount > 0 Then
      txtleijDJ.Text = Val(adors.Fields(0)) + Val(txtyjDJ)
      Else
      txtleijDJ.Text = txtyjDJ.Text
      End If
      adors.Close
      adoconn.Close
    End Sub
    其实是这样一个问题。我有几个文本框,分别是“定金总额”,“今交定金”,“累交定金”,“需补定金”,这也是 交款记录表中的字段。累交定金应该是一个累加和,由今交定金加上最近的一次累交定金,如果是第1次录入我想adors.recordcount=0,这样累交定金就为第1次的“今交定金”.如果数据表不为空的时候,不会有问题。但为空开始录的时候,那个adors.recordcount=1,与我的想法相反了,出现如下错误信息。事实错误‘94’,无效使用null
      

  4.   

    就是当交款记录表中当前没有记录的时候,我希望sQsql为空,adors.recordCount = 0 跳转到我上面的 Else,而现在的情况它没有按照我这个意图走。而把max去掉之后就会跳转到Else.
    sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "'"
      

  5.   

    yuxrone() 兄,能否对你那个函数进行一些说明呢,感激不尽。
      

  6.   

    -- 判断当前数据库中是否存在同名函数,如存在,删除原函数,重建
    IF EXISTS (SELECT * 
        FROM   sysobjects 
        WHERE  name = 'udf_maxtest')
     DROP FUNCTION udf_maxtest
    GO--建立函数
    CREATE FUNCTION udf_maxtest 
     ( @txtxsID varchar) --定义函数传入参数
    RETURNS m_累交定金 money --定义函数返回值
    AS
    BEGIN --函数块开始 declare rtn money --定义变量 select rtn = max(累交定金) --此处用相应的字段代替
     from 交款记录 
     where 交款记录.销售编号=Trim(@txtxsID) --sql 语句,查询满足条件的结果RETURN rtn --返回值,刚才的拉下了 :)END --函数块结束
    GO 调用语句如下:sQsql = "select * from udf_maxtest(txtxsID(0))"
    OK???
      

  7.   

    yuxrone()兄,我用你这段代码格式老是报错,呵呵。研究中。能否留个QQ我啊。谢谢
      

  8.   

    这样不知可不可以
    sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号=" & Trim(txtxsID(0))
      

  9.   

    工作中,上qq很不方便啊,提示什么错误,贴上来,我帮你看看!
    哦,对了,你是用recordset吧?
      

  10.   

    yuxrone() 兄,非常感谢你的帮助。问题有了进展,这个问题我解决完了会好好总结一下,到时候再贴上来。你那个自定义函数我的好好研究一下,小弟水平太次,多谢各位的指点,欢迎大家继续讨论。谢谢大家。
      

  11.   

    Private Sub txtleijDJ_GotFocus() 这是 “累加定金”文本框获得焦点事件
      conn = "FileDSN=预售房系统.dsn;UID=sa;PWD=realty2002"
      adoconn.Open conn
      sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "'" 
      adors.Open sQsql, adoconn, adOpenKeyset, adLockOptimistic
      If adors.Eof AND adors.Bof Then
      txtleijDJ.Text = txtyjDJ.Text
      Else
      txtleijDJ.Text = Val(adors.Fields(0)) + Val(txtyjDJ)
      End If
      adors.Close
      adoconn.Close
    End Sub
      

  12.   

    从语法上看不出什么错.前提是 交款记录.销售编号 是字符串型的!!!!也可以试试
    sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号like '" & Trim(txtxsID(0)) & "'"
      

  13.   

    sQsql = "select case when max(累交定金) is null then 0 else max(累交定金) end  from 交款记录 where 交款记录.销售编号like '" & Trim(txtxsID(0)) & "'"
      

  14.   

    也没看就复制上面的,写错了。
    sQsql = "select case when max(累交定金) is null then 0 else max(累交定金) end  from 交款记录 where 交款记录.销售编号= '" & Trim(txtxsID(0)) & "'"
      

  15.   

    因为有了聚合函数,所以返回的记录集不会为空,当表为空时,返回也是一条记录,但值是null,当然这个值在VB中无法参与运算了,所以我们在sql 语句中就把它变成0,这样就OK了.
      

  16.   

    Private Sub txtleijDJ_GotFocus() 这是 “累加定金”文本框获得焦点事件
      conn = "FileDSN=预售房系统.dsn;UID=sa;PWD=realty2002"
      adoconn.Open conn
      sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "'" 
      adors.Open sQsql, adoconn, adOpenKeyset, adLockOptimistic  'If adors.RecordCount > 0 Then
    if not isnull(adors(0)) then     '判断字段值是否为 null  txtleijDJ.Text = Val(adors.Fields(0)) + Val(txtyjDJ)
      Else
      txtleijDJ.Text = txtyjDJ.Text
      End If
      adors.Close
      adoconn.Close
    End Sub
      

  17.   

    同志们,帮我看看这条查询语句,看看哪里语法出错。程序提示 select 附近出了问题。
    我的意图是:  将累交定金小于MAX(累交定金)的所有定金记录删除g = "select 交款记录.* from 交款记录 where 累交定金 < MAX(select 累交定金 from 交款记录 where 交款记录.销售编号= '" & f & "') group by 累交定金"
    adors.Open g, adoconn, adOpenKeyset, adLockOptimistic
         If adors.RecordCount > 0 Then
         adors.Delete
         adors.Update
         End If