uniDac 更新多表記錄

2021-08-14 11:00:21 字數 2289 閱讀 5045

對於從多個表中獲得資料的資料集,預設情況下只有乙個錶可更新。您應該在updatingtable屬性中指定要更新的表名,否則將會更新字段列表中的第乙個欄位的表。如果setfieldsreadonly選項設定為true(預設情況下),則自動生成的update sql語句中未使用的字段將被標記為唯讀。使用oracle、postgresql和基於odbcbased的複雜查詢提供程式(使用多個表、同義詞、dblinks、聚合字段),我們建議保持extendedfieldsinfo選項。

如果insert / post、update或refreshrecord操作已影響多個記錄,unidac將引發異常。為了抑制此類異常,您應該將strictupdate選項設定為false。

為了更靈活地控制資料修改,您可以填充update sql語句。它們由sqlinsert、sqlupdate、sqldelete和sqlrefresh屬性表示,並在insert / post、edit / post、delete和refresh操作中自動執行。在設計時,您可以在元件編輯器的sql generator選項卡中生成預設更新sql語句。生成的語句可以根據您的需要進行修改。但是,如果為每個記錄動態生成更新查詢,則只會將更改的值傳送到伺服器。

對於某些特殊情況,此功能是不夠的。可以使用tuniupdatesql元件進行擴充套件。tuniupdatesql允許將乙個單獨的tunisql / tuniquery tunistoredproc每個更新操作元件。

上面是unidac幫助檔案中的一段。

其應用場境是這樣的:乙個銷售明細表,字段設計如下:單據編號:d11_1,這個欄位是明細表的primary key,開單日期:d11_2,商品 編號:d11_3。注意這表裡沒有商品名稱,但是在顯示給操作人員看的時候,是需要將商品名稱顯示出來的,否則只看商品編號,怎麼知道是 什麼呢?這個商品名稱是儲存在商品檔案表b12裡,通過銷售表的d11_3和商品檔案表的字段b12_1用left join關聯。

我自己在做這個demo的時候,發現有些問題。首先,我用乙個uniquery來執行多表查詢,然後再插入新記錄行的時候,發現只有多表中指定的表更新了,但其它表顯示不出來。如下圖:

可以看到,名稱和規格等資料沒有顯示出來。

試了很久,後來還是沿用之前的思路和解決這個問題。

首先,用另乙個uniquery控制項來做插入、更新的操作,該uniquery控制項連線另乙個uniconnection。然後通過這個uniconnection來提交資料。(因為如果兩個uniquery連線同乙個uniconnection,乙個提交資料後,另乙個就會關閉)。最後,再將第乙個uniquery關閉後重新開啟。就可以實現目的了。

**如下:

with a01f,d11f do

begin

tryif not a01f.uniconn_do.intransaction then

a01f.uniconn_do.starttransaction;

uniq_do.close;

uniq_do.sql.text:='select * from d11 where d11_1=''''';

uniq_do.open;

for i := 1 to strtoint(d11f.ed11_22.text) do

begin

uniq_do.fieldbyname('d11_1').asstring:=d11f.ed11_1.text;            

uniq_do.fieldbyname('d11_6').asdatetime:=now;

uniq_do.fieldbyname('d11_8').asstring:=fieldbyname('b12_1').asstring;

uniq_do.fieldbyname('d11_10').asstring:=d11f.ed11_10.text;

uniq_do.fieldbyname('d11_22').asinteger:=strtoint(d11f.ed11_22.text);

uniq_do.post;

end;    

a01f.uniconn_do.commit;

uniq_d11.close;          

uniq_d11.open;

except

on e: exception do

begin

a01f.uniconn_do.rollback;

showmessage('提交資料時出錯!錯誤**:'+#13+e.message);

end;

end;

end;

9 Power Query 多表記錄合併

power query追加查詢 多表記錄合併如此簡單 之前我們討論過兩個表的合併,若大於兩個表怎麼辦呢?如下圖 三個表的合併 用同樣的方法給這三個表增加連線。這次我們選擇的不是合併了,而是 追加 三個或者三個以上的表我們只能用這個方法了,選擇 三個或更多表 全部新增到右側,點確定。可以發現之前的三個...

unidac記錄日誌

unidac記錄日誌 1 sql日誌記錄 tunisqlmonitor的onsql事件裡面記錄sql日誌,演示 如下 procedure tfrmdb.unisqlmonitor1sql sender tobject text string flag tdatraceflag begin sflog...

unidac記錄日誌

unidac記錄日誌 1 sql日誌記錄 tunisqlmonitor的onsql事件裡面記錄sql日誌,演示 如下 procedure tfrmdb.unisqlmonitor1sql sender tobject text string flag tdatraceflag begin sflog...