對於從多個表中獲得資料的資料集,預設情況下只有乙個錶可更新。您應該在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...