【发布时间】:2012-07-18 07:51:59
【问题描述】:
一个关于在 SQLite 中使用触发器进行自动更新的棘手问题...
我在这里遇到一种情况,我需要从特定日期开始以特定间隔在表格中输入条目。 “Category”表中的每个类别都有一个“RecurAmount”,设置为以 4 个固定间隔之一重复:7 天、14 天、1 个月、1 年。 (我用整数 1,2,3,4 表示这些)每个类别都有一个 RecurDate,它最初是由用户选择的。一旦这个日期过去,我需要让应用程序执行以下操作(例如,假设应用程序几个月没有打开并且需要刷新):
1) 从 Category 中选择所有类别,其中 RecurDate 为
2) 插入“Costs”表RecurAmount、RecurDate、CatKey、Recur 值取自“Categories”表到以下 Costs 列:Amount、CostDate、* CatFK*、AutoExp
3) 然后我需要能够让 SQLite 以“Recur”值确定的间隔自动将定期间隔日期的金额插入 Costs 表.因此,如果它的 Recur 值为“1”,我需要从 RecurDate 开始每隔 7 天在 Costs 表中输入一系列条目,并且到今天为止,但不会更远。
4) 一旦所有类别都将其经常性成本实体应用到当前日期...我需要将一个未来日期添加到 CategoryRecurDate 字段中/strong> 表。这将作为下一个自动输入发生之前需要匹配或传递的下一个日期。
以下是我使用的表格: “类别”表:
RecurDate Key RecurAmount Recur RecurInterval
2012-06-26 20 100 1 Weekly
2012-07-18 21 200 1 Weekly
2012-07-10 22 250 3 Monthly
2012-08-10 22 300 3 Monthly
2012-07-16 23 200 2 Fortnightly
2012-06-20 24 100 4 Yearly
“费用”表。这是以固定日期间隔接收插入金额的表。 假设今天的日期是 2012-07-18,当我在很长一段时间后启动应用程序时没有这样做......我需要将 Costs 表更新为如下内容:
CostDate CatFK Amount AutoExp
2012-06-26 20 100 1
2012-07-03 20 100 1
2012-07-10 20 100 1
2012-07-17 20 100 1
2012-07-18 21 200 1
2012-07-10 22 250 3
2012-07-16 23 200 2
2012-06-20 24 100 4
到目前为止,这是我的代码的开始,它试图仅完成每周的经常性费用。它显然不起作用......
PRAGMA recursive_triggers = on
CREATE TEMPORARY TRIGGER MyTrigger
BEFORE INSERT ON Costs
WHEN new.RecurDate < (select date('now','localtime')) BEGIN
INSERT INTO Costs (CostDate, Amount, CatFK, AutoExp)
VALUES (date(new.RecurDate,'+'||7||' days'), Category.RecurAmount, Category.Key, Category.Recur;
END
INSERT INTO Costs (CostDate, Amount, CatFK, AutoExp)
SELECT RecurDate, RecurAmount,Key, Recur from Category
WHERE
Recur =1 ;
如您所见,我正在以某种方式使用触发器来完成此任务,但距离完成此任务还有很长的路要走。复杂性来自我正在处理的不同的重复间隔,并根据这些不同的间隔识别未来的“RecurDate”并将其插入到类别表中。我几乎在想我在 SQLite 之外使用 AS3 和一个循环来构建一个自定义语句来锻炼日期,然后将我需要的内容插入到 SQLite 中。
我想知道是否有人可以给我一些指示,因为这很棘手而且我不是很好:)
谢谢
马可
【问题讨论】: