1

我需要在按钮单击时将额外数据添加到底部显示的 TEMP 表中。我需要复制和插入表中所有现有的 FROM - TO - DAYS。RATE_PRICE 将是预先确定的,并且对于所有新插入(插入时)都是相同的。并且还插入了。 在此处输入图像描述

示例:我要加一张加床,费用为 15 欧元。现在我想,当我选中一个复选框(并单击一个按钮)以在 TEMP 表中插入该值(15)时,它必须遵循网格中显示的日期值。我想在名为 EXTRA 的 TEMP 表中添加额外的字段,除非选中复选框,否则它将不可见。因此,当我检查添加加床的选项时,加床将按照显示的价格。房价价格将是 15 然后...日期。

如何插入所需的数据?

更新

我在按钮单击时做到了:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
with ABSQuery4 do begin
ABSQuery4.Close;
ABSQuery4.SQL.Clear;
ABSQuery4.SQL.Text := 'INSERT INTO TEMP (extra,Date_From,Date_To,Rate_price,Days,Total) VALUES (:a1,:a2,:a3,:a4,:a5,:a6)';
ABSquery4.Params.ParamByName('a1').asString :='TT';
ABSquery4.Params.ParamByName('a2').value := cxDateEdit1.date;
ABSquery4.Params.ParamByName('a3').value := cxDateEdit2.date;
ABSquery4.Params.ParamByName('a4').value :='1';
ABSquery4.Params.ParamByName('a5').value :=Daysbetween(cxDateEdit1.Date,cxDateEdit2.Date);
ABSquery4.Params.ParamByName('a6').value := (ABSquery4.Params.ParamByName('a4').value)*(ABSquery4.Params.ParamByName('a5').value);
 ABSquery4.ExecSQL ;
 ABSquery2.Refresh;
end;
end;

还有更优雅的方式吗?

4

1 回答 1

0

您应该新读者指出您所指的上一个问题(代码)。没有这些信息,他们无法理解您的问题。跨越多个日期的酒店价格问题

现在回答你的问题。

忘记你的with absquery4 do begin,有一个更简单的方法。
只需将 2 行新代码添加到现有代码中。

  • 将您的价目表扩展到您需要的所有附加功能。
  • 例如DBLMSExtraBed:“价格:15,00”。
  • 添加一个新的按钮标题:='Add Extras`。
  • clickEvent 指向您的 CalculationButtonClick。
  • 从触发事件的按钮在 CalculationButtonClick 中进行测试。
  • 用 填写 ROOM_TYPE TEditfield DBLMSExtraBed
  • 添加以下 WITH .. IF .. THEN

...

with sender As TButton do if name='DoCalc'  then begin

以上

ABSQuery2.Close;
ABSQuery2.SQL.Text:='DELETE from TEMP';
ABSQuery2.ExecSQL;
ABSQuery2.SQL.Text:='SELECT * from TEMP ORDER BY ID ';
ABSQuery2.Open;

和结束;

end;

如果事件是从AddExtrasButton. 它不会清除您的临时表。
所以表仍然是打开的,新的数据将被插入。
现在你有 3 行,最后是:

在此处输入图像描述

只要AddExtrasButton价格表中有额外内容,您就可以添加任意数量的额外内容。

使用表:

CREATE DATABASE IF NOT EXISTS pricelist;
USE pricelist;

DROP TABLE IF EXISTS `room_rates`;
CREATE TABLE `room_rates` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `CENIK_ID` int(10) unsigned NOT NULL,
  `ROOM_TYPE` varchar(45) NOT NULL,
  `RATE_START_DATE` datetime NOT NULL,
  `RATE_END_DATE` datetime NOT NULL,
  `RATE_PRICE` decimal(5,2) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;


/*!40000 ALTER TABLE `room_rates` DISABLE KEYS */;
INSERT INTO `room_rates` (`ID`,`CENIK_ID`,`ROOM_TYPE`,`RATE_START_DATE`,`RATE_END_DATE`,`RATE_PRICE`) VALUES 
 (1,1,'DBLMS','2013-01-02 00:00:00','2013-04-26 00:00:00','128.00'),
 (2,1,'DBLMS','2013-10-22 00:00:00','2013-12-18 00:00:00','128.00'),
 (3,1,'DBLMS','2013-04-26 00:00:00','2013-06-22 00:00:00','146.00'),
 (4,1,'DBLMS','2013-09-21 00:00:00','2013-10-20 00:00:00','146.00'),
 (5,1,'DBLMSExtraBed','2013-01-02 00:00:00','2013-06-22 00:00:00','15.00');

更新

只有一个提示:

在您的临时表中创建一个 Field EXTRAS

procedure TForm1.AdvGlowButton1Click(Sender: TObject);
var
 isExtra : Boolean;
[...]


with sender As TButton do if name='AdvGlowButton1' then 
     isExtra := False else 
     isExtra := True;

if NOT isExtra then begin
  ABSQuery2.Close;
  ABSQuery2.SQL.Text:='DELETE from TEMP';
  ABSQuery2.ExecSQL;
  ABSQuery2.SQL.Text:='SELECT * from TEMP ORDER BY ID ';
  ABSQuery2.Open;
end;

[...]

if isExtra then 
   ABSQuery2.FieldByName('EXTRAS').AsString:=mem_ROOM_TYPE 
   else
   ABSQuery2.FieldByName('ROOM_TYPE').AsString:=mem_ROOM_TYPE;
于 2013-04-10T15:38:27.737 回答