星期三, 11月 30, 2011

與打手之間的對話

人事小姐生 bady 去,由我暫代人事相關業務,今天接到某資委會打手的電話,來詢問公司是否還需要新鮮肝。

打手:我是某某打手,請問是 X 小姐嗎?
  OS:我們不是幾百年前就沒在那徵才。
  Me:X 小姐生 bady 去,我是代理人。
打手:喔!我們這裡有一批新鮮肝,符合貴公司提出新鮮肝的條件,不知道貴公司有沒有
            意願要了解一下。
  OS:人事小姐上個禮拜不就已經跟我說,各個打手的徵才通通關閉了嘛。
  Me:我們公司目前沒有人力缺口,不需要新鮮肝。
打手:喔!你的意思是年關前不再找人,年後才會開始就對了啦,很多公司目前都這樣作,
            我了解、我了解。
  OS:不會吧,我明明說我不需要,我開始懷疑她前一份工作是不是記者,這麼會編故事。
打手:你們人事小姐很認真ㄟ。
  OS:是指現在在產房很認真,還是平時工作很認真,沒頭沒尾的熊熊冒這話出來。
  Me:對阿,她在醫院還會打電話回來關心,交接事項也都寫得很清楚
           (順風車搭一下,總是要給人家台階下)。
  打手:那假如需求新鮮肝的話,可以再連絡我們。

這段對話感覺就像是銀行打來詢問需不需要借貸,只是現在錢變成人而以,Orz ~~

星期五, 11月 25, 2011

[VFP] 預設自訂 Form 物件

寫 VFP 多多少少會使用自訂控件,自訂控件可以直接從 Class 或是 Form Control ToolBar ,拖曳進入 Form 中來使用,而其中 Form 物件最特別,因為當產生一個原始 Form 並把自訂 Form 拖曳進原始 Form 時,會自動產生 FormSet,因此要再刪除原始 Form 和 FormSet ,保留下來的才是自訂 Form,雖然不是什麼耗時的動作,但是常作也是挺惹人厭的。

以下說明如何更改 VFP 預設原始 Form 為自訂 Form。
  • VFP 主畫面 => Tools Tab => Options
預設自訂 Form 物件 - 1
  • Options => Forms Tab => Template Class
預設自訂 Form 物件 - 2

只要設定 Template Claas 的 Form 選項,當產生新 Form 時,就會直接產生自訂 Form 物件。

星期五, 11月 18, 2011

Power Link For 840D

一大早就收到 CNC 廠廠長來電,LP 電腦又無法把檔案傳到 CNC 機器,錯誤訊息是 "Following run time error has occurred Item not found in this collection.(HDtoNCcopy)",這個問題存在很久,老實講我也完全不清楚我每次到底是怎麼把它修正的,當下是抱著亂搞心態去處理。

一到現場發現問題並不單純,以往檔案雖然無法傳到 CNC 機器去,這次是連進入 840D 的 NC Manager 都有問題。
  • 左側 MMC HARD DRIVE 內,原本是應該是連上 Server 的資料夾(g:\),但如今卻變成 UNKON,點擊UNKON會造成整個840D當掉。
Power Link For 840D - 1
  • 想說重新設定資料夾就可以解決這個問題,沒想到點擊 Setup 選項後,馬上又跳出 "Run-time error '3265': Item not found in this collection",也是整個840D當掉。
Power Link For 840D - 2

星期五, 11月 11, 2011

HD Tune

使用者告知電腦會莫名其妙就自動關機,用起來也卡卡的,利用 HD Tune來檢查後,發現 Reallocated Sector Count 選項被反黃,再利用 Error Scan 一掃,果然情況不太妙。

HD Tune - 1
HD Tune - 2

Reallocated Sector Count 翻成白話就是 "壞軌",趕快備份資料比較重要。

HD Tune 是套很方便的工具,但是 Health Status 內選項,假如有反黃或是反紅選項時,對硬碟知識不熟的我,也找不出問題點在哪,只能判斷硬碟可能有問題,所以使用 HD Tune 的重點,是要如何解讀 HD Tune 提供的異常訊息,才有辦法對症下藥,真的有問題,直接換掉也許會是更好的辦法吧。

根據這次經驗,檢查後內容和使用者實際情況,都發現硬碟有問題,但 Health Status 卻是 OK ,以往用 HD Tune 時,也發現到常常 Health 內有異常,但 Health Status 是 OK,實在不知道 Health Status 是怎判斷的。

星期五, 11月 04, 2011

[SQL] DELETE 和 TRUNCATE

TRUNCATE 等於沒有 WHERE 的 DELETE,但是 TRUNCATE 的效率比較快,主要是因為資料刪除時,DELETE 會鎖定每一筆資料進行刪除並寫進交易紀錄檔,TRUNCATE 鎖定資料表和資料頁來取消配置(Deallocate)儲存資料的資料頁(Data Page),交易記錄檔內只會記錄資料頁的取消配置,因此相較之下,DELETE 會耗費一些時間。

之前學習 TRUNCATE 時,一直以為 TRUNCATE 不會產生交易紀錄(Log)且不可回復(Rollback),其實 MSDN 上寫得很清楚,TRUNCATE 是會產生交易紀錄只是相較於 DELETE , TRUNCATE 產生的交易紀錄較少,既然有交易紀錄,當然就可以回復囉。

TRUNCATE 限制:
  1. 無法使用 在 Foreign Key 連結的 Table:父子關係 Table 且設有Foreign Key,父 Table 無法使用TRUNCATE ,子 Table 可以。
  2. TRUNCATE 無法觸發 Trigger。
  3. 資料表內欄位有設定識別規格,TRUNCATE 會重設至初始值。
    • 關聯刪除
    DECLARE @Data1 Table (NO char(5))
    DECLARE @Data2 Table (NO char(5))
     
    INSERT INTO @Data1 VALUES ('1')
    INSERT INTO @Data1 VALUES ('2')
    INSERT INTO @Data1 VALUES ('3')
    INSERT INTO @Data1 VALUES ('4')
    INSERT INTO @Data1 VALUES ('5')
    INSERT INTO @Data2 VALUES ('1')
    INSERT INTO @Data2 VALUES ('3')
    INSERT INTO @Data2 VALUES ('5')
    
    -- 方法 1 利用 JOIN
    DELETE T1
    FROM @Data1 AS T1 JOIN @Data2 AS T2 ON T1.NO = T2.NO
      
    -- 方法 2 利用 IN
    DELETE FROM @Data1
    WHERE NO IN (SELECT NO FROM @Data2)
    
    • 分批刪除大量資料
    大量刪除資料的過程中也可能導致使用者存取效能降低,因此透過分批的方式,降低對SQL Server的影響。
    SET NOCOUNT ON
    
    WHILE  1 = 1 -- 一直進入迴圈
      BEGIN
        DELETE TOP (1000) -- 利用 TOP 限制刪除筆數(1000為使用者自訂筆數、括號一定要存在)
        FROM TableName
        WHERE Condition -- 篩選條件
    
        IF @@ROWCOUNT = 0 -- 假如沒有刪除任何資料,則跳出迴圈
          BREAK
      END
    
    使用上述語法必須注意 @@ROWCOUNT 只會傳回前一個 T-SQL 影響的資料數,假如該 Table 上有設定 Delete Trigger 或 Foreign Key 的 Delete Cascade 的話,@@ROWCOUNT 的回傳值,並不是真正該 Table 的刪除資料數。