你可以用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))"不妨试一下
sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "' group by 交款记录.销售编号"
这样把,我把我的部分代码贴出来供大家参考指点。 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
就是当交款记录表中当前没有记录的时候,我希望sQsql为空,adors.recordCount = 0 跳转到我上面的 Else,而现在的情况它没有按照我这个意图走。而把max去掉之后就会跳转到Else. sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "'"
yuxrone() 兄,能否对你那个函数进行一些说明呢,感激不尽。
-- 判断当前数据库中是否存在同名函数,如存在,删除原函数,重建 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???
yuxrone()兄,我用你这段代码格式老是报错,呵呵。研究中。能否留个QQ我啊。谢谢
这样不知可不可以 sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号=" & Trim(txtxsID(0))
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
从语法上看不出什么错.前提是 交款记录.销售编号 是字符串型的!!!!也可以试试 sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号like '" & Trim(txtxsID(0)) & "'"
sQsql = "select case when max(累交定金) is null then 0 else max(累交定金) end from 交款记录 where 交款记录.销售编号like '" & Trim(txtxsID(0)) & "'"
也没看就复制上面的,写错了。 sQsql = "select case when max(累交定金) is null then 0 else max(累交定金) end from 交款记录 where 交款记录.销售编号= '" & Trim(txtxsID(0)) & "'"
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
同志们,帮我看看这条查询语句,看看哪里语法出错。程序提示 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
定义用户自定义函数,函数定义如下
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))"不妨试一下
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
sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号='" & Trim(txtxsID(0)) & "'"
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???
sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号=" & Trim(txtxsID(0))
哦,对了,你是用recordset吧?
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
sQsql = "select max(累交定金) from 交款记录 where 交款记录.销售编号like '" & Trim(txtxsID(0)) & "'"
sQsql = "select case when max(累交定金) is null then 0 else max(累交定金) end from 交款记录 where 交款记录.销售编号= '" & Trim(txtxsID(0)) & "'"
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
我的意图是: 将累交定金小于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