使用DataSetProvider的ApplyUpdate增加或者修改数据的样例
2011-11-16 19:14
274 查看
function TRDMEnterCaseServer.UpdateBugInfo(BugDelta: OleVariant;
var aMsg: OleVariant): OleVariant;
var
ErrorCount: Integer;
BUGID: Integer;
begin
ErrorCount := 0; // 用于在更新过程中记录发生错误的次数
Result := False; // 返回本次操作是否成功
aMsg := ''; // 若发生错误返回错误信息
try
if not VarIsEmpty(BugDelta) then
begin
ClientDs.Data := BugDelta;
ClientDs.First();
BUGID := 1;
while not ClientDs.Eof do
begin
case ClientDs.UpdateStatus of
usInserted:
begin
while IDIsExist(adoQryTemp, 'BL_TBL_BUG', 'BUGID', IntToStr(BUGID)) do// 确保BUGID的编号唯一
BUGID := BUGID + 1;
ClientDs.Edit();
ClientDs.FieldByName('BUGID').AsInteger := BUGID;
ClientDs.Post;
BUGID := BUGID + 1;
end;
usUnmodified:
begin
ClientDs.Next();
end;
end;
ClientDs.Next();
end;
dsProvider.DataSet := adoQry;
adoQry.Close;
adoQry.Connection := DMCaseServer.adoCon1;
adoQry.SQL.Clear;
// 若要实现无状态,这一步是必须的,因为要根据以上语句生成更新语句
adoQry.SQL.Add('Select * from BL_V_BUG where BUGID = -1');
adoQry.Open;
dsProvider.ApplyUpdates(ClientDs.Data, -1, ErrorCount);
end;
if ErrorCount <> 0 then
begin
aMsg := FErrorMsg;
exit;
end;
Result := True;
except
on E: Exception do
begin
aMsg := E.Message;
end;
end;
end;
// 判断某个表中的某个字段中是否存在此值
function IDIsExist(ado: TADOQuery; TableName, FieldName, FieldValue: string): Boolean;
begin
Result := False;
with ado do
begin
Close;
SQL.Clear;
SQL.Add('select * from ' + TableName + ' where '+ FieldName + ' = ' + FieldValue);
Open;
if RecordCount > 0 then
Result := True;
end;
end;
var aMsg: OleVariant): OleVariant;
var
ErrorCount: Integer;
BUGID: Integer;
begin
ErrorCount := 0; // 用于在更新过程中记录发生错误的次数
Result := False; // 返回本次操作是否成功
aMsg := ''; // 若发生错误返回错误信息
try
if not VarIsEmpty(BugDelta) then
begin
ClientDs.Data := BugDelta;
ClientDs.First();
BUGID := 1;
while not ClientDs.Eof do
begin
case ClientDs.UpdateStatus of
usInserted:
begin
while IDIsExist(adoQryTemp, 'BL_TBL_BUG', 'BUGID', IntToStr(BUGID)) do// 确保BUGID的编号唯一
BUGID := BUGID + 1;
ClientDs.Edit();
ClientDs.FieldByName('BUGID').AsInteger := BUGID;
ClientDs.Post;
BUGID := BUGID + 1;
end;
usUnmodified:
begin
ClientDs.Next();
end;
end;
ClientDs.Next();
end;
dsProvider.DataSet := adoQry;
adoQry.Close;
adoQry.Connection := DMCaseServer.adoCon1;
adoQry.SQL.Clear;
// 若要实现无状态,这一步是必须的,因为要根据以上语句生成更新语句
adoQry.SQL.Add('Select * from BL_V_BUG where BUGID = -1');
adoQry.Open;
dsProvider.ApplyUpdates(ClientDs.Data, -1, ErrorCount);
end;
if ErrorCount <> 0 then
begin
aMsg := FErrorMsg;
exit;
end;
Result := True;
except
on E: Exception do
begin
aMsg := E.Message;
end;
end;
end;
// 判断某个表中的某个字段中是否存在此值
function IDIsExist(ado: TADOQuery; TableName, FieldName, FieldValue: string): Boolean;
begin
Result := False;
with ado do
begin
Close;
SQL.Clear;
SQL.Add('select * from ' + TableName + ' where '+ FieldName + ' = ' + FieldValue);
Open;
if RecordCount > 0 then
Result := True;
end;
end;
相关文章推荐
- 如何解决使用addBatch()和executeBatch()无法批量增加删除修改数据库数据等问题
- 使用强类型DataSet增加数据并获取自动增长的ID
- JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询
- DataSet增加修改删除一个数据
- 使用c#进行数据库的查看增加修改删除数据
- 使用Google API 下拉刷新或者增加数据 SwipeRefreshLayout
- 使用 DataSet 来修改数据
- JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
- 在ORACLE中给已有数据的表增加、修改、删除一个字段(或一个列)或者多个字段(或多个列)的问题
- 中继器的使用 —— 关联/增加/删除/修改数据
- PHP foreach 加&遍历的同时改变原数组即修改数据或者增加数据
- asp.net中使用Dataset导出数据到xml或者xls
- 在linux下使用find命令查找某一个时间点以后创建或者修改的文件
- Android;sql数据库:关于删除数据库数据无法刷新listview并且新listview的修改增加功能出现bug的问题
- [原创]使用DataList数据修改,保存,取消
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
- 使用 Navicat 自动备份数据及修改保存路径
- 使用DataAdpater自动批量更新DataSet中的数据到数据库
- 使用phpMyAdmin批量修改Mysql数据表前缀的方法
- 使用表表达式修改数据