2008年11月29日
別人憑什麼教你?
別人憑什麼教你?
看過日本一個很受歡迎「搶救貧窮大作戰」嗎? 在那個依照案例做不同規劃的單元節目中,總跑不掉幾個公式:貧窮原因的分析、為了擺脫所做的努力、和最後的成功。而不斷上演的樣版中,所謂的大師與料理名人,總是龜毛、變態、吹毛求疵、甚至極盡所能的虐待試圖搶救貧窮的個體。每每發生這樣悽慘的景況,我那年幼被保護極好的姪子都會問我: 「他就不能對他好一點嗎?」 而我也總是說著一樣的答案:「憑什麼別人要把成功的技巧教給你?」
是的,「憑什麼?」這句話我自己也同樣深深的體會過。
從18歲進入職場,經常遇到肯「虐待」我的主管;要不就是賺得很多,卻摳得要死的老闆,極盡所能的要求我為他無償加班或犧牲休假;要不就是遇到龜毛至極的主管,要求我遵守他的生活習慣與處事哲學;更多的,是混到無與倫比,卻總讓我做到死的老大級豬頭。每每遇到這種角色,我都為了「怎麼可能會賺錢?」這個問題而困擾的想死,每次離開那個職位時,總是出去大快朵頤一番,來犒勞自己這段日子的辛勞奉獻,但,我卻總是掉入所謂「勝者的詛咒」,自以為脫逃,卻又什麼都拿不到的痛苦中。
於是,我曾經發誓要做個極為體貼而人性化的上司,對待我的員工要視如己出。但從因為砍掉新人而哭了三天的小主管,到現在,我也成為龜毛且殘酷的人,這條路教會了我一件非常重要的事:「如果你沒有心,我憑什麼教你?」
一位目前是副機長的朋友曾經說過,降落的技巧每個人都不一樣,必須透過所有前輩的教導,才能夠從中揣摩自己的方式,但是要怎麼才能夠學到,必須要靠你主動的去問、去學、無論對方願不願教你,你也要睜大眼睛去看。而往往要取悅正駕駛教你,你必須極盡所能的配合他的要求與習慣,也要以最大的耐性和肯學的謙卑去與他溝通。到現在,每個月坐擁十萬收入,購屋、買房、降落經驗職達千次以上的他,比起七年前剛從美國拿到執照回台的狂妄,現在的他,多了謙卑、和緩、與容忍的耐性。
也許,你現在也遇到了這樣的主管,常常讓你有生不如死的痛苦。也許,你正為了老闆的無理要求覺得自尊比發展重要。但,在這樣的景氣和競爭的環境下,他能活著,就比你有出息、有辦法,而且,有許多生存的技巧與方式,值得你去虛心請教。
只要一天,你尚未達成自己的夢想與目標,都要記得這句話:「別人憑什麼教你」。
2008年11月22日
修復及壓縮 ACCESS 的 MDB
修復及壓縮 ACCESS 的 MDB
3 種方式 :
方法 1:
使用 DAO 物件 ( Data Access Object )
設定引用項目 Microsoft DAO x.x Object Library
目前 DAO 物件有 3.51 版的 Microsoft DAO 3.5 Object Library ( For Access 97 以前的 MDB )
及 3.6 版 Microsoft DAO 3.6 Object Library ( For Access 2K 以後的 MDB )
不設定引用 ( Early Binding ) 也可使用 Late Binding 方式來建立 DAO 3.5 或 3.6 版本的 DBEngine
Set dbe = CreateObject("DAO.DBEngine.35") ' 或 Set dbe = CreateObject("DAO.DBEngine.36")
Compact 壓縮 ( Defragmentation ) 資料庫 動作如下 :
語法 :
DBEngine.CompactDatabase OldDb, NewDb, Locale, Options, Password
OldDb : 欲處理之來源 MDB
NewDb : 為處理後之目的 MDB
Locale 參數 :
dbLangGeneral : English, German, French, Portuguese, Italian, and Modern Spanish
dbLangChineseSimplified : Simplified Chinese ( 繁體中文 )
dbLangChineseTraditional : Traditional Chinese ( 簡體中文 )
Options 參數 :
dbVersion10 : M$ Jet db engine ver 1.0 file format while compacting.
dbVersion11 : M$ Jet db engine ver 1.1 file format while compacting.
dbVersion20 : M$ Jet db engine ver 2.0 file format while compacting.
dbVersion30 : M$ Jet db engine ver 3.0 file format (compatible with ver 3.5) while compacting.
dbEncrypt : Encrypt the database while compacting.
dbDecrypt : Decrypt the database while compacting
PS : Jet ( Joint Engine Technology )
Sample :
DBEngine.CompactDatabase "C:\Src.mdb", "C:\Dst.mdb", _
dbLangChineseTraditional, dbVersion40 + dbEncrypt
PS : dbVersion40 請調整成適當的版本
By the way , DAO 3.5 有提供 MDB 修復 ( Repair ) 的方法 :
DBEngine.RepairDatabase "MDB 路徑 + 檔名"
PS : 3.5 以後之版本已無此方法 ( 已併入 CompactDatabase )
================================================================
使用 JRO 物件
設定引用項目 Microsoft Jet and Replication Objects X.X library
語法 :
JetEngine.CompactDatabase(SourceConnection, DestConnection)
參數 :
SourceConnection : String 值,指定與欲壓縮之來源資料庫的連接。
若 SourceConnection 指定的資料庫已經開啟,就會發生錯誤。
DestConnection : String 值,指定與壓縮後才建立之目的地資料庫的連接。
若 DestConnection 指定的資料庫已經存在或已經有相同名稱的其它檔案存在,就會發生錯誤。
Connection String :
屬性 | 說明 |
Provider
| 指示提供者的名稱,用來連接到資料來源。 |
Data Source | 指示資料庫的名稱。 |
User Id | 若來源資料庫設有安全保護時,指示使用者的名稱。 |
Password | 若來源資料庫設有安全保護時,指示使用者的密碼。 |
Locale Identifier | 指示新資料庫的國別 id。 |
Jet OLEDB:Database Password | 若資料庫設有密保護,指示密碼 |
Jet OLEDB:Engine Type
| 指示要開啟或將建立的來源資料庫版本。 |
Jet OLEDB:Registry Path | 設定 Windows Registry 機碼的資訊,包括 Microsoft Jet Database Engine 的值。 |
Jet OLEDB:System Database | 指示系統資料庫的位置。 |
Jet OLEDB:Encrypt Database | 指示是否加密新的資料庫。若此省略此參數,則新的資料庫會和來源資料庫擁有相同的加密。 |
Jet OLEDB:Don't Copy Locale on Compact | 指示資料庫要使用的排列順序,取代任何每個資料行國別設定。(Boolean.) |
Jet OLEDB:Compact Without Relationships | 指示是否複製關係至新的資料庫。 (Boolean.) |
Jet OLEDB:Compact Without Replica Repair | 指示是否試著尋找其它抄本來修復受損複寫式資料庫。(Boolean.) |
Sample:
Dim jro As New jro.JetEngine
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 來源MDB", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 目的MDB;Jet OLEDB:Engine Type= 4"
================================================================
如果機器上有裝 M$ Access , 也可直接使用 Access 來 Repair / Compact MDB資料庫
或寫程式來呼叫 Access來做
建立 Access 應用程式物件
設定引用項目 Microsoft Access X.X Object Library
Dim objAcc As New Access.Application
或
Dim objAcc As Object
Set objAcc = CreateObject("Access.Application")
之後
Call objAcc.CompactRepair("c:\A.mdb", "C:\B.mdb", False)
即可
VB.Net 透過 JRO 修復 Access MDB
VB.Net 透過 JRO Compact / Repair Access MDB
Imports System
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 將C:\db1.mdb 做Compact / Repair
If Compact_MDB("C:\db1.mdb") Then MessageBox.Show("OK !")
End Sub
Private Function Compact_MDB(ByVal strFile As String) As Boolean
' Jet Access (MDB) 連線字串; Jet ( Joint Engine Technology )
Dim strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}"
' 或"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5"
' Path.GetTempFileName 方法: 在磁碟上建立具命之零位元組的唯一暫存檔案,
' 然後傳回該檔案的完整路徑。
Dim strTmpFile As String = Path.GetTempFileName.Replace(".tmp", ".mdb") ' 把tmp 副檔名改成mdb
' 建立物件陣列存放引數(參數) , 來源, 目的
Dim objPara As Object() = New Object() {String.Format(strCn, strFile), String.Format(strCn, strTmpFile)}
' Activator 成員: 包含本機或遠端建立物件型別的方法,或者取得對現有遠端物件的參考。
' Activator.CreateInstance 方法(Type) : 使用最符合指定參數的建構函式,建立指定型別的執行個體。
Dim objJRO As Object = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"))
' Type.GetTypeFromProgID 方法: 取得與指定的程式識別項(ProgID) 關聯的型別;
' 如果在載入Type 時發生錯誤,則傳回null。
' JRO.JetEngine 為Microsoft Jet and Replication Objects X.X library
' Type.InvokeMember 方法
' Type.InvokeMember (String, BindingFlags, Binder, Object, Object[])
objJRO.GetType.InvokeMember("CompactDatabase", Reflection.BindingFlags.InvokeMethod, _
Nothing, objJRO, objPara)
' 使用指定的繫結條件約束並符合指定的引數清單,來叫用指定的成員。
' BindingFlags 列舉型別,InvokeMethod 指定要叫用方法。
File.Delete(strFile) ' File.Delete 方法: 刪除Compact 前之mdb 檔
File.Move(strTmpFile, strFile) ' File.Move 方法: 將Compact 過的mdb 檔改成(回)正確檔名
' Marshal.ReleaseComObject 方法釋放JRO COM 物件
Runtime.InteropServices.Marshal.ReleaseComObject(objJRO)
objJRO = Nothing
Return True
End Function
End Class