插入部分现有数据

时间:2013-04-10 12:53:09

标签: delphi delphi-xe2 delphi-2010 delphi-xe

我需要在按钮点击底部显示的TEMP表中添加额外的数据。 我需要复制和插入表中所有现有的FROM - TO - DAYS。 RATE_PRICE将被预先确定&所有新插件(插入时)都相同。 并插入。 enter image description here

示例:我需要加床,费用为15欧元。 现在我想,当我选中一个复选框(并单击一个按钮)以在TEMP表中插入该值(15)但是 它必须遵循网格中显示的日期值。 我想到在TEMP表中添加一个名为EXTRA的额外字段,除非另有字段 选中复选框。因此,当我选择添加一张加床时,加床将跟随显示。价格将是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;

更优雅的方式?

1 个答案:

答案 0 :(得分:0)

您应该让新读者指出您所指的前一个问题(代码)。没有这些信息,他们无法理解您的问题。 Hotel prices spanning multiple dates issue

现在问你的问题。

忘掉你的with absquery4 do begin,有一种更简单的方法 只需在您现有的代码中添加2行新代码。

  • 将价目表扩展到您需要的所有额外内容。
  • e.g。 DBLMSExtraBed:'价格: 15,00`。
  • 添加新的按钮标题:='添加额外内容。
  • clickEvent指向您的CalculationButtonClick。
  • 在计算按钮中测试从事件被触发的按钮。
  • 使用DBLMSExtraBed填写ROOM_TYPE TEditfield。
  • 添加以下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行,最后是:

enter image description here

使用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');

更新

只有Tipp:

在临时表中创建一个字段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;