VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

從 LOCAL VIEW UPDATE 到 REMOTE VIEW 發生錯誤

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
goodnight



註冊時間: 2008-10-13
文章: 473
來自: 台南市

第 1 樓

發表發表於: 星期五 五月 15, 2009 9:32 am    文章主題: 從 LOCAL VIEW UPDATE 到 REMOTE VIEW 發生錯誤 引言回覆

各位大大
末學在進行資料更新, 在做到一個固定的記錄時, 發生更新的錯誤, 狀況說明
1.因為資料集來自兩個 ODBC , 所以創建所需的 REMOTE VIEW
2.再從 REMOTE VIEW 創建要修改的 LOCAL VIEW
3.當在 LOCAL VIEW 完成修改後, 執行 TABLEUPDATE(1, .F.), 在固定筆數就會發生錯誤編號 1585
4.僅從 LOCAL VIEW 更新到 REMOTE VIEW 而已

希望大大能協助一下, 是否我處理資料的方式不正確??還是有其他的特殊原??


以下為 DEBUG 資料

從 AERROR 取得的錯誤資料:
1.1585
2.Update conflict in cursor 'PURDAY_VIEW'.
3.PURDAY_VIEW
4. 0
5.NULL
6.NULL
7.NULL

經查表後 ERR 1585 的狀況是:
發生更新衝突。請使用含有 lForce 參數的 TABLEUPDATE( ) 函數提交該更新,或使用 TABLEREVERT( ) 向後回復更新操作。

說明是:
更新資料集時發現了開放模式鎖定衝突。確保更新鍵值正確。
如果想向基本資料表格提交所做的變更,請呼叫 TABLEUPDATE( ) 函數並帶上 lForce 參數。這將覆寫最後一次取資料集時對基本資料表格所做的變更。
呼叫 TABLEREVERT( ) 函數可以放棄對資料集所做的更改。

以下是程式:


*ON ERROR DO errhand && errhand 是錯誤處理程序

PUBLIC M.PUR_DAY, M.CUST_PNO, M.ERROR_MSG

&& IF INVMB.MB025 = "P", PUR_DAY = 4
&& IF INVMB.MB025 = "S", PUR_DAY = 5
&&
&& CUST_PRODUCT

SET CENTURY ON
SET DATE YMD
SET DECIMALS TO 0
SET FIXED OFF
SET DEFAULT TO d:\foxproapp\util
SET DELETED ON
SET MULTILOCKS ON
SET PATH TO d:\foxproapp additive
SET SAFETY OFF
SET STATUS ON
SET STATUS BAR ON
SET SYSMENU OFF
SET SYSMENU AUTOMATIC

CLOSE TABLES ALL

BAK_DATE = STRTRAN(DTOC(DATE()), "/", "") + "-" + STRTRAN(TIME(), ":", "")


&& 產品主檔 REMOTE VIEW
USE INVMB_VIEW AGAIN IN 0
SELECT INVMB_VIEW
*SET_MODE = CURSORSETPROP("Buffering", 5)

IF REQUERY("INVMB_VIEW") = 0
MESSAGEBOX("資料沒有更新成功或資料沒有異動更新, 繼續備份", 0)
ENDIF
FILENAME = "\FOXPROAPP\UTIL\" + "INVMB_BAK-" + BAK_DATE + ".DBF"
FILENAME = "INVMB_BAK-" + BAK_DATE + ".DBF"

COPY TO (FILENAME)

&& 採購明細檔 REMOTE VIEW
USE HBYBOMD_VIEW AGAIN IN 0
SELECT HBYBOMD_VIEW

M.CUST_PNO = "%" && 全部的資料, 適用 like

IF REQUERY("HBYBOMD_VIEW") = 0
MESSAGEBOX("資料沒有更新成功或資料沒有異動更新, 繼續備份", 0)
ENDIF
FILENAME = "HBYBOMD_BAK-" + BAK_DATE

COPY TO (FILENAME)

&& 客戶品號檔 REMOTE VIEW
USE COPMG_VIEW AGAIN IN 0
SELECT COPMG_VIEW

M.CUST_PNO = "%" && 全部的資料, 適用 like

IF REQUERY("COPMG_VIEW") = 0
MESSAGEBOX("資料沒有更新成功或資料沒有異動更新", 0)
ENDIF


&& 整合來自兩個 DATABASE REMOTE VIEW 的資料 - LOCALVIEW
USE PURDAY_VIEW AGAIN IN 0
SELECT PURDAY_VIEW

SET_MODE = CURSORSETPROP("Buffering", 5)
IF SET_MODE = .T.
SCAN FOR MB025 = "P"
REPLACE MB036 WITH 4
ENDSCAN
BROWSE

UPD_MODE = TABLEUPDATE(1,.F.) <==錯誤的發生源

UPD_MODE = TABLEUPDATE(1,.F.)
IF UPD_MODE = .F.
AERROR(aErrorArray)
ERROR_MSG = "ERROR MSG: "
FOR I = 1 TO 7
DO CASE
CASE VARTYPE(AErrorArray(I)) = "N"
ERR_TEXT = TRANSFORM(AErrorArray(I), "9999")
CASE VARTYPE(AErrorArray(I)) = "X"
ERR_TEXT = "NULL"
CASE VARTYPE(AErrorArray(I)) = "C"
ERR_TEXT = AErrorArray(I)
OTHERWISE
ERR_TEXT = "ERR"
ENDCASE
ERROR_MSG = ERROR_MSG + "/" + ERR_TEXT
ENDFOR
MESSAGEBOX(ERROR_MSG, 0)

TABLEREVERT(.T.)
MESSAGEBOX("取消所有資料的更新", 16, "TABLE 更新")
ENDIF

ELSE
=MESSAGEBOX("操作未成功!",16,"操作狀態")
ENDIF

SET DECIMALS TO 2
SET FIXED ON
*SET_MODE = CURSORSETPROP("Buffering", 1)
*SET MULTILOCKS OFF

ON ERROR && 恢復系統錯誤處理程式


RETURN
ENDPROC

PROCEDURE errhand
= AERROR(aErrorArray) && 最近發生錯誤的資料
CLEAR
? '該錯誤提供了以下資訊' && 顯示訊息
FOR n = 1 TO 7 && 顯示陣列的所有元素
? aErrorArray(n)
ENDFOR
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 2 樓

發表發表於: 星期五 五月 15, 2009 2:33 pm    文章主題: 引言回覆

如果改為 TABLEUPDATE(1,.T.) 呢?
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2160


第 3 樓

發表發表於: 星期五 五月 15, 2009 8:11 pm    文章主題: 引言回覆

通常是那一筆資料的內容有問題,
例如 null 值
或是一些看不到的字元在作怪.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
goodnight



註冊時間: 2008-10-13
文章: 473
來自: 台南市

第 4 樓

發表發表於: 星期五 五月 15, 2009 8:28 pm    文章主題: 引言回覆

garfield 寫到:
通常是那一筆資料的內容有問題,
例如 null 值
或是一些看不到的字元在作怪.


我懂你的意思, 主檔是primary key 曾經發過重覆的貨號, 結果是含了 chr(9), 不過我換成 SPT 的方式, 暫時是沒問題, 不過我還是得找出原因
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
goodnight



註冊時間: 2008-10-13
文章: 473
來自: 台南市

第 5 樓

發表發表於: 星期五 五月 15, 2009 8:28 pm    文章主題: 引言回覆

ckp6250 寫到:
如果改為 TABLEUPDATE(1,.T.) 呢?


回家沒有環境可以測試, 下週再測試, 然後跟您報告結果
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作