從外部資料庫驅動程式產生的非預期的錯誤 (1)

從 C# 程式匯出資料到 Excel 的方式,大部份都會採用 OLEDB 來跟 Excel 進行介接;然而,突然接到使用者提問為何會出這個錯誤訊息,資料已經無法再匯出。程式都沒有修改,原本以為是個案電腦內的 Microsoft Office 問題 。卻陸續接獲使用者回報這個錯誤訊息;幾經追查之下發現,原來 Microsoft 公司在 2017-10-12 發布以 KB40416 開頭的更新檔,將已發現的 Microsoft JET Database Engine 安全性問題修補,然而此次的修補後會造成新建立或開啟 Microsoft EXcel (*.xls) 檔案失敗,其錯誤訊息為 Unexpected error from external database driver(1). (Microsoft JET Database Engine)。

» Read more

Raspberry Pi 3 使用 USB to Serial Port 與 PC 進行通訊測試

 Raspberry Pi 3 在 GPIO 裡面,原本就已提供有 UART 的通訊功能,進行系統設定完成後,即能在作業系統內利用 /dev/ttyS0,來進行 RS-232 的通訊。由於沒有 3D Printer 能自製合適的機殼,拉線出來放在混亂的環境內,一定會讓 MAX3232 模組沒多久就會損毀;所以,特別採買 USB to RS-232 的轉接器來使用看看。

這次測試所使用到的設備如下:

  1. Raspberry Pi 3
  2. 16GB MicroSD (存放作業系統, 此次使用 Raspbian stretch 4.9.47)
  3. Keyboard and Mouse
  4. HDMI to VGA adapter
  5. USB to RS-232 (型號:UTN411, 廠商:登昌恆興業股份有限公司)
  6. RS-232 正常線(公-母) * 1 及 RS-232 NULL MODEM(母-母) * 1
  7. USB 電源供應

» Read more

開啟 Oracle Client 的除錯追蹤 (Debug Tracing) 功能

原由是同事協助檢測為何同一隻 Visual Studio C# 的程式,運作在 x64 系統上時會發生 「ORA-01000: 超過了可開啟的游標之數目上限」;在 x86 系統上卻不會發生這樣子的錯誤。我才知道原來 Oracle 有提供 Debug Tracing 的功能。

開啟 Debug Tracing 的方式是需透過修改作業系統內的註冊機,路徑如下:

電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\OPD.NET

» Read more

[VS2010] 檔案解壓縮 Unzip File

很久之前寫過檔案壓縮 Zip File,一直想要把解壓縮的功能加到專案裡面,終於有空可以補強這個部份。使用到的程式庫是 ICSharpCode。解壓縮之後的資料直接暫存在 MemoryStream,再回傳給外部函式使用。

外部程式可以透過 StreamReader 將 MemoryStream 再次封裝後,利用 ReadLine() 的功能,將資料逐行取出。但得在被封裝前,需要將 MemoryStream 的指標位置更換到 0。

 

資料驗證 – BlockCheckCharacter (BCC)

利用 ASTM 傳輸的資料在結果都會附加資料驗證,以確保傳送的資料是正確的。而此驗證碼的產生比較常見的有兩種 Checksum 及 BlockCheckCharacter (BCC)。

BlockCheckCharacter 是以 NOR 的方式進行資料驗證。範例程式碼:

 

資料驗證 – Checksum

利用 ASTM 傳輸的資料在結果都會附加資料驗證,以確保傳送的資料是正確的。而此驗證碼的產生比較常見的有兩種 Checksum 及 BlockCheckCharacter (BCC)。

Checksum 是以累加的方式進行資料驗證。範例程式碼:

 

[VS2012] DataGridViwer 代換掉右鍵功能

DataGridViewer 的欄位預設型態是 DataGridViwerTextBoxColumn,可想而知是 TextBox。使用右鍵時,就會啟用 Windows 預設的右鍵 (剪下、複製、貼上 …)。

然而,此次的目的是要讓 TextBox 顯示自訂的右鍵選單,不要使用 Windows 預設的右鍵選單。那就得動用到 EditingControlShowing 這個事件控制。

 

[VS2012] DataGridViwer 改變編輯模式 EditMode

變換 DataGridView 的欄位成為 ComboBox 後,在操作時發現需要點兩次才能進入編輯模式 (點擊第一次是 OnFocus、第二次才是 進入編輯模式)。被朋友提醒才知道原來 DataGridView 有個 EditMode 屬性可以調整。

DataGridViewEditMode 有五種的選項可以使用

EditOnEnter

當儲存格收到焦點時,編輯即會開始。當按下 TAB 鍵在資料列之間輸入值,或是按下 ENTER 鍵在資料行下面輸入值時,這個模式會相當實用。

EditOnF2

當儲存格具有焦點而按下 F2 時,編輯即會開始。這個模式會將選擇點置於儲存格內容的結尾。

EditOnKeystroke

當儲存格具有焦點而按下任何英數按鍵時,編輯即會開始。

EditOnKeystrokeOrF2 (這個是預設的功能)

當儲存格具有焦點而按下任何英數按鍵或 F2 鍵時,編輯即會開始。

EditProgrammatically

只有當呼叫 BeginEdit 方法時,編輯作業才會開始。

資料參考:https://msdn.microsoft.com/zh-tw/library/system.windows.forms.datagridvieweditmode(v=vs.110).aspx

使用範例:

 

1 2 3 6