我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網站首頁 > Proe教程

ProE二次開發中PDMLDBStartTransaction函數的使用

時間:2011-02-24 09:39:31 來源:

  本文介紹了ProE二次開發中PDMLDBStartTransaction函數的使用。

  在每個Pro/INTRALINK Toolkit程序中,都離不開PDMLDBStartTransaction和PDMLDBCommitTransaction函數,有以下幾點需要注意:

  1)PDMLDBStartTransaction和PDMLDBCommitTransaction這兩個函數必須成對使用;

  2)一般情況下,在獲得License并正常登錄到INTRALINK(也就是正常連接INTRALINK數據庫)后,使用PDMLDBStartTransaction(ldb)函數來啟動事務,接下來才可以對INTRALINK的W/S進行操作;

  3)在最后釋放License之前,處理完所有與INTRALINK相關的操作之后,必須使用PDMLDBCommitTransaction(ldb)函數來提交事務,保存之前所有對INTRALINK數據庫的相關操作;

  4)在程序處理過程中,有兩種情況無法在啟動事務的狀態下進行:

  a)使用PDMLDBFetch函數從C/S中檢出指定對象到W/S中;

  b)使用ProWorkspaceRegister函數在打開的Pro/ENGINEER中連接指定的一個W/S;

  當出現以上兩種情況時,必須先調用PDMLDBCommitTransaction函數提交事務,才可以正常調用以上PDMLDBFetch和ProWorkspaceRegister函數,處理完后如果還需要使用INTRALINK數據庫,則需要重新啟動事務;

  如以下程序:

  ...

  status = PDMLDBCommitTransaction(g_ldb);

  (status == PDM_SUCCESS)?LogPrint(" PDMLDBCommitTransaction success "):LogPrint(" PDMLDBCommitTransaction failed ");

  curpiv.Localize = 1;

  status = PDMLDBFetch(g_ldb, (PTCSTRING)I_SpaceName, 1, &curpiv, 0, NULL, 1, 1, 0, NULL, 0, NULL, &checkout);

  (status == PDM_SUCCESS)?LogPrint(" PDMWorkspaceFetch success "):LogPrint(" PDMWorkspaceFetch failed ");

  status = PDMLDBStartTransaction(g_ldb);

  (status == PDM_SUCCESS)?LogPrint( " PDMLDBStartTransaction success "):LogPrint(" PDMLDBStartTransaction failed ");

  ...

  5)一旦發生提交事務失敗,數據庫將自動回滾,自動取消上一次啟動事務之后對INTRALINK數據庫所有的更改;

  In Pro/INTRALINK Toolkit, no workspace handle is valid outside a workspace transaction. That is, after you close a workspace transaction, you may not be able to access the object using the handles from the previous transactions.

  當重新啟動事務后,如果還需要使用工作區的句柄,則需要重新獲取,如可以通過工作區的名稱重新獲取。

  補充以下2點:

  1)當應用程序需要和工作區交換數據之前,必須啟動事務;在交換數據完成之后,必須提交事務。

  2)當應用程序直接與公共區進行通信時,不需要啟動事務,系統將自動決定啟動、提交或取消事務。