2014/02/21

DsnDBCst.dcu 找不到的問題

DsnDBCst 是 DSDesign 元件中的檔案之一。

但在 Delphi 7 之後就找不到這個檔案了,所以在編譯舊元件時可能會出錯。
而且也找不到這個神奇元件在哪邊。

所幸,萬能的 Google 大神引領我,找到了替代品
 「VclDesigner」

將原有的 uses DsnDBCst 拿掉,並且引入 VclDesigner 到 Package 的 Requires 區,如此一來就可以了。

但可能編譯時,還是會失敗。

實際看過網路上流傳的 DsnDBCst.pas 後,才發現原來這個檔案的功用,有一半的功能是做 ResourceString 映射功能,如果有需要也可以自己補在需要出現的地方。

See Also:
[Pascal Fatal Error] DSDesign.pas(18): F1026 File not found: 'DsnDBCst.dcu'
kbmMemTable missing DSDesign.dcu
DsnDBCst为何物?

2014/02/20

[笑話]熱狗不是狗

最近在程式執行時老是踩到未知地雷,仔細尋找後才發現我踩到「熱狗不是狗」陷阱。
        以下就是當時發生的概況:

        1.動物:會叫
        2.動物中有「狗」這個物種,狗會叫﹔會汪汪叫
        3.狗還會吃,最愛吃熱狗

        於是在 Google上,我下了這樣的搜尋條件:
        「動物(熱狗)的叫聲」

        Google 回答了我:
        「讚」

        按了十次,得到十個讚,看來這個括號有神奇的效果,於是修改了一下搜尋內容

        「熱狗是動物,牠的叫聲」

        當我按下『搜尋』時,立馬就跳出錯誤視窗:

        嗯,下次就知道別犯這個錯誤了。


============下面是給 Delphier 的內容=============
Sound := TAnimal(HotDog).;    // 強制轉型﹔執行時會發生 Error ,出錯當下不容易找出問題

Sound := (HotDog as TAnimal).;  // 軟性轉型﹔在編譯時就會產生 Error ,隨即就能夠 Debug
============上面是給 Delphier 的內容=============

2014/02/18

Excel Component 的寫作技巧

在全域變數區可設定一個 LCID 變數
var _LCID: Cardinal;

在 TForm 上放置 ExcelApplication, ExcelWorkbook, ExcelWorksheet 三個元件。

開啟 EXCEL + 開啟活頁簿 + 指定工作表:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var
  _WBK: _Workbook;
  _IndexSheet: Integer
begin
  _LCID := GetUserDefaultLCID();
  _WBK := ExcelApplication.Workbooks.Open(
          {Filename        =}aFileName,
          {UpdateLinks     =}EmptyParam,
          {ReadOnly        =}EmptyParam,
          {Format          =}EmptyParam,
          {Password        =}EmptyParam,
          {WriteResPassword=}EmptyParam,
          {IgnoreReadOnly  =}EmptyParam,
          {Origin          =}EmptyParam,
          {Delimiter       =}EmptyParam,
          {Editable        =}EmptyParam,
          {Notify          =}EmptyParam,
          {Converter       =}EmptyParam,
          {AddToMru        =}EmptyParam,
          {Local           =}EmptyParam,
          {CorruptLoad     =}EmptyParam,
          {LCID            =}_LCID);
  ExcelWorkbook.ConnectTo(_WBK);
  ExcelWorksheet.ConnectTo(ExcelWorkbook.Worksheets[_IndexSheet] as _Worksheet);
end;

關閉活頁簿 + 關閉 Excel:
1
2
3
4
5
6
7
8
9
begin
  ExcelWorkbook.Close(
    {SaveChanges  =}EmptyParam,
    {Filename     =}EmptyParam,
    {RouteWorkbook=}EmptyParam,
    {LCID         =}_LCID);
  ExcelApplication.Quit;
  ExcelApplication.Disconnect;
end;

2014/02/12

Win2003, 2008 Server 在工作排程指令的不同之處

Win2003 Server
SCHTASKS /CREATE /RU "帳號" /RP "密碼" /SC 每日 /TN 排程名稱  /TR "檔案路徑+參數"           /ST 00:05

Win2008 Server
SCHTASKS /CREATE /RU "帳號" /RP "密碼" /SC DAILY /TN 排程名稱  /TR "檔案路徑+參數"           /ST 00:05

花了 n 多小時才查到這個問題
我想, Win2003 Server 可能是混到易語的血了


以上
笑笑就好