各位大俠﹗現請教一個ADO方面的問題﹐請指點迷路.問題如下﹕ 現做一BOM的MIS﹐有兩個表﹐主从表结构,主表(3字段)和从表(8字段)通过主表的三個字段关联, 主从表都是设的批更新模式.要實現對主從表的增,刪,改,存,取消等基本功能. 經測試﹐主從表的刪除都可實現(如只刪從表某一記錄).(從表的刪除在主表的BeforeDelete中實現) 取消動作也可實現。(以下有部分代碼) 但是:新增﹐修改﹐保存還有問題﹐無法做到. 請問用什么處理方法(有代碼實例更好)? 歡迎有ADO這方面實際經驗的高手與我討論, 我的email: [email protected],不勝感激!!!! 因系統趕工期﹐緊急求助!!!! 請各路大俠指教﹐指點均送分!!!!部分代碼如下﹕(原始拷貝)主表:ADODataSet1
從表:ADODataSet2CursorType: ctKeyset,
CursorLocation: clUseClient,
LockType: ltBatchOptimistic//delete
//--------------------------------------------------------- dele beginvar
DeleteSucessFlag : boolean;
//對記錄作刪除標記 F:無刪除動作 T:有刪除﹐或刪除未提交
function DoDelete(myData:TADODataSet):Boolean; //刪除
begin
Result := False;
try
if not myData.IsEmpty then
myData.Delete;
Result := True;
finally
end;
end;procedure TfrmBomi01.mideleteClick(Sender: TObject);
begin
if MessageBox(0,'要刪除當前記錄嗎﹖','確認提示',MB_OKCANCEL) = IDOK then
begin
if ActiveControl = gdBody1 then //只刪除單身的當前記錄
begin
if ADODataSet2.RecordCount > 0 then //單身的記錄數>0
if DoDelete(ADODataSet2) then
DeleteSucessFlag := True
else
MessageDlg('刪除記錄失敗﹗請取消并稍后再試... ',mtError,[mbYes],0)
else //單身的記錄=0時﹐刪除當前單據﹐即表頭
if DoDelete(ADODataSet1) then
DeleteSucessFlag := True
else
MessageDlg('刪除記錄失敗﹗請取消并稍后再試... ',mtError,[mbYes],0);
end
else //單身的記錄=0,刪除當前表單(表頭+表身)
if DoDelete(ADODataSet1) then
DeleteSucessFlag := True
else
MessageDlg('刪除記錄失敗﹗請取消并稍后再試... ',mtError,[mbYes],0);
end;
//--------------------------------------------------------- dele end//cancel
//--------------------------------------------------------- cancel begin
...
if not DataModuleBOM.ADOConnectionMain.InTransaction then
begin
DataModuleBOM.ADOConnectionMain.BeginTrans;
try
ADODataSet1.CancelBatch;
ADODataSet2.CancelBatch;
DataModuleBOM.ADOConnectionMain.RollbackTrans;
except
end
else begin
Application.MessageBox('服務器忙請稍后再試!','系統提示',MB_OK+mb_iconWarning);
end;
//--------------------------------------------------------- cancel end
從表:ADODataSet2CursorType: ctKeyset,
CursorLocation: clUseClient,
LockType: ltBatchOptimistic//delete
//--------------------------------------------------------- dele beginvar
DeleteSucessFlag : boolean;
//對記錄作刪除標記 F:無刪除動作 T:有刪除﹐或刪除未提交
function DoDelete(myData:TADODataSet):Boolean; //刪除
begin
Result := False;
try
if not myData.IsEmpty then
myData.Delete;
Result := True;
finally
end;
end;procedure TfrmBomi01.mideleteClick(Sender: TObject);
begin
if MessageBox(0,'要刪除當前記錄嗎﹖','確認提示',MB_OKCANCEL) = IDOK then
begin
if ActiveControl = gdBody1 then //只刪除單身的當前記錄
begin
if ADODataSet2.RecordCount > 0 then //單身的記錄數>0
if DoDelete(ADODataSet2) then
DeleteSucessFlag := True
else
MessageDlg('刪除記錄失敗﹗請取消并稍后再試... ',mtError,[mbYes],0)
else //單身的記錄=0時﹐刪除當前單據﹐即表頭
if DoDelete(ADODataSet1) then
DeleteSucessFlag := True
else
MessageDlg('刪除記錄失敗﹗請取消并稍后再試... ',mtError,[mbYes],0);
end
else //單身的記錄=0,刪除當前表單(表頭+表身)
if DoDelete(ADODataSet1) then
DeleteSucessFlag := True
else
MessageDlg('刪除記錄失敗﹗請取消并稍后再試... ',mtError,[mbYes],0);
end;
//--------------------------------------------------------- dele end//cancel
//--------------------------------------------------------- cancel begin
...
if not DataModuleBOM.ADOConnectionMain.InTransaction then
begin
DataModuleBOM.ADOConnectionMain.BeginTrans;
try
ADODataSet1.CancelBatch;
ADODataSet2.CancelBatch;
DataModuleBOM.ADOConnectionMain.RollbackTrans;
except
end
else begin
Application.MessageBox('服務器忙請稍后再試!','系統提示',MB_OK+mb_iconWarning);
end;
//--------------------------------------------------------- cancel end
解决方案 »
- DBGrid中如何动态删除一个Columns
- DBgrid列的数据回写问题! 求救!!!
- 急求:有个关于LIKE的数据查询,请大家进来探讨!
- 一个关于截获异常的问题!!!!!!急!在线等!!!
- 各位大虾有没有 Delphi6 传输图片的例子(基于TClientSocket 和TServerSocket的)
- CNN称微软总裁比尔·盖茨在洛山矶被暗杀
- Excel里的TExcelWorksheet不能控制列宽?
- 做一个分布式的例子时的问题
- 用DELPHI如何将一个数据库导出导入为HTML,WORD,EXCEL文档。
- Alter TABLE add添加字段时参数的问题
- access数据库的可更新查询问题
- 查找文件的问题.
...
except
...(你的内容呢?)
另外主从表只要在后台做好主从关系,在前台也做好字段的连接,那么基本上是没有问题了。
...
except
//因為是rollbackTrans,不用代碼了
end;Arionma兄, 可否更祥細。
然后在delphi中分别建立两个adotable,设置好相关的dataset和其他,随后选择从表,设置其mastersource为主表的dataset,然后设置masterfield,选择对应的字段。
我用的是 ADODataSet,上述的設置也做了。但多用戶時﹐會不會出問題啊﹖