将VB6过程转换为SQL查询-找不到错误

将VB6过程转换为SQL查询-找不到错误,sql,sql-server,Sql,Sql Server,我正在尝试将VB6过程转换为SQL查询 我对SQL一无所知,并且在我试图构建的查询中发现了一些难以发现的错误 请注意: SELECT * FROM Vault WHERE (Vault.[Cheque No] Like "*" & [Forms]![frmClientSearch]![txtChqNo] & "*") AND (([Forms]![frmClientSearch]![txtContractNumber] Is N

我正在尝试将VB6过程转换为SQL查询

我对SQL一无所知,并且在我试图构建的查询中发现了一些难以发现的错误

请注意:

    SELECT *
    FROM Vault
    WHERE (Vault.[Cheque No] Like "*" & [Forms]![frmClientSearch]![txtChqNo] & "*")      
        AND (([Forms]![frmClientSearch]![txtContractNumber] Is Null) OR (Vault.[Contract Number] Like "*" & [Forms]![frmClientSearch]![txtContractNumber] & "*" )) 
        AND  (([Forms]![frmClientSearch]![txtStartDate] is NULL ) OR (Vault.[Cheque Date] >=  [Forms]![frmClientSearch]![txtStartDate] )) 
        AND (([Forms]![frmClientSearch]![txtEndDate]  is NULL  ) OR (Vault.[Cheque Date] <=  [Forms]![frmClientSearch]![txtEndDate] ))

这是我正在尝试运行的查询。当date不为空时,这将完美执行。但是,当date字段为空时。我遇到异常或SQL给出空白输出。

简单回答:您无法转换引用应用程序对象(例如[Forms])的VB6查询![frmClientSearch]![txtChqNo]直接转换为普通SQL Server查询

您可以做的是创建一个存储过程或一个内联表值函数,并将表单中的值作为参数传递

存储过程可能类似于以下代码段:

CREATE PROCEDURE dbo.Vault_Select
(
    @txtContractNumber VARCHAR(30),
    @txtChqNo   VARCHAR(30),
    @txtStartDate DATETIME,
    @txtEndDate DATETIME
)
AS
SELECT *
FROM Vault
WHERE (Vault.[Contract Number] LIKE '%' + @txtContractNumber + '%')
    AND (@txtChqNo IS NULL OR Vault.[Cheque No] LIKE '%' + @txtChqNo + '%')
    AND (@txtStartDate IS NULL OR Vault.[Cheque Date] >= @txtStartDate)
    AND (@txtEndDate IS NULL OR Vault.[Cheque Date] <= @txtEndDate)
剩下要做的就是使用原始查询中的参数调用存储过程。 因为这是一个VB6的问题,我退出了-

一些旁注:

您试图做的是一个所谓的全包查询,它可能会导致性能问题,具体取决于表的大小


此外,我很奇怪为什么你有一个列名[Contract Number],但数据类型显然是字母数字的。同[支票号码]。。。编辑:如果数据是数字,为什么需要通配符搜索?

我认为您缺少一个结束符。最后一个和之后是3和2;只需在AND之后立即添加另一个字段以匹配。@simonatrcl:编辑了帖子,我看到通过输入所有字段的查询,我得到了预期的输出。但是,当日期字段为空时,我在帖子中看到一些随机行为,我看到通过输入所有字段的查询,我得到了预期的输出。但是,当日期字段为空时,我会看到一些随机变量behaviour@Mohanss82当前位置请记住,我们只需要处理您发布的内容。你的评论没有多大意义。请提供随时可用的样本数据和预期结果,以及一些可能导致错误结果的样本daa。除此之外,我们只是猜测。。。。
EXEC dbo.Vault_Select ('Contract', 'ChqNo', '20140120','20141022')