function TDSServer.UpdateCompany(Delta: OleVariant;
var Msg: WideString): Integer;
var
cdsTemp: TClientDataSet;
i, tempInt: integer;
cmdInsert, cmdDelete, cmdUpdate: TADOCommand;
sname, chMsg: string;
tempstr: WideString;
begin
adoConnDS.Errors.Clear; //for catch the error
cdsTemp := TClientDataSet.Create(Self);
cmdInsert := TADOCommand.Create(Self);
cmdDelete := TADOCommand.Create(Self);
cmdUpdate := TADOCommand.Create(Self);
cmdInsert.Connection := adoConnDS;
cmdDelete.Connection := adoConnDS;
cmdUpdate.Connection := adoConnDS;
Result := 0;
cmdUpdate.CommandText := 'update Company set '
+ 'sCompanyName = :sCompanyName,'
+ 'sHeadName = :sHeadName, sHeadTelNum = :sHeadTelNum,ckind=:ckind,'
+ 'cType = :cType,tSurvey = :tSurvey where sCompanyID = :OLD_sCompanyID'; cmdDelete.CommandText := 'delete from Company where sCompanyID = :OLD_sCompanyID'; cmdInsert.CommandText := 'insert into Company '
+ '(sCompanyID, sCompanyName, sHeadName, sHeadTelNum,ckind,cType, tSurvey)'
+ ' values(:sCompanyID, :sCompanyName, :sHeadName, :sHeadTelNum,:ckind,:cType, :tSurvey)'; adoConnDS.BeginTrans;
try
try
cdsTemp.Data := Delta;
cdsTemp.First;
while not cdsTemp.EOF do
begin
case cdsTemp.UpdateStatus of
usUnModified:
begin
for i := 0 to cmdUpdate.Parameters.Count - 2 do
begin
sName := cmdUpdate.Parameters.Items[i].Name;
cmdUpdate.Parameters.Items[i].Value :=
cdsTemp.fieldbyName(sName).Value;
end;
cmdUpdate.Parameters.ParamByName('OLD_sCompanyID').Value :=
cdsTemp.FieldByName('sCompanyID').value;
end;
usModified:
begin
for i := 0 to cmdUpdate.Parameters.Count - 2 do
begin
if not (cdsTemp.fieldbyName(cmdUpdate.Parameters.Items[i].Name).IsNull ) then
begin
sName := cmdUpdate.Parameters.Items[i].Name;
cmdUpdate.Parameters.Items[i].Value :=
cdsTemp.fieldbyName(sName).Value;
end;
end;
cmdUpdate.Execute;
end;
usInserted:
begin
for i := 0 to cmdInsert.Parameters.Count - 1 do
begin
sName := cmdInsert.Parameters.Items[i].Name;
cmdInsert.Parameters.Items[i].Value :=
cdsTemp.fieldbyName(sName).Value;
end;
cmdInsert.Execute;
end;
usDeleted:
begin
cmdDelete.Parameters.ParamByName('OLD_sCompanyID').Value :=
cdsTemp.Fieldbyname('sCompanyID').Value;
cmdDelete.Execute;
end;
end;
cdsTemp.Next;
end;
adoConnDS.CommitTrans;
except
adoConnDS.RollbackTrans;
CatchADOError(tempInt, tempstr, chMsg);
Msg := tempstr;
Result := tempInt;
end;
finally
cdsTemp.Free;
cmdInsert.Free;
cmdDelete.Free;
cmdUpdate.Free;
end;
end;该函数中的delta是一个临时表,是clientdataset.delta,是返回的一个临时表!1,clientdataset.delta,临时表的意思?
2,OLD_sCompanyID是属于临时表中的记录吗?
2,在上边的代码的“cmdDelete.CommandText := 'delete from Company where sCompanyID = :OLD_sCompanyID'”;中的OLD_sCompanyID是表示临时表的记录吗?
var Msg: WideString): Integer;
var
cdsTemp: TClientDataSet;
i, tempInt: integer;
cmdInsert, cmdDelete, cmdUpdate: TADOCommand;
sname, chMsg: string;
tempstr: WideString;
begin
adoConnDS.Errors.Clear; //for catch the error
cdsTemp := TClientDataSet.Create(Self);
cmdInsert := TADOCommand.Create(Self);
cmdDelete := TADOCommand.Create(Self);
cmdUpdate := TADOCommand.Create(Self);
cmdInsert.Connection := adoConnDS;
cmdDelete.Connection := adoConnDS;
cmdUpdate.Connection := adoConnDS;
Result := 0;
cmdUpdate.CommandText := 'update Company set '
+ 'sCompanyName = :sCompanyName,'
+ 'sHeadName = :sHeadName, sHeadTelNum = :sHeadTelNum,ckind=:ckind,'
+ 'cType = :cType,tSurvey = :tSurvey where sCompanyID = :OLD_sCompanyID'; cmdDelete.CommandText := 'delete from Company where sCompanyID = :OLD_sCompanyID'; cmdInsert.CommandText := 'insert into Company '
+ '(sCompanyID, sCompanyName, sHeadName, sHeadTelNum,ckind,cType, tSurvey)'
+ ' values(:sCompanyID, :sCompanyName, :sHeadName, :sHeadTelNum,:ckind,:cType, :tSurvey)'; adoConnDS.BeginTrans;
try
try
cdsTemp.Data := Delta;
cdsTemp.First;
while not cdsTemp.EOF do
begin
case cdsTemp.UpdateStatus of
usUnModified:
begin
for i := 0 to cmdUpdate.Parameters.Count - 2 do
begin
sName := cmdUpdate.Parameters.Items[i].Name;
cmdUpdate.Parameters.Items[i].Value :=
cdsTemp.fieldbyName(sName).Value;
end;
cmdUpdate.Parameters.ParamByName('OLD_sCompanyID').Value :=
cdsTemp.FieldByName('sCompanyID').value;
end;
usModified:
begin
for i := 0 to cmdUpdate.Parameters.Count - 2 do
begin
if not (cdsTemp.fieldbyName(cmdUpdate.Parameters.Items[i].Name).IsNull ) then
begin
sName := cmdUpdate.Parameters.Items[i].Name;
cmdUpdate.Parameters.Items[i].Value :=
cdsTemp.fieldbyName(sName).Value;
end;
end;
cmdUpdate.Execute;
end;
usInserted:
begin
for i := 0 to cmdInsert.Parameters.Count - 1 do
begin
sName := cmdInsert.Parameters.Items[i].Name;
cmdInsert.Parameters.Items[i].Value :=
cdsTemp.fieldbyName(sName).Value;
end;
cmdInsert.Execute;
end;
usDeleted:
begin
cmdDelete.Parameters.ParamByName('OLD_sCompanyID').Value :=
cdsTemp.Fieldbyname('sCompanyID').Value;
cmdDelete.Execute;
end;
end;
cdsTemp.Next;
end;
adoConnDS.CommitTrans;
except
adoConnDS.RollbackTrans;
CatchADOError(tempInt, tempstr, chMsg);
Msg := tempstr;
Result := tempInt;
end;
finally
cdsTemp.Free;
cmdInsert.Free;
cmdDelete.Free;
cmdUpdate.Free;
end;
end;该函数中的delta是一个临时表,是clientdataset.delta,是返回的一个临时表!1,clientdataset.delta,临时表的意思?
2,OLD_sCompanyID是属于临时表中的记录吗?
2,在上边的代码的“cmdDelete.CommandText := 'delete from Company where sCompanyID = :OLD_sCompanyID'”;中的OLD_sCompanyID是表示临时表的记录吗?
clientdataset.delta,有三个字段.字段名忘了,,自己查查
就会在数据库建立一个实在的数据表,
删除改表就要使用sql上传了。
在这个函数中很巧妙的应用了TClientDataSet。1.clientdataset.delta,临时表的意思?
TClientDataSet(cdsTemp)的表结构应该与一个实际表(Company)的表结构相同.
在cdsTemp放入了要传入的数据(看作临时表),然后根据cdsTemp.UpdateStatus的
状态,把cdsTemp中的数据对实际表(Company)做插入,修改或删除.2.OLD_sCompanyID是属于临时表中的记录吗? 不是, 是参数。
是対下述SQL文的条件付値、找相同的sCompanyID。
update Company
set ...
where sCompanyID = :OLD_sCompanyID