将文本框值插入Access SQL查询

时间:2012-04-04 09:15:30

标签: sql ms-access vba

作为Access和VBA的业余爱好者,我已经碰到了以下内容......

在MS Access 2007中,我有以下查询:

SELECT .... WHERE format(NZ(l_f_date),'yyyy-mm-dd')<=**'2012-04-03'**);

我已经缩短了一点。

数据库有大约20个查询需要每天运行。我已经创建了4个宏来以我需要它们运行的​​方式运行查询组。问题是,在每个查询中,我首先要更改日期(就像在上面的查询中一样)。我正在寻找将其自动化的方法。

我有一个想法是创建一个表单,为它上面的每个宏放置一个按钮,2个文本框输入我需要的2个日期。现在,我需要这些日期出现在粗体部分。在我考虑它时,我有两个选择:

  • 在数据库中创建一个临时表来存储这两个日期,并在我的查询中提取这两个字段。
  • 以某种方式直接将文本框的值插入查询的粗体部分。

我认为我可以管理第一个解决方案,但第二个解决方案让我头疼。

你能帮忙吗?


评论中的SQL

select proc_desc,count(s) as broj 
into upit3 
from ( select distinct a.case_id as s,
          a.org_case_id,a.act_date as day,d.prod_id,d.prod_desc,
          c.fname,c.dpd,c.due_amount,proc_id,proc_desc 
       from actions_b as a, cases_old_b as c,processes_b as p,
            product_dict_b as d 
       where a.org_case_id=c.[org_ case_id] 
       and a.act_date=Forms!Form!Text10 and d.prod_id=c.product 
       and p.proc_id=c.process and not_lead=1 ) 
group by proc_desc order by proc_desc;

好的,样本数据......

在x.dates中,值与此完全相同: 03.04.2012
a.act_date中的值如下所示: 01.07.2011 13:53:56

所以,如果不能使用这些值,是否可以在查询中使用LIKE语句?伪:WHERE a.act_date LIKE x.date%
如果可能,如何使用它?我是sql和访问查询的新手...我谷歌但有时候,像这次,我被卡住了。
感谢

3 个答案:

答案 0 :(得分:1)

这个结构:

SELECT .... WHERE format(NZ(l_f_date),'yyyy-mm-dd')<='2012-04-03');

不是个好主意。一般规则是尝试坚持等于左侧的字段(列)名称。所以

SELECT .... WHERE l_f_date <=#2012-04-03#

Nulls不会被包括在内,我希望你的日期日期而不是字符串。

接下来添加表单:

SELECT .... WHERE l_f_date <= Forms!TheNameOfTheForm!TheNameOfTheTextbox

编辑评论

您正在使用查询设计窗口,是吗?请尝试此测试查询:

SELECT a.case_id, a.act_date
FROM actions_b AS a
WHERE a.act_date=Forms!Form!Text10

答案 1 :(得分:0)

好的,所以我决定在我的数据库中创建一个简单的2列表,用于存储昨天和今天的日期...我在表单中添加了2个文本框,1个按钮并添加了下一个程序按钮:

Private Sub Command25_Click()
CurrentDb.Execute "DELETE * FROM Datumi"
Dim tbl As Recordset
Set tbl = CurrentDb.OpenRecordset("Datumi")
tbl.AddNew
tbl!brojka = "1"
tbl!datum = Text8.Value
tbl.Update
tbl.AddNew
tbl!brojka = "2"
tbl!datum = Text10.Value
tbl.Update
End Sub

正如您所看到的,单击按钮将清除表并将新值存储为2行...第1行是昨天,第2行是今天...

然后我就从这个表中拉出值:

... where x.brojka=1 and format(a.act_date,'yyyy-mm-dd')=format(x.datum,'yyyy-mm-dd') ...

我确信它可以做得更好,但这个对我有用......

答案 2 :(得分:0)

我通过以下方法解决了这个问题: [软件:MS Access 2013]

CurrentDb.Execute "INSERT INTO [Inventory Transactions] ([Product ID], [Order ID])" _
& "VALUES ( " & Me.Product_ID & ", " & Me.Order_ID & ")"