将文本框值插入 Access SQL 查询
Posted
技术标签:
【中文标题】将文本框值插入 Access SQL 查询【英文标题】:Insert textbox value into Access SQL query 【发布时间】:2012-04-04 09:15:29 【问题描述】:作为 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 和访问查询的新手...我在谷歌上搜索,但有时,就像这次一样,我被卡住了。
谢谢
【问题讨论】:
【参考方案1】:这个结构:
SELECT .... WHERE format(NZ(l_f_date),'yyyy-mm-dd')<='2012-04-03');
不是一个好主意。一般规则是尽量坚持等号左侧的字段(列)名称。所以
SELECT .... WHERE l_f_date <=#2012-04-03#
不会包含空值,我希望您的日期是日期而不是字符串。
接下来添加表单:
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
【讨论】:
嗨,谢谢您的回复。日期是实际日期。但是上面的查询返回空...我这样写: and a.act_date=[Forms]![Form]![Text10] or and a.act_date=Forms!Form!Text10 Access 没有报告任何错误但是有查询后没有结果。 哪个查询返回空?您使用实际日期的查询是否有效?运行查询时表单是否打开? 另一件事 - 您可以编辑您的帖子以包含查询的 SQL 吗? 请尝试上面的测试查询,看看它返回什么。 好的,我试过了,但没用……但现在(我猜)我知道为什么了……我在 actions_b 数据库中的日期是这种格式 2012-02-08 18:44:34 并且表单字段只选择日期,没有小时......我想这就是问题所在,但是当然,另一个我不知道如何解决......【参考方案2】:好的,所以我决定在我的数据库中创建一个简单的 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') ...
我确信它可以做得更好,但这个对我有用......
【讨论】:
【参考方案3】:我解决了这个问题: [软件:MS Access 2013]
CurrentDb.Execute "INSERT INTO [Inventory Transactions] ([Product ID], [Order ID])" _
& "VALUES ( " & Me.Product_ID & ", " & Me.Order_ID & ")"
【讨论】:
以上是关于将文本框值插入 Access SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Access 2010 Web 数据库 - 从局部变量更新文本框值?