2016年11月30日 星期三

DeleteEntry 所發現的問題 type & parameter _DeleteEntry(_cSection, _cEntry)


clear
//set procedure To QIni.cc additive && 解析 ???.ini
//oIni = new Qini(  ) && d考慮 路徑 + 檔案名稱+後? 停用唄!
//oIni.Inifile =( _app.iniFile )

//11=WebTemp
DeleteEntry( "UserBDEAliases",'0')

_DeleteEntry( "UserBDEAliases",'0')

FUNCTION DeleteEntry
   parameter cSection, cEntry
Local lSuccess, cIniFile
cIniFile =  _app.iniFile
   lSuccess =false

if type("cSection") == "C"
? "cSection="+ cSection

endif

if type("cEntry") == "C"
? "cEntry="+cEntry

endif

if type("cSection") == "C" .and. type("cEntry") == "C"
lSuccess = WritePrivateProfileString(cSection, cEntry,0, cIniFile)
endif

? lSuccess

RETURN

**********************************************************************
FUNCTION _DeleteEntry(_cSection, _cEntry)
Local lSuccess, cIniFile
cIniFile =  _app.iniFile
   lSuccess =false

if type("_cSection") == "C"
? "_cSection="+ _cSection
else
? type("_cSection")
endif

if type("_cEntry") == "C"
? " _cEntry="+_cEntry
else
? type("_cEntry")
endif

x = _cSection
y = _cEntry



if type("cSection") == "C" .and. type("cEntry") == "C"
lSuccess = WritePrivateProfileString(cSection, cEntry,0, cIniFile)
else
? 'CCC'
endif

? lSuccess

RETURN

2016年11月25日 星期五

Coreini.cc 轉 Qini.cc

Core.ini

   FUNCTION GetSection(cSection)

這個功能  是讀出 ???.ini 的 Section 裡面的 ENTRY & 值

透過  API GetPrivateProfileSection(cSection, cBuffer, nX, cIniFile )的方式 轉換 成 Single.

不知道 'Single' 是何意 ?


透過 dBase

for n = 0 to x
     oB.setByte( n*2, oA.getByte(n) )
next

轉成 Double

目前的問題是  從 ???.INI  轉進去的資料,經過這段過程 , 轉出來的東西  會變少
 少掉  1/3 左右



2016年11月15日 星期二

xBase 單一資料表 處理方式

料件基本資料 的更新(考慮相關的歷史異動)
開發部分
採購部分
營業部分
生管部分
物管部分


Xbase 的單一資料表 處理部分
利用 trigger 完成 單一資料表的新增、更改、刪除,
建立  一個 5 個欄位,都是 1-3 文字屬性的 欄位,4- 5欄位 日期欄位
建立檢查系統(確校系統)
處理單一資料表的相關問題
XbaseA單一基本資料表(XbaseA_m 異動紀錄表)。(<=5)
        欄位1 系統代號(10)
欄位2 代號(10)
欄位3 說明1(50)
欄位4 說明2(50)
欄位6 建立日期(smalldatetime)
欄位7 停用日期(smalldatetime)
欄位8 數值(number 18,3)
欄位9 rid
欄位10   啟用日期(smalldatetime)    2016/11/16 添加
欄位11   封存日期(smalldatetime)    2016/11/16 添加

XbaseA_m
        欄位1 系統代號(10)
欄位2 代號(10)
欄位3 說明1(50)
欄位4 說明2(50)
欄位6 建立日期(smalldatetime)
欄位7 停用日期(smalldatetime)
欄位8 數值(number 18,3)
欄位9  rid
欄位10 建立者
欄位11 電腦名稱
欄位12異動狀態(新增、更改、刪除)
欄位13   啟用日期(smalldatetime)    2016/11/16 添加
欄位14   封存日期(smalldatetime)    2016/11/16 添加

封存就是移動到 封存資料表 & 封存資料庫



XabseB基本料件  基本單一資料表(XbaseB_m 異動紀錄表)。
考慮 資料表太大 在分割 如下
開發部分(XbaseB_ma 異動紀錄表)
採購部分(XbaseB_mb 異動紀錄表)
營業部分(XbaseB_mc 異動紀錄表)
生管部分(XbaseB_md 異動紀錄表)
物管部分(XbaseB_me 異動紀錄表)

XbaseC客戶&廠商  基本單一資料表。
XbaseD會計科目 基本單一料表。


XbaseX 異動紀錄資料表
各個單一資料表系統  利用 檢視 + 字串調整+前端控制字串輸入 呈現 結果。



2016年11月13日 星期日

關於 dB2K 中文方面的問題

關於 dB2K 中文方面的問題: (最後更新日期: 2002/12/11 下午 12:18:35 )
Q1). 解決 dB2K RAD 中文問題:
A1.1). 在 db2k.ini 中加入:
           [CommandSettings]
           ldriver=DB950TW0

A1.2).
修改 BDE 中的設定:
           BDE -> Databases -> ????? (
依照所使用的選項而定) -> LANGDRIVER -> 設定為 dbase CHT cp950.
           BDE -> Configurage -> Driver
與 Native 中也要跟這修改語系為 dBase CHT cp950.
Q2). 修改 db2k RAD 中顯示字形大小、名稱問題:
        在 db2k.ini 中修改(沒有就新增)下列 Session:
        [DefaultFonts]
        Application=
新細明體,10
        Controls=
新細明體,10
Q3). 在 db2k 中如何使用 MySQL ??
A3). 先用 ODBC32 建立一個 MySQL DSN:A).控制台 -> ODBC32 -> 使用者資料來源名稱 -> 新增 -> 自己設定一個 DSN -> 例如取名為 ss-MySQL,  B).控制台 -> BDE -> Databases -> New 新增一個資料庫連結 -> ODBC DSN 處填入 ss-MySQL ( 就是 ODBC32 設定的 DNS).
        C).
在 db2k RAD 中的 database 元件上 -> databaseName -> 填入 ss-MySQL -> 這樣子就完成了連結!
Q4). MySQL 中文字處理問題:
A4). 如果你的 MySQL 是安裝在 Windows 平台的話,在 %Win% 目錄下的 My.ini 檔案中加入下列資料
        [mysqld]
        default-character-set = big5
        [client]
        default-character-set = big5
        如果你的 MySQL 安裝在 Linux 平台的話,請抓取 Source 重新編譯,
       
在編譯時,記得加入一行 --with-charset=big5 <---這行就是重點.
Q5). 關於中文字在 db2k 中的問題:
A5). dbase 2000
以後的版本採用 Unicode 編碼方式,所以,您在 db2k 中所使用的「字串」,都是 Unicode,當然,你也可以將非中文字串存入字串變數中,但是,重點在於,如何對這些字串做 DBCS/SBCS 轉換呢?所謂的 DBCS 就是 Double Byte Character Set -> 就是每個中文字或是英文字,都是用 2Bytes 來表示,
                     Unicode
就是 DBCS 格式,和我們以前所認識的中英文編碼方式不同,
                    
以前,我們所認識的中英文字編碼原則是,A -> Ascii code -> 65, 中 -> Ascii code ->164, 164, 兩 Byte
                    
但是,db2k 採用的是 Unicode/DBCS,所以,上述的資料就不在是單純的 65, 164, 164 ,而變成
                     A -> 65, 00    
中 -> 45, 78
                    
上述方法,你可以用下列方式來驗證:
                      
                     
cStr = "A中文"
                     ? cStr.getByte(0)  // 65
                     ? cStr.getByte(1)  //  0
                     ? cStr.getByte(2)  // 45
                     ? cStr.getByte(3)  // 78
                     ? Asc( "A" )         // 65
                     ? Asc( "
中" )        // 42148
                     
很奇怪吧?中文字的「中」為何他的 ASCII 會是: 42148 ?

                     我來說個轉換方法:
                    
原本 '中' 字的 SBCS ASCII Code 為: 164(HiByte)/164(LoByte),
                     164 * 254 + 164 ( HiByte * 256 + LoByte ) = 42148
                     ? Chr( 42148 )    // '
中'
而: SBCS 就是 Single Byte Character Set -> 
就是我們以前所認識的 'A中文' -> ASCII -> 65, 164, 164  在一些 WinAPI 中,有些 API Name 尾部有個 'A',
例如 'GetProFileStringA', 代表著他傳回的資料就是 SBCS 資料,如果我們要取用這些傳回的資料,你就必須將這個資料從 SBCS to DBCS 轉換,這樣子 db2k 才看得懂.

另外,Windows 9x 系統採用的 SBCS 編碼方式,Windows NT 以上的採用 DBCS 編碼方式,這點要特別注意.


1-7 異動單據建立作業 應該 拆分為

1-7 異動單據建立作業  應該 拆分為
1-7-1用料出庫 申請 作業。(可加入 MRPII 的觀念)。
1-7-11用料出庫 作業
1-7-2餘料入庫 申請 作業。
1-7-21餘料入庫 作業 (參考領料出庫單)。
1-7-3調撥 申請 作業。
1-7-31調撥 作業
1-7-4盤盈入庫 申請 作業。
1-7-41盤盈入庫 作業。
1-7-5盤虧出庫 申請 作業。
1-7-51盤虧出庫 作業。


倉庫作業 資料表 利用 出庫庫位、入庫庫位 區分。(一個數字欄位)