我的代码写得很丑的,不敢拿出来献丑的,不过如果真的对你有帮助的话,我也不怕丑了。:)
服务器端的接口://***********************************************************
//媒体时段信息与时段价格存贮
//接口名:Mediaoftime
//参数:
//输入:Option 类型:Shortint
// 说明:操作类型:1表示插入,2表示删除
//输入:Meoftimedata 类型:OleVariant(可变类型,应该输入一个数组)
// 说明:数据元素为一维数组,9个元素,
// 从1至7分别表示:
// 0 :媒体名称
// 1: 执行时间
// 2: 时段
// 3:起始播出时间
// 4:结束播出时间
// 5:长度
// 6:说明
// 7:播出按排
// 8: 时段类型
//输入:LevelCount 类型:OleVariant(可变类型)
// 说明:根据播出等级数目确定下面两个数组的长度。
//输入:LevelName 类型:OleVariant(可变类型,应该输入一个数组)
// 说明:根据前台所做的所做的播出等级确定数组的长度,
// 每一个数组元素表示一个播出等级。
//输入:LevelPrice 类型:OleVariant(可变类型,应该输入一个数组)
// 说明:根据前台所做的所做的播出等级确定数组的长度,
// 每一个数组元素表示对应的播出等级的价格。
//输出:Ifsucceed 类型:string
// 说明:字符1表示存贮成功,0表示存贮失败
// 2表示要增加的时段已经存在
//调试通过
//时间:
//***********************************************************
procedure TUserInfoData.Mediaoftime(Option: Shortint;
var Meoftimedata: OleVariant; LevelCount: Shortint; var levelname,
LevelPrice: OleVariant; out Ifsucceed: WideString);
var
Ptpid: integer; //时段价格ID
MdId: integer; //媒体名称ID
Icount: integer;
PtiId: integer; //媒体时段ID
PtoId: integer; //播出级别ID
Tablename: string;
Fieldname: string;
Fieldnamename: string;
Fieldnamevalue: string;
begin
case option of
1:begin
Tablename:='Media_Period_Of_Time_Information';
Fieldname:='Pti_pot';
Fieldnamevalue:=Meoftimedata[2];
if not Estimate(Tablename,Fieldname,Fieldnamevalue) then
begin
Tablename:='Period_Of_Time_And_Price';
Fieldname:='Ptp_id';
Ptpid:=ProdurePreID(Tablename,Fieldname);
Tablename:='Media_Period_Of_Time_Information';
Fieldname:='Pti_id';
PtiId:=ProdurePreID(Tablename,Fieldname);
Tablename:='Media_Name';
Fieldname:='MDA_N_ID';
Fieldnamename:='Mda_name';
Fieldnamevalue:=Meoftimedata[0];
MdId:=Getid(Tablename,Fieldname,Fieldnamename,Fieldnamevalue);
try
ADOUserInfoConnect.BeginTrans;
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO Media_Period_Of_Time_Information( ');
SQL.Add('Pti_id,');
SQL.Add('Pti_imp_date,');
SQL.Add('Mda_n_id,');
SQL.Add('Pti_pot,');
SQL.Add('Pti_use,');
SQL.Add('Pti_marker,');
SQL.Add('Mps_id) VALUES(');
SQL.Add('
tiid,');
SQL.Add('
tiimpdate,');
SQL.Add(':Mdinid,');
SQL.Add(''+quotedstr(Meoftimedata[2])+',');
SQL.Add('
tiuse,');
SQL.Add('
timarker,');
SQL.Add(''+quotedstr(Meoftimedata[8])+')');
Parameters.ParamByName('Ptiid').DataType:=ftInteger;
Parameters.ParamByName('Ptiid').Value:=Ptiid;
Parameters.ParamByName('Ptiimpdate').DataType:=ftDateTime;
Parameters.ParamByName('Ptiimpdate').Value:=Meoftimedata[1];
Parameters.ParamByName('Mdinid').DataType:=ftInteger;
Parameters.ParamByName('Mdinid').Value:=MdId;
Parameters.ParamByName('Ptiuse').DataType:=ftstring;
Parameters.ParamByName('Ptiuse').Value:='1';
Parameters.ParamByName('Ptimarker').DataType:=ftBoolean;
Parameters.ParamByName('Ptimarker').Value:=1;
ExecSQL;
end;
with Query2 do
begin
for Icount:=0 to LevelCount-1 do
begin
Tablename:='Period_Of_Time_Order';
Fieldname:='Pto_id';
Fieldnamename:='Pto_order';
Fieldnamevalue:=LevelName[Icount];
PtoId:=Getid(Tablename,Fieldname,Fieldnamename,Fieldnamevalue);
Close;
SQL.Clear;
SQL.Add('INSERT INTO Period_Of_Time_And_Price( ');
SQL.Add('Ptp_id,');
SQL.Add('Pti_id,');
SQL.Add('Play_deploy,');
SQL.Add('Play_begin,');
SQL.Add('pto_id,');
SQL.Add('Ptp_price,');
SQL.Add('ptp_time,');
SQL.Add('play_end,');
SQL.Add('Ptp_marker) VALUES(');
SQL.Add('
tpid,');
SQL.Add('
tiid,');
SQL.Add(''+quotedstr(Meoftimedata[7])+',');
SQL.Add('
laybegin,');
SQL.Add('
toid,');
SQL.Add('
rice,');
SQL.Add(''+quotedstr(Meoftimedata[5])+',');
SQL.Add('
layend,');
SQL.Add('
tpmarker)');
Parameters.ParamByName('Ptpid').DataType:=ftInteger;
Parameters.ParamByName('Ptpid').Value:=Ptpid;
Parameters.ParamByName('Ptiid').DataType:=ftInteger;
Parameters.ParamByName('Ptiid').Value:=PtiId;
Parameters.ParamByName('Playbegin').DataType:=ftTime;
Parameters.ParamByName('Playbegin').Value:=Meoftimedata[3];
Parameters.ParamByName('Ptoid').DataType:=ftInteger;
Parameters.ParamByName('Ptoid').Value:=PtoId;
Parameters.ParamByName('price').DataType:=ftCurrency;
Parameters.ParamByName('price').Value:=LevelPrice[Icount];
Parameters.ParamByName('Playend').DataType:=ftTime;
Parameters.ParamByName('Playend').Value:=Meoftimedata[4];
Parameters.ParamByName('Ptpmarker').DataType:=ftBoolean;
Parameters.ParamByName('Ptpmarker').Value:=1;
ExecSQL;
Ptpid:=Ptpid+1;
end;
end;
ADOUserInfoConnect.CommitTrans;
Ifsucceed:='1';
Except
ADOUserInfoConnect.RollbackTrans;
Ifsucceed:='0';
end;
end
else
begin
Ifsucceed:='2';
end;
end;
2:begin //删除
with query1 do
begin
try
Close;
SQL.Clear;
SQL.Add('Update Media_Period_Of_Time_Information set Pti_marker=
timarker where Pti_pot=
tipot');
Parameters.ParamByName('Ptimarker').DataType:=ftinteger;
Parameters.ParamByName('Ptimarker').Value:=2;
Parameters.ParamByName('Ptipot').DataType:=ftstring;
Parameters.ParamByName('Ptipot').Value:=Meoftimedata[2];
ExecSQL;
Ifsucceed:='1';
except
Ifsucceed:='0';
end;
end;
end;
end;
end;
客户端的调用:
procedure TfrmPerTimePrice.btSaveClick(Sender: TObject);
var
Icount: integer;
strPlan: string;
Option: integer;
Medperprice: variant;
levelcount: integer;
levelname: variant;
levelprice: variant;
Ifsucceed: string;
begin
//保存媒体的时段价格信息
//自动时段编号和编码
try
//strPlan := IntToStr(ord(cbWeek1.))+IntToStr(ord(cbWeek2.checked))+
// IntToStr(ord(cbWeek3.checked))+IntToStr(ord(cbWeek4.checked))+
// IntToStr(ord(cbWeek5.checked))+IntToStr(ord(cbWeek6.checked))+
// IntToStr(ord(cbWeek7.checked));
strPlan:=getplan(fcButtonGroup1fcShapeBtn1.Down,fcButtonGroup1fcShapeBtn2.Down,fcButtonGroup1fcShapeBtn3.Down,
fcButtonGroup1fcShapeBtn4.Down,fcButtonGroup1fcShapeBtn5.Down,fcButtonGroup1fcShapeBtn6.Down,
fcButtonGroup1fcShapeBtn7.Down);
Option:=1;
Medperprice:=vararraycreate([0,8],varvariant);
MedperPrice[0]:=DBLookupcombobox1.Text;
MedperPrice[1]:=dtDate.Date;
MedperPrice[2]:=edtperTime.Text;
MedperPrice[3]:=medtTime.Time;
MedperPrice[4]:=medtendTime.Time;
MedperPrice[5]:=edtLong.Text;
MedperPrice[6]:=meMemo.Text;
MedperPrice[7]:=strPlan;
MedperPrice[8]:=DBLookupcombobox1.KeyValue;
levelcount:=tsgrid1.Rows-1;
levelname:=vararraycreate([0,levelcount],varvariant);
levelprice:=vararraycreate([0,levelcount],varvariant);
for Icount:=0 to levelcount-1 do
begin
levelname[Icount]:=tsgrid1.Cell[1,Icount+1];
end;
for Icount:=0 to levelcount-1 do
begin
levelprice[Icount]:=tsgrid1.Cell[2,Icount+1];
end;
DataModulemedinfo.SocketConnection1.AppServer.Mediaoftime(Option,Medperprice,levelcount,levelname,levelprice,Ifsucceed);
case strtoint(Ifsucceed) of
1:
showmessage('数据插入成功!');
0:
showmessage('数据插入失败!');
2:
showmessage('新插入的数据,在数据库中已经存在!请重新输入数据!');
end;
edtPerTime.SetFocus;
//btAdd.Enabled := true;
btSave.Enabled := false;
except
//btAdd.Enabled := false;
btSave.Enabled := true;
end;
end;