关于在 SQLite 中使用触发器进行自动更新的一个棘手问题......
我在这里遇到一种情况,我需要从特定日期开始以特定间隔在表格中输入条目。“ Category ”表中的每个类别都有一个“ RecurAmount ”,设置为以 4 个固定间隔之一重复:7 天、14 天、1 个月、1 年。(我用整数 1、2、3、4 表示这些)每个类别都有一个RecurDate,它最初是由用户选择的。一旦这个日期过去,我需要让应用程序执行以下操作(例如假设应用程序几个月没有打开并且需要刷新):
1) 从类别中选择所有类别,其中RecurDate为 <= date('now') ... 这些是要刷新的类别。
2) 插入“ Costs ”表RecurAmount , RecurDate , CatKey , Recur取自“ Categories ”表的值到以下Costs列中: Amount , CostDate ,* CatFK *, AutoExp
3)然后我需要能够让 SQLite以“ Recur ”值确定的间隔自动将定期间隔日期的金额插入到Costs表中。因此,如果它的Recur值为“1”,我需要从RecurDate开始每隔 7 天在Costs表中输入一系列条目,直到今天的日期,但不再赘述。
4) 一旦所有类别都将其经常性成本实体应用到当前日期...我需要将一个未来日期添加到类别表中的RecurDate字段中。这将作为下一个自动输入发生之前需要匹配或传递的下一个日期。
以下是我正在使用的表格:“类别”表格:
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 中。
我想知道是否有人可以给我一些指示,因为这很棘手而且我不是很好:)
谢谢
马可