2007年12月25日 星期二

在迴圈中跳脫控制,執行其他功能

在迴圈中加入 Application.ProcessMessages;
EX:
procedure TForm1.BitBtn1Click(Sender: TObject);
var I : Integer;
begin
 IF TBitBtn(Sender).Tag = 1 then
 Begin
   Application.ProcessMessages;
  BitBtn2.Enabled := True;
   BitBtn3.Enabled := True;

   for I:= 0 TO 100 Do
    Begin
     Label3.Caption := IntToStr(I);
     sleep(100);
    End;
 End
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BitBtn2.Enabled := False;
  BitBtn3.Enabled := False;
end;

Access 資料新增到不同資料庫,或查詢不同資料庫的資料

INSERT INTO [;database=C:\Users\s\Desktop\Access\data2.mdb].table3 ( txt1, txt2, txt3 )
SELECT txt1, txt2, txt3
FROM table1;

SELECT *FROM table3 IN "" [;database=C:\Users\s\Desktop\Access\data2.mdb];

database前需加分號[;database=....]
database需用絕對路徑 EX:C:\Users\s\Desktop\Access\data2.mdb

2007年12月24日 星期一

TQuery不要將冒號當成參數

若 ParamCheck = False 可避免Query將SQL字串視為帶參數。EX: C:\document.....

2007年12月14日 星期五

常用的Port

80 :HTTP
443 :Https
SSL網站
1433 :SQL
Microsoft的SQL服務開放的埠

2007年11月27日 星期二

命令提示字元無法使用(cmd)

在原本的路徑下不可執行,但在 C:\WINDOWS\system32> 可執行,這是因為環境變數被改變了。
解決方式:
控制台->系統->變更設訂->進階->環境變數->上半的PATH加入;C:\WINDOWS\system32

2007年11月25日 星期日

隨身碟病毒解決方法

症狀:Double Click硬碟,無法開啟硬碟
下載點:DelAutorun.rar

讓系統時間出現星期幾..

控制台->地區及語言選項->地區選項 按下自訂->日期 最下面的"完整日期"的完整日期樣式加入dddd 會變成 yyyy'年'M'月'd'日'dddd ->確定

window的命令systeminfo和/?

執行方式:開始->執行->輸入cmd 確定

  1. systeminfo:列出系統訊息
  2. /?:輸入某個命令,並在後面加上/?會顯示與此命令相關的資料 Ex:ipconfig /?

2007年11月14日 星期三

電腦出現「Generic Host Process For Win32 Services遇見問題而且必須關閉」。

電腦出現「Generic Host Process For Win32 Services遇見問題而且必須關閉」,然後電腦就停止連線不能上綱了。

先去下載微軟的相關更新,不可以再使用以下辦法:

微軟更新及msjava.dll下載處
http://groups.google.com.tw/group/evabow/web/msjava-dll?hl=zh-TW

  1. 就是病毒
    開機後會提示Generic Host Process for Win32 Services 遇到問題需要關閉
    Remote Rrocedure Call (RPC)服務意外終止,然後就自動重起電腦。
    一般該病毒會在註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 下建立msblast.exe鍵值,還會在c:\windows\system32目錄下會放置一個msblast.exe的木馬程式
  2. 第二種情況是排除病毒後,還出現這樣的問題,一般都是IE元件在註冊表中註冊資訊被破壞,可以按下面的方法去解決該問題:
    在開始->執行,輸入"regsvr32 actxprxy.dll",然後"確定",接著會出現一個資訊對話 框"DllRegisterServer in actxprxy.dll succeeded",再次點擊"確定"。
    再開始->執行,輸入"regsvr32 shdocvw.dll",然後"確定"。
    再開始->執行,輸入"regsvr32 oleaut32.dll",然後"確定"。
    再開始->執行,輸入"regsvr32 actxprxy.dll",然後"確定"。
    再開始->執行,輸入"regsvr32 mshtml.dll",然後"確定"。
    再開始->執行,輸入"regsvr32 msjava.dll",然後"確定"。(很可能會出現錯誤提示,需要下載.DLL文件)
    再開始->執行,輸入"regsvr32 browseui.dll",然後"確定"。
    再開始->執行,輸入"regsvr32 urlmon.dll",然後"確定"。
    如果排除病毒問題後,做完上面的幾個IE元件註冊一般問題即可得到解決。
  3. 如果電腦有印表機,還可能是因爲印表機驅動安裝錯誤,也會造成這個錯誤。解決方法如下:重裝印表機驅動


資料來源:http://blog.yam.com/lijohnson/article/10579672
http://hk.knowledge.yahoo.com/question/?qid=7006081402022

2007年11月4日 星期日

取得檔案名稱、更改檔案名稱和去除檔案副檔名

取得檔案名稱:ExtractFileName
EX:file_Name := ExtractFileName(AgOpenDialog1.FileName);

更改檔案名稱:ChangeFileExt
EX:file_Name := ChangeFileExt(A.xls, B.xls);
  file_Name = B.xls

去除檔案副檔名:
EX:fileName := ChangeFileExt(ExtractFileName(AgOpenDialog1.FileName), '');

取得執行程式所在的路徑

絕對路徑:ExtractFilePath(Application.ExeName) =>有反斜線"\"

ExtractFileDir(Application.ExeName)=>無反斜線"\"

2007年10月16日 星期二

Excel儲存格參照

「儲存格參照」可分成以下幾種類型: 相對參照:直接使用儲存格位置來表示 Ex: A1、B2
絕對參照:絕對參照表示法,是在欄名及列號前加上 $ 號
     Ex:$A$1、$B$2 ,表示鎖定位址的意思,不會因為複製的過程而改變

PS.在 Excel 中,提供了 F4 功能鍵,幫助在輸入參照位址時作快速切換
  Ex:原本為A1 按一下 F4變 $A$1 再按一下 F4變A$1 按一下 F4變$A1 再按一下 F4 則又變回原來的A1

在Excel數字轉換成中文數字

Ex: 12300 => 壹萬貳仟參佰

右鍵->儲存格格式->數值下的特殊 右邊類型選 壹萬貳仟參佰肆拾伍

2007年10月5日 星期五

SQL Server某個欄位值系統自動算出或產生

若要讓SQL Server某個欄位值系統自動算出或產生,只需在設計資料表的公式上寫入公式即可
Ex:若要TABLE2 的L3欄位=L1欄位+L2欄位


在新增資料時.... 會自動把L1和L2的值相加,填入L3

2007年9月20日 星期四

正規化-判斷電子信箱是否正確

Email = document.getElementById('EMailemail').value;
if ( !Email.match(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/)){
   alert('電子信箱輸入不正確!\n\n');
}

if (Email.match(/[^a-z^A-Z^0-9@._-]/g)){
  alert("電子信箱只能為英數字或@._-等,不能為其他的特殊符號!\n\n");
}

正規化-不能為中文或全形

if ( document.getElementById('TEL').value.match(/^[\u0391-\uFFE5]/g)){
  alert("家用電話不能為中文或全形的!\n\n";

}

正規化-需為英文或數字

if ( Account.match(/[^a-z^A-Z^0-9]/g)){
  alert("帳號必須是英文字或數字!\n\n";
}

去除空白

function trimAll(strvalue) {
  ptntrim = /(^\s*)(\s*$)/g;
  return strvalue.replace(ptntrim,"");
}

function chk_data(cmdAction){
  Code = trimAll(document.getElementById('Code').value);

sql server編碼為utf-8,找出簡體的資料

sql server定序為繁體中文
--搜尋類別 找簡體字,字的前面需加N
EX:
SET @sWhereKeyType = KEY_1 LIKE N''%'+ @sKeyword+'%'''

2007年9月19日 星期三

若選擇全部底下的某個checkbox有check,則某個Button就 Enable 若無選擇任何checkbox,則某個Button就Disable

/* 若選擇全部底下的某個checkbox有check,則某個Button就 Enable 若無選擇任何checkbox,則某個Button就Disable
 參數1:form的Id
 參數2:checkbox名稱
 參數3:Button的Id */
function check_Button_Enable(fm, chk_name, BID){
  var frm = document.getElementById(fm);
  var counts = frm.elements[chk_name].length; //找出物件
  if (typeof(counts) == "undefined"){ //指只有一個checkbox
    if (frm.elements[chk_name].checked) {
      document.getElementById(BID).disabled = false;
    }
    else {
      document.getElementById(BID).disabled = true; //若checkbox不選,則Button就Disable
    }
  }
  else {
    if (counts > 0 ){
       for (var i=0; i< counts; i++){
          if (frm.elements[chk_name][i].checked == true){
             document.getElementById(BID).disabled = false; //若有某個checkbox選,則Button就 Enable
             return false;
          }
          else {
             document.getElementById(BID).disabled = true;
          }
       }
     }
     else {
       document.getElementById(BID).disabled = true;
     }
   }
}

checkbox 需點選,某個Button才Enable

/* checkbox 需點選,某個Button才Enable
 參數1:checkbox的Id
 參數2:Button的Id */
function Button_Enable(ChkID, BID){
  if(document.getElementById(ChkID).checked){
    document.getElementById(BID).disabled = false;
  }
  else {
    document.getElementById(BID).disabled = true;
  }
}

送出checkbox 選擇的資料

/* 送出checkbox 選擇的資料
 參數1:隱藏欄位的ID--自由使用
 參數2:隱藏欄位的值--自由使用
 參數3:送出form的id
 參數4:checkbox的名字
 參數5:詢問內容
 參數6:若無選擇,顯示的文字 */
function send_data(cmdAction, cmdValue, fm, chkname, show1, show2){
  var frm = document.getElementById(fm);
  var counts = frm.elements[chkname].length; //找出物件

  var DeleteCount = 0;
  if (typeof(counts) == "undefined"){ //指只有一個checkbox
    if (frm.elements[chkname].checked) {
      DeleteCount++;
    }
  }
  else {
    for (var i=0; i< counts; i++){
       if (frm.elements[chkname][i].checked){
          DeleteCount++;
       }
    }
  }
  
  if (DeleteCount > 0){
    flag = confirm(show1);
      if (flag){
        //有資料才給資料
        if (cmdAction != ''){
           document.getElementById(cmdAction).value=cmdValue;
        }

        document.getElementById(fm).submit();
      }
      else {
        return false;
      }
   }
   else {
     alert(show2);
     return false;
   }
}

若選擇全部底下的某個checkbox沒check,則把checkbox 選擇全部的check拿掉

/* 若選擇全部底下的某個checkbox沒check,則把checkbox 選擇全部的check拿掉
 參數1:form的Id
 參數2:checkbox名稱
 參數3:選擇全部的checkbox名稱*/
function select_all_remove(fm, chk_name, chkall_name){
  var frm = document.getElementById(fm);
  var counts = frm.elements[chk_name].length; //找出物件

  if (typeof(counts) == "undefined"){ //指只有一個checkbox
    if (frm.elements[chk_name].checked) {
      document.getElementById(chkall_name).checked = frm.elements[chk_name].checked;
    }
    else {
      document.getElementById(chkall_name).checked = false; //若checkbox不選,則選擇全部的check要拿掉
      }
    }
   else {
    if (counts > 0 ){
        for (var i=0; i< counts; i++){
          if (frm.elements[chk_name][i].checked == false){
             document.getElementById(chkall_name).checked = false; //若有某個checkbox不選,則選擇全部的check要拿掉
             return false;
          }
          else {
             document.getElementById(chkall_name).checked = true;            }
        }
     }
     else {
        document.getElementById(chkall_name).checked = false;
     }
   }
}

checkbox 選擇全部

/* checkbox 選擇全部
參數1:form的Id
參數2:checkbox名稱
參數3:選擇全部的checkbox名稱 */
function select_all(fm, chk_name, chkall_name){
  var frm = document.getElementById(fm);
  var counts = frm.elements[chk_name].length; //找出物件

  if (typeof(counts) == "undefined"){ //指只有一個checkbox
    frm.elements[chk_name].checked = document.getElementById(chkall_name).checked;
  }
  else {
   if (counts > 0 ){
     for (var i=0; i< counts; i++){
       frm.elements[chk_name][i].checked = document.getElementById(chkall_name).checked;
     }
   }
   else {
     frm.elements[chk_name][i].checked = false;
   }
  }
}

驗證IP

function chk_data(cmdAction){
  var msg = "";
 Code = document.getElementById('IP').value;

  var reg = /^(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])((-([1-9]\d?|1\d\d|2[0-4]\d|25[0-5]))?|(\/([12]?\d|3[0-2]))?)$/;
  
  if(!reg.test(Code)){
 msg = msg + 'IP錯誤!\n\n';
  }

  if ( msg != "" ){
  alert(msg);
  return false;
  }
}

2007年9月17日 星期一

InfoPower的wwDBGrid的picture Mask

    內容來源:http://www.ayton.id.au/gary/it/Delphi/D_Valid1.htm
    examples:
  • # = any digit; ? = any letter; & = any letter, converted to uppercase; @ = any character;

  • ! = any character converted to uppercase; ; = next character to be used literally;

  • [abc] = optional sequence of characters abc

  • { } = grouping operator
    eg. {Red, Green, Blue}
    eg. {Red,Gr[ay,een],B{l{ack,ue},rown},White,Yellow}
  • * = repeat the following character any number of times:
    eg. *5{#} = specify 5 numbers in a row
    eg. *! = any number or any character with all letters converted to uppercase
    eg. &*? = letters with 1st letter capitalised

ASP顯示MsSQL錯誤訊息

if err.number <> 0 then
  Response.write err.number & err.description & err.source
End if

2007年9月15日 星期六

加快開機速度

讓一些不需要開機時就執行的程式,在開機時不執行,這樣可加快開機的速度。
步驟一:按下執行

步驟二:在執行打入msconfig


步驟三:把不想在開機時執行的程式取消


2007年9月12日 星期三

setTimeout 和 setInterval…

參考:http://www.takka.com.hk/jstutor/jsindex.htm
   http://neural.cs.nthu.edu.tw/jang/  

setTimeout( )
是設定一個指定等候時間 (單位是千分之一秒, millisecond), 時間到了, 瀏覽器就會執行一個指定的 method 或 function
ex: 第一個參數為要執行的method 或 function,第二個參數為等候的時間
  function helloWord(){
   alert("Hello");
  }
  setTimeout("alert('Hello')", 1000) ;
  setTimeout("helloWord()", 1000) ;

setInterval()
每隔「時間長度」所指定的時間(以1/1000秒為單位)後,瀏覽器就會去執行「"JavaScript的命令列"」,
ex:第一個參數為要執行的method 或 function,第二個參數為每隔的時間
  setInterval("showTime()", 1000); //每一秒更新一次

2007年8月24日 星期五

Excel以指定清單輸入儲存格資料

如:
步驟1:在一欄或一列中鍵入下拉式清單的項目。在清單中不可包括空白儲存格。

步驟2: 選取您要之下拉式清單所在的儲存格。
步驟3:資料->驗證

步驟4:儲存格內允許 -> 清單
步驟5:在 [來源] 方塊中輸入清單參照

步驟6:確定


2007年8月4日 星期六

PHP 5+MySQL 5 使用 Big5

內容來源:酷!學園討論區

Mysql 自從 4.1以後就內定語系是utf8,對於以前使用Big5開發的資料庫、PHP程式,如何轉到utf8是一場夢魘了。 PHP網頁中的語系設定還小事,addslashes()解決衝碼的程式,是否還原?不得不重視,其中MySQL的匯出->轉utf8->匯入MySQL才是會令人覺得恐怖的。萬一資料轉得不正確,後果是無法想像的,因此如何在PHP 5+MySQL 5使用以前的程式、資料庫(Big5),對我而言是得重要的。

PHP 5 + MySQL 5 使用Big 5語系方法。
0) 系統
OS:CentOS 5.0
modules:    
php-mysql-5.1.6-12.el5    
mysql-server-5.0.22-2.1    
mysql-5.0.22-2.1

1) 修改Apache 語系  
[root@adm ~]# vim /etc/httpd/conf/httpd.conf  
AddDefaultCharset Big5

2) 修改 PHP 語系  
[root@adm ~]# vim /etc/php.ini  
default_charset = "Big5"

3) 重啟Apache  
[root@adm ~]# /etc/init.d/httpd restart

4) 設定MySQL 語系(紅色代表要加入的部分)  
[root@adm ~]# vim /etc/my.cnf  
[mysqld]  
datadir=/var/lib/mysql  
socket=/var/lib/mysql/mysql.sock  
# Default to using old password format for compatibility with mysql 3.x  
# clients (those using the mysqlclient10 compatibility package).  
old_passwords=1  
default-character-set=latin1  

[mysql.server]  
user=mysql  
basedir=/var/lib  

[mysqld_safe]  
log-error=/var/log/mysqld.log  
pid-file=/var/run/mysqld/mysqld.pid  

[mysql]  
default-character-set=latin1

5) 重啟 MySQL  
[root@adm ~]# /etc/init.d/mysqld restart

這樣在MySQL4.0開發的資料庫及PHP程式,都可拿來新的環境使用了,而且以前在MySQL 4.0中一些無法輸入的特殊字,如峯(是山在上面的峰字)也可輸入進去了。

PS.MySQL4.1~5.0內定是用utf8,但MySQL4.0是用latin1,而不是big5,因MySQL沒有Big5的字集(charsets),而latin1就可支援big5了。

2007年7月18日 星期三

SQL Server 200系統資料庫說明

master:記錄SQL Server初始化資訊並系統層級所有資訊,它記錄了所有的登入帳戶與所有的系統組態設定,記載了其他資料庫的存在狀態與使用者資料庫初始化資訊的主要檔案位置。

model:可作為建立於系統中的所有資料庫範本。建立一個新的資料庫時,系統會透過複製model資料庫的內容來建立,接著再將新資料庫的其他部份填入空白頁。

msdb:由"SQL Server代理程式"用來儲存各項工作排程、警示與作業,並記錄備份與恢復資料庫的記錄。在SQL Server 2000中,包括系統資料庫在內的每個資料庫,都有自已的一組檔案,它們並不會狀這些檔案與其他資料庫共享。

tempdb:記載所有的暫存資料表與暫存的預存程序。每次,tempdb都會動新建立,以便讓系統從一個初始狀態的資料庫副本開始執行。工作中的tempdb資料庫會依需要而自動擴大,但是當SQL Server動新啟動時,它都會動設回初始的大小。當系統關機時,此資料庫內的暫存資料表與預存程序就會自動卸除,因此從一個SQL Server工作階段進入另一個工作階段時,並不會有任何tempdb中的資料而要儲存。

pubs、Northwind:微軟提供的資料庫範例。

SQL Server 2000系統資料夾位罝與說明

通常資料夾為C:\Program Files\Microsoft SQL Server\MSSQL

資料夾 說明
Backup:存放SQL Server 資料庫的備份檔案
Binn:存放所有SQL Server 2000程式檔案和動態資料庫檔案(DLL),但不包含SQL Server所提供的工具程式檔案
Data:存放系統資料庫檔案與使用者自訂的資料庫檔案
FTData:存放微軟搜尋服務目錄檔(Microsoft Search Services Indexes)
Install:存放SQL Server 安裝時的Script檔案與安裝結果報告檔案
JOBS:當SQL Server執行工作時,系統暫存資料的資料夾
LOG:存放SQL Server發生錯誤時的記錄檔
REPLDATA:存放複製檔案的資料夾
Upgrade:存放由舊版SQL Server需要提昇到SQL Server 2000所需要的所有程式檔案

2007年7月17日 星期二

關閉Vista的使用者帳戶控制 UAC

  1. 控制臺 → (傳統)使用者帳戶 → 開啟或關閉使用者帳戶控制 → 把【使用「使用者帳戶控制(UAC)」來協助保護您的電腦】 這個項目取消掉
  2. 在開始輸入指令「msconfig」 → 在彈出的視窗上面點選「工具」 → 選擇「停用UAC」 → 按下「啟動」的按鈕
  3. 用指令
    啟用 C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f
    停用 C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f

2007年7月9日 星期一

用Word列印Excel的多筆相同格式的資料

把所要列印的資料整理放至Excel

開啟Word
檢視->工具列->合併列印


按下主文件設定


按下開啟資料來源

選擇要列印的Sheet


按下插入合併欄位
選擇要列印的欄位

2007年7月2日 星期一

cmd 網路指令

  1. 測試網路
    ping 127.0.0.1 -t -t指等待用戶中斷測試Ctrl+C 中斷
  2. 檢視DNS、IP、Mac等
    Ipconfig/all
  3. C:\Documents and Settings\Bow>nslookup
    Default Server: hntp1.hinet.net
    Address: 168.95.192.1
  4. 檢視電腦上的網路磁碟機列表
    net use
  5. 網路磁碟機中斷連線
    net use /delete x:
    net use x:/delete x:是指共用資源的磁碟機代號
  6. 與網路磁碟機連線
    net use x:\\computer name\share name x:是指您想要指派為共用資源的磁碟機代號
  7. 重新設置winsock
    netsh winsock reset

2007年6月28日 星期四

Ruby 連mysql 使用utf-8

1.找 app/config/database.yml 修改成
development:
adapter: mysql
database: dbname
username: username
password: password
host: ip port: 3306
encoding: utf8

2.找app/config/environment.rb最上面加$KCODE="u"

3.找app/controllers/environment.rb修改成
class ApplicationController < ActionController::Base
# Pick a unique cookie name to distinguish our session data from others'
session :session_key => '_testmysql_session_id'

before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=utf-8"
end
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute "SET NAMES UTF8"
end

end

Calling Stored Procedures from Rails

Anyway, to call a stored procedure in Rails I used the following:

sql = "declare @result int \n"

sql += "declare @some_value uniqueidentifier \n"

sql += "exec @result = my_stored_procedure @input1 = 'hello', @input2 = 'world', @output = @some_value output \n"

sql += "select @result\n" # change this to select @some_value if you want to access the output parameter

result = connection.select_value(sql)


EX:
sql = "declare @iid int "
sql += "exec sp_test_insert_02 'aabbccdd', @iid output "
sql += "select @iid "
@res = ActiveRecord::Base.connection.select_value(sql)

Rails 架構


Rails 常用的小抄


Ruby的Symbol是什麼?

Ruby Symbol是代表一個字串的符號, 並且有下面兩個特性
1. 不可變動性 (所代表的字串內容不可更改)
2. 唯一性 (系統中代表同一個字串的symbol 是同一個instance)

在Ruby中, Symbol也是一個class, 但是它並不是String的subclass.
Symbol class不提供 Symbol.new 讓我們使用,

如果要產生Symbol的instance要使這個方式
>x = :abc
=>:abc
上面程式告訴Ruby, 我要產生一個Symbol的instance, 他所代表的字串是"abc"
>x.class
=>Symbol
我們可以看出來, x的class是Symbol而不是String
>y = :abc
=>:abc
>x.object_id
=>243938
>y.object_id
=>243938
上面我們看出 Symbol的唯一性, x和y是同一個object. (因為x和y的object_id是一樣的)

Symbol有什麼用? 也就是說Ruby為什麼要有Symbol?
有兩個原因第一是節省記憶體空間(space), 第二是增加執行時的效率(performance)
如果你是Java的programmer,應該知道, Java的String內容是不能改變的. 然後Ruby的String卻完全不是這麼一回事,
>m = "abc"
=>"abc"
>n = "abc"
=>"abc"
>m.object_id
=>23225030
>n.object_id
=>23222010
>m[0]="A"
=>"A"
>m
=>"Abc"
看出來了嗎? m和n都是字串"abc", 但是的卻是不同的instance (object_id不一樣), 而且字串的內容是可以修改的.
但是..........字串是程式中常常用到的, Ruby中的 每一個"abc", 其實都是 String.new("abc"), 如果我們程式中有太多的"abc", 那麼, Ruby就會create一堆的 String instance...., 所以如果我們可以在程式裡多用:abc 來取代"abc", 那麼就可以節省掉一些記憶體的空間. symbol最普遍應用的就是就屬hashmap的key值了.

Symbol第二個好處就是增加執行時的performance, Symbol在ruby內部除了代表一個字串外, 其實也代表了一個數字

如果ruby執行到 m.do_something, 在Ruby的內部, 會在m中找一個名稱叫做 do_something, 如果Ruby用字串比對的方式在m中去找名稱叫 "do_something"的method, 那麼performance將會很低(因為字串的比對是很花時間的), 所以Ruby會將 "do_something"轉成 :do_something, 由於:do_something也代表了某個數字(假設代表的數字是34), 因為Ruby只要在m中尋找 34這一個method, 這樣比用字串比對去找"do_something"要快得多了....
所以在Ruby當中 m.do_something 事實上是呼叫 m.send(:do_something)

Ruby 中 “require”, “load” 和 “include” 有甚麼不同呢?

請參考這裡 http://anw.stikipad.com/ocean/show/require+load+and+include
require” 和 “load” 用途是一致的, 用來載入新的程式庫, “include” 是用來 mix-in 模組.

1. “require” 可載入某個 a.rb 檔案, 且可以省略 ”.rb”. 而且它只會在第一次的時候載入, 若再次 “require” 時就會忽略
require 'a'
a = A.new


2. “load” 和 “require” 一樣但要用 a.rb 全名, 且每次一定會重新載入
load 'a.rb'
a = A.new

3. 載入程式庫的順序呢(類似 java class path)? Ruby 把這個資訊存在 ”$:” 系統全域變數上, 你可以藉著 RUBYLIB 或 ruby -I 來加入新的載入目錄.
puts $:

4. “include” 用來 mix-in 某個模組, 可以減少書寫的長度
require 'webrick'
include WEBrick

//可以不用 server = WEBrick::HTTPServer.new(...)
//server = HTTPServer.new(...)

2007年6月25日 星期一

使某區塊的程式全部往後移

若要使某區塊的程式全部往後移,則先選擇程式,再按Shift+Ctrl+I,如下圖

若要使某區塊的程式全部往前移,則先選擇程式,再按Shift+Ctrl+U,如下圖


2007年6月22日 星期五

讓你的ROR也能連SQL Server

在 ./config/database.yml 寫上..

development:
adapter: sqlserver #固定寫法
database: database_name
host: server_name #若有port的話..寫法為 server_name,5555
username: user_name
password: your_pw_here

相關文章:http://wiki.rubyonrails.org/rails/pages/HowtoConnectToMicrosoftSQLServer

若想下載ADO.rb: ADO.rb

Vista系統變慢的四大原因

如果你的Windows Vista作業系統安裝後,系統變的越來越慢呢?下面筆者給大家分析一下。
1、註冊表變得更加臃腫了
註冊表對於系統速度的影響,有點說不清道不明。微軟設計註冊表,給應用程式一個統一存放配置資訊的地方,因為註冊表在系統啟動時載入,所以應用程式在啟動時,使用註冊表項比使用外部配置檔案要快。但是如果註冊表太大的話,將消耗很多的系統資源,為什麼有那麼多註冊表清理軟體存在,因為註冊表垃圾太多了,不光是應用軟體製造註冊表垃圾,Windows自己也製造註冊表垃圾。  

在製造註冊表垃圾的軟體當上,微軟的軟體應該是名列前矛,像Office、.NET Framework,都是寫註冊表達數量巨大的軟體。Windows Vista的註冊表,據估計至少比Windows XP臃腫一倍。

2、預裝了更多的字體
Windows XP/2003只預裝了60種左右的TrueType字體,到了Windows Vista,居然達到了190種之多,數量翻了三倍還多,大家應該知道,系統安裝的字體越多,越影響速度。根據這篇文章的測試,安裝100種字體,系統延遲增加5.33秒,Windows Vista預裝190多種字體,那麼系統啟動速度將會增加延遲近10秒。而且問題是,這些字體我們需要嗎? 
 
用戶需要用這些字體寫文檔嗎?需要用它們來做設計嗎?基本上是不需要的。微軟推出什麼所謂的雅黑字體,號稱花費上億美元,一個字100美元,抄襲Mac OSX,也只是東施效顰而已,Windows Vista的界面,還是那麼醜陋,和Mac OSX根本沒法比。而且更搞笑的是,居然傳出Windows Vista某個字體有缺字的情況。

3、捆綁了不止一個的.NET運行環境
這個東西是個速度殺手,而且是一般用戶所不需要的。搞軟體開發的都知道,.NET用來做Web應用還好,但是如果用來做桌面應用,是不好的,它實在太慢了,用戶不能忍受一個啟動時慢吞吞的,處理工作時延遲太久。所以到目前為止,用.NET開發的桌面應用軟體仍然是少之又少,就像微軟,也不敢用它來做Office的主要開發工具,最多只是在一些小功能上用到.NET。.NET的可惡之處,在於它與系統緊密結合,所以十分影響作業系統的速度。 
 
首先它在安裝的時候寫了太多的註冊表項,至少幾萬條。第二點就是它在Windows啟動時就載入了許多DLL,微軟為了造成.NET速度快的假像,於是就在Windows啟動時預先載入.NET的DLL(手法如同Office)。而且,Windows Vista還不止預裝一個.NET運行環境。不信你去C:WINDOWSMicrosoft.NETFramework這個目錄看一下,看有幾個以版本號命名的目錄。相比之下,.NET的對手Java就不是這樣,在Windows平檯上,它只註冊了很少的DLL,而且並不在系統啟動時載入。在非Windows平檯上,Java還可以是綠色軟體。

4、使用了更加複雜、花俏的界面技術
Windows Vista使用了所謂的Aero、Flip 3D界面技術,可惜這些東西並不能給用戶帶來方便,而且外觀設計並不優秀,甚至比較醜陋。最可惡的一點是,它們消耗極大的系統資源。微軟的界面技術,又是東施效顰,越效越噁心。沒想到微軟這種保守的跟屁蟲公司居然敢把任務欄和標題欄做成黑色調,功能表欄做成青色,控制按鈕搞得大小不一,而且尺寸加大,變成扁平狀,這種設計好像很大膽,很有創意,但是不難發現,這種設計十分醜陋。
  
如果說Mac OSX就像水晶一樣美麗的話,那麼Windows Vista看起來就像劣質的塑膠和破麻布一般醜陋,要知道Mac OSX的界面那是6年前的設計呢。微軟東施效顰算是效到底了,這回把圖示也搞大了,可是那些圖示除了帶來系統垃圾以外,有什麼用呢,誰要用你的大圖示啊,再看看shell32.dll裡面,新圖示舊圖示夾在一塊,就是那麼的不協調。什麼Aero、Flip 3D,不僅是視覺垃圾,更是系統垃圾。

2007年6月17日 星期日

PHP 物件導向程式設計 相關網站

http://php.igt.com.tw/unit_111.htm

Delphi 執行時發生『找不到重要的DLL檔-QTINTF.DLL』錯誤訊息

Delphi 封裝應用程式後,在某些PC上會發生『找不到重要的DLL檔-QTINTF.DLL』錯誤訊息
避免uses 一些QXXX.pas
其需要連結qtintf.Dll
有些作業系統無此DLL

PHP正規表達式基本語法

首先讓我們看兩個特殊的符號'^'和'$'。他們的作用是分別指出一個字串的開始和結束。例子如下:
"^The":表示所有以"The"開始的字串("There","The cat"等);
"of despair$":表示所以以"of despair"結尾的字串;
"^abc$":表示開始和結尾都是"abc"的字串--呵呵,只有"abc"自己了
"notice":表示任何包含"notice"的字串。

最後那個例子,如果你不使用兩個特殊字元,你就在表示要查找的串在被查找串的任意部分--你並不把它定位在某一個頂端。

其他還有'*','+'和'?'這三個符號,表示一個或一序列字元重復出現的次數。它們分別表示"沒有或更多","一次或更多"還有"沒有或一次"。下面是幾個例子:

"ab*":表示一個字串有一個a後面跟著零個或若干個b。("a", "ab", "abbb",……);
"ab+":表示一個字串有一個a後面跟著至少一個b或者更多;
"ab?":表示一個字串有一個a後面跟著零個或者一個b;
"a?b+$":表示在字串的末尾有零個或一個a跟著一個或幾個b。

也可以使用範圍,用大括弧括起,用以表示重復次數的範圍。

"ab{2}":表示一個字串有一個a跟著2個b("abb");
"ab{2,}":表示一個字串有一個a跟著至少2個b;
"ab{3,5}":表示一個字串有一個a跟著3到5個b。

請注意,你必須指定範圍的下限(如:"{0,2}"而不是"{,2}")。還有,你可能注意到了,'*','+'和'?'相當於"{0,}","{1,}"和"{0,1}"。

還有一個'¦',表示"或"操作:
"hi¦hello":表示一個字串裏有"hi"或者"hello";
"(b¦cd)ef":表示"bef"或"cdef";
"(a¦b)*c":表示一串"a""b"混合的字串後面跟一個"c";

'.'可以替代任何字元:

"a.[0-9]":表示一個字串有一個"a"後面跟著一個任意字元和一個數位;
"^.{3}$":表示有任意三個字元的字串(長度為3個字元);
方括號表示某些字元允許在一個字串中的某一特定位置出現:

"[ab]":表示一個字串有一個"a"或"b"(相當於"a¦b");
"[a-d]":表示一個字串包含小寫的'a'到'd'中的一個(相當於"a¦b¦c¦d"或者"[abcd]");
"^[a-zA-Z]":表示一個以字母開頭的字串;
"[0-9]%":表示一個百分號前有一位元的數位;
",[a-zA-Z0-9]$":表示一個字串以一個逗號後面跟著一個字母或數位結束。

也可以在方括號裏用'^'表示不希望出現的字元,'^'應在方括號裏的第一位。(如:"%[^a-zA-Z]%"表示兩個百分號中不應該出現字母)。

為了逐字表達,你必須在"^.$()¦*+?{\"這些字元前加上轉移字元'\'。

請注意在方括號中,不需要轉義字元。

PHP的正規表達方式有一些內置的通用字符:
[[:alpha:]] 任何字母,等於[a-zA-Z]
[[:digit:]] 任何數字 ,也就是[0-9]
[[:alnum:]] 任何字母和數字,也等於[a-zA-Z0-9]
[[:space:]] 表示所有鍵盤操作,如空白、Tab、Enter、Backspace,相當於[\n\t\r\x0b]
[[:upper:]] 任何大寫字母 ,也就是[A-Z]
[[:lower:]] 任何小寫字母 ,也就是[a-z]
[[:punct:]] 任何標點符號
[[:xdigit:]] 任何16進制的數字,相當於[0-9a-fA-F]

[[:blank:]] 表示空格,等於[\t]

特殊字符:
\s:(小寫s)用于匹配單個空格符,包括tab键和換行
\S:(大寫S)用于匹配除單個空格符之外的所有字符
\d:用于匹配从0到9的數字
\w:(小寫w)用于匹配字母,數字或底線(_)
\W:(大寫W)用于匹配所有與\w不匹配的字符
. :用于匹配除換行符之外的所有字符



php檢查Server的Port是否能正常連線

host能輸入domain跟ip

給它主機名稱跟port,如果正常連線會傳回ture失敗傳回false,監測時間大概一秒鐘,超過則算失敗

function chkservice($host, $port)
{
if (ini_get('display_errors')==1)
{
//判斷ini的display errors的設定
$ch_ini_display=1;
ini_set('display_errors', 0);//設定連線錯誤時不要display errors
}

$hostip = gethostbyname($host); //檢查輸入的host name dns正解
if (!$x = fsockopen($hostip, $port, $errno, $errstr, 1)) //測試連線
{
return false;
}
else
{
return ture;
if ($x)
{
fclose($x); //關閉連線
}
}

if ($ch_ini_display==1)
{
ini_set('display_errors', 1); //將ini的display error設定改回來
}
}

2007年6月13日 星期三

設置 Ruby 開發環境

使用工具與軟體:

1、Java Runtime Environment (JRE) (這是我們用的 IDE - Aptana 所需的執行環境)
下載後直接安裝

2、下載 Ruby
A、安裝時,建議安裝在 X:\Java\Ruby 下,較好管理,安裝時,有個元件 (Sci-TE) 可以取消不安裝
B、安裝完成後,請進入 dos 畫面,進入 X:\Java\Ruby 的資料夾下,鍵入 gem install --include-dependencies 這個會將 Rails 安裝起來

3、Aptana IDE (這套是以 Eclipse 為核心開發的 Ruby 編輯器
A、下載完後直接安裝,建議安裝在 X:\Java\Aptana 的資料夾下 (X 指的是你自己想安裝的磁碟機)
B、啟動時,會詢問你想要的工作資料夾, 建議是 X:\Java\Work 底下
C、更新 Package:
a、啟動 Aptana 後,請先至 【說明】 => 【軟體更新】 => 【尋找與安裝...】 => 【搜尋要安裝的新特性】
     => 選擇全部的元件後下一步,將所有的元件裝起來

2007年6月12日 星期二

改變網頁字型的大小

檢視-字型 :即可調整字的大小

若網頁沒有工具列則:
工具->網際網路選項->一般->存取設定
將"略過Web網頁上指定的字型大小"打勾後按確定,然後再去檢視-字型 ,調整字體大小即可

2007年6月9日 星期六

世界各國網域名稱代碼總表

網域名稱 國家或地區名稱(英文)(中文)

AD Andorra 安道爾
AE United Arab Emirates 阿拉伯聯合大公國
AF Afghanistan 阿富汗
AG Ntigua and Barbuda 安地卡及巴布達
AI Angola 安圭拉
AL Albania 阿爾巴尼亞
AM Armenia 亞美尼亞
AN Netherlands Antilles 荷屬安的列斯群島
AO Angola 安哥拉
AQ Antarctica 南極洲
AR Argentina 阿根廷
AT Austria 奧地利
AU Australia 澳大利亞
AW Aruba 阿魯巴
AZ Azerbaijan 亞塞拜然
BA Bosnia Hercegovina 波士尼亞
BB Barbados 巴貝多
BD Bangladesh 孟加拉
BE Belgium 比利時
BF Burkina Faso 布吉納法索
BG Bulgaria 保加利亞
BH Bahrain 巴林
BI Burundi 蒲隆地
BJ Benin 貝南
BM Bermuda 百慕達
BN Brunei Darussalam 汶萊
BO Bolivia 玻利維亞
BR Brazil 巴西
BS Bahamas 巴哈馬
BT Bhutan 不丹
BV Bouvet Island 波維特島
BW Botswana 波札那
BY Byelorussian SSR 白俄羅斯
BZ Belize 貝里斯
CA Canada 加拿大
CC COCOS Islands 可可斯群島(椰子島)
CF The Central African Republic 中非共和國
CG Congo 剛果
CH Switzerland 瑞士
CI Lvory Coast 象牙海岸
CK Cook Island 科克群島
CL Chile 智利
CM Cameroon 喀麥隆
CN China 中國大陸
CO Colombia 哥倫比亞
CR Costa rica 哥斯大黎加
CU Cuba 古巴
CV Cape Verde,Republic of 維德角
CX Christmas Island 耶路撒冷
CY Cyprus 賽普勒斯
CZ Czech Republic 捷克共和國
DE Grmany 德國
DJ Djibouti 吉布地
DK Denmark 丹麥
DM Gominica 多明哥
DO Dominica 多米尼加
DZ Algeria 阿爾及利亞
EC Ecuador 厄瓜多
EE Estonia 愛沙尼亞
EG Egypt 埃及
EH West Sahara 西撒哈拉
ES Spain 西班牙
ET Ethiopia 衣索比亞
FI Finland 芬蘭
FJ Fiji 斐濟
FK Falkland Islands 福克蘭群島
FM Micronesia 密克羅尼西亞
FO Faroe Islands 法羅群島    
FR France 法國
GA Gabon 加彭
GB United Kingdom 英國
GD Grenada 格瑞納達
GE Georgia 喬治亞
GF French Guiana 法屬圭亞那
GH Ghana 迦納
GI Gibraltar 直布羅陀
GL Greenland 格陵蘭
GM Gambia 甘比亞
GN Guinea 幾內亞
GP Guadeloupe 瓜德魯普島
GQ Equatorial Guinea 赤道幾內亞
GR Greece 希臘
GT Guatemala 瓜地馬拉
GU Guam 關島
GW Guinea-Bissau 幾內亞比索
GY Guyana 圭亞那
HK Hong Kong 中國香港
HM Heard and McDonald Islands 赫德及麥當勞群島
HN Honduras 宏都拉斯
HR Croatia 克羅埃西亞
HT Haiti 海地
HU Hungary 匈牙利
ID Indonesia 印度尼西亞
IE Ireland 愛爾蘭
IL Israel 以色列
IN India 印度
IO British Indian Ocean Territory 英聯邦的印度洋領域
IQ Iraq 伊拉克
IR Iran 伊朗
IS Iceland 冰島
IT Italy 意大利
JM Jamaica 牙買加
JO Jordan 約旦
JP Japan 日本
KE Kenya 肯亞
KG Kyrgyzstan 吉爾吉斯
KH Cambodia 高棉(柬埔寨)
KI Kiribati 吉里巴斯
KM Comoros 科摩羅
KN St. Kitts and Nevis 聖克里斯多福及尼維斯
KP Korea, Democratic People's Rep. Of 北韓
KR Korea, Republic Of 南韓
KW kuwait 科威特
KY Cayman Islands 開曼群島
KZ Kazakstan 哈薩克
LA Laos 寮國
LB Lebanon 黎巴嫩
LC St. Lucia 聖露西亞
LI Liechtenstein 列支敦斯登
LK Sri Lanka 斯里蘭卡
LR Liberia 賴比瑞亞
LS Lesotho 賴索托
LT Lithuania 立陶宛
LU Luxembourg 盧森堡
LV Latvia 拉脫維亞
LY Libya 利比亞
MA Morocco 摩洛哥
MC Monaco 摩納哥
MD Moldova,Republic of 摩爾多瓦
MG Malagasy 馬達加斯加
MH Marshall Islands 馬紹爾群島
MK Macedonia 馬其頓
ML Mali 馬利
MM Burma 緬甸
MN Mongolia 蒙古
MO Macao 中國澳門
MP Northern Nariana Islands 北聖    
MQ Martinique 聖馬丁  
MR Mauritania 茅利塔尼亞
MS Montserrat 蒙瑟拉特島  
MT Malta 馬爾他
MU Mauritius 模里西斯
MV Maldives 馬爾地夫
MW Malawi 馬拉威
MX Mexico 墨西哥
MY Malaysia 馬來西亞
MZ Mozambique 莫三比克
NA Namibia 納米比亞
NC New Caledonia 新加勒多尼亞
NE Niger 尼日
NF Norfolk Island 諾福克群島    
NG Nigeria 奈及利亞
NI Nicaragua 尼加拉瓜
NL Netherlands 荷蘭
NO Norway 挪威
NP Nepal 尼泊爾
NR Naura 諾魯
NT Neutral Zone 中立區      
NU Niue 紐威島
NZ New Zealand 紐西蘭
OM Oman 阿曼
PA Panama 巴拿馬
PE Peru 秘魯
PF French Polynesia 法屬玻里尼西亞
PG Papua,Territory of 巴布亞新幾內亞
PH Philippines 菲律賓
PK Pakistan 巴基斯坦
PL Poland 波蘭
PM St.Pierre and Miquelon 聖皮耳  
PN Pitcairn Islands 皮特開恩群島
PR Puerto Rico 波多黎各(美)
PT Portugal 葡萄牙
PW Palau 帛琉
PY Paraguay 巴拉圭
QA Qatar 卡達
RE Reunion Island 留尼旺島   
RO Romania 羅馬尼亞
RU Russia 俄羅斯聯邦
RW Rwanda 盧安達
SA Saudi Arabia 沙烏地阿拉伯
SB Solomon Islands 所羅門群島
SC Seychelles 塞席爾
SD Sudan 蘇丹
SE Sweden 瑞典
SG Singapore 新加坡
SH St.Helena 聖赫勒拿島
SI Slovene 斯洛法尼亞
SJ Svalbard and Jan Mayen Islands 凡帝   
SK Slovakia 斯洛伐克
SL Sierra leone 獅子山
SM San Marino 聖馬利諾
SN Senegal 塞內加爾
SO Somali 索馬利亞
SR Surinam 蘇利南
ST Sao Tome and Principe 聖多美及普林西比
SU USSR(formerly) 蘇聯(前)
SV El Salvador 薩爾瓦多
SY Syria 敘利亞
SZ Swaziland 史瓦濟蘭
TC Turks and Caicos Islands 土克斯及開科斯群島
TD Chad 查德
TF French Southern Territoties 法屬南部屬地
TG Togo 多哥
TH Thailand 泰國
TJ Tsjikistan 塔吉克
TK Tokela 托克勞群島
TM Turkomanstan 土庫曼
TN Tunisia 突尼西亞
TO Tonga 東加
TP East Timor 帝汶
TR Turkey 土耳其
TT Trinidad and Tobago 千里達及托貝哥
TV Tuvalu 吐瓦魯
TW Taiwan 台灣
TZ Tanzania 坦尚尼亞
UA Ukiain 烏克蘭
UG Uganda 烏干達
UK England 英國(正式代碼為GB)
UM United States Minor Outlying Islands 美屬邊疆群島
US America 美國
UY Uruguay 烏拉圭
UZ Uzbekstan 烏茲別克
VA Vatican 梵蒂岡(羅馬教庭)
VC St. Vincent and the Grenadines 聖文森及格   
VE Venezuela 委內瑞拉
VG Virgin Islands(British) 英屬維爾京群島(英)
VI Vigin Islands(U.S.) 英屬維爾京群島(美)
VN Vietnam 越南
WF Wallis and Furtuna Islands 沃利斯和富圖納群島    
WS Western Samoa 西薩摩亞
YE Yemen 葉門
YU Yugoslavia 南斯拉夫
ZA South Africa 南非
ZM Zambia 尚比亞
ZR Zaire 扎伊爾
ZW Zimbabwe 辛巴威
ZZ Other 其他國家

2007年6月4日 星期一

delphi匯出至excel的相關指令

不知如何用DELPHI寫EXCEL的程式時,可進入Excel後按"巨集錄制",錄後進入巨集查看,再將指令copy後貼上至Delphi的OLE指令中

2007年6月3日 星期日

XMLHttpRequst安全問題!

瀏覽器在設計物件之初,已經考慮到安全性的問題,因而限制XMLHttpRequest請求的資源與呼叫的腳本程式,兩者必須在同一個網域內,不能存取網域外的資源,藉此降低風險。

XMLHttpRequest物件請求的所有資源都必須與呼叫腳本在同一個網域內。
這個安全限制使得XMLHttpRequest物件不能請求腳本所在網域之外的資料。
所以要避免使用XMLHttpRequest存取外部URL

參考來源:Ajax技術手冊

2007年5月31日 星期四

TQRExpr不累加!

TQRExpr 的 Properties 下的 ResetAfterPrint 設成 True ,則 可計算 Group 的小計。

2007年5月28日 星期一

delphi控制Excel(一)

內容來源:雨轩客的博客网_你的博客网

use ComObj,Excel97

首先创建 Excel 对象,使用ComObj:
var ExcelID: Variant;

ExcelID := CreateOleObject( ’Excel.Application’ );

1) 显示当前窗口:ExcelID.Visible := True;

2) 更改 Excel 标题栏: ExcelID.Caption := ’应用程序调用 Microsoft Excel’;

3) 添加新工作簿: ExcelID.WorkBooks.Add;
MsExcel.WorkBooks.Add(xlWBatWorkSheet);//增加一個WorkBook並且有一個Sheet
MSExcel.WorkBooks[1].Sheets.Add(,,17,xlWorkSheet)//在此WorkBook內在增加17個Sheet
Sheets :=XLApp.WorkBooks[1].Sheets;//指定Sheets為第一個WorkBook內的 SheetsSheets.Item[1].Name :='該Sheet的名稱';//指定此Sheets內的第一個Sheet名稱

4) 打开已存在的工作簿: ExcelID.WorkBooks.Open( ’C:\Excel\Demo.xls’ );

5) 设置第2个工作表为活动工作表: ExcelID.WorkSheets[2].Activate;
或 ExcelID.WorksSheets[ ’Sheet2’ ].Activate;

6) 给单元格赋值: ExcelID.Cells[1,4].value := ’第一行第四列’;

7) 设置指定列的宽度(单位:字符个数),以第一列为例: ExcelID.ActiveSheet.Column[1].ColumnsWidth := 5;

8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

9) 在第8行之前插入分页符: ExcelID.WorkSheets[1].Rows.PageBreak := 1;

10) 在第8列之前删除分页符: ExcelID.ActiveSheet.Columns[4].PageBreak := 0;

11) 指定边框线宽度: ExcelID.ActiveSheet.Range[ ’B3:D4’ ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )

12) 清除第一行第四列单元格公式: ExcelID.ActiveSheet.Cells[1,4].ClearContents;

13) 设置第一行字体属性:
ExcelID.ActiveSheet.Rows[1].Font.Name := ’隶书’;
ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;

14) 进行页面设置:
a.页眉: ExcelID.ActiveSheet.PageSetup.CenterHeader := ’报表演示’;
b.页脚: ExcelID.ActiveSheet.PageSetup.CenterFooter := ’第&P页’;
c.页眉到顶端边距2cm: ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm: ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm: ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm: ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm: ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm: ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中: ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中: ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线: ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;

15) 拷贝操作:
a.拷贝整个工作表: ExcelID.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域: ExcelID.ActiveSheet.Range[ ’A1:E2’ ].Copy;
c.从A1位置开始粘贴: ExcelID.ActiveSheet.Range.[ ’A1’ ].PasteSpecial;
d.从文件尾部开始粘贴: ExcelID.ActiveSheet.Range.PasteSpecial;

16) 插入一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Insert;
b. ExcelID.ActiveSheet.Columns[1].Insert;

17) 删除一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Delete;
b. ExcelID.ActiveSheet.Columns[1].Delete;

18) 打印预览工作表: ExcelID.ActiveSheet.PrintPreview;

19) 打印输出工作表: ExcelID.ActiveSheet.PrintOut;

20) 工作表保存:
if not ExcelID.ActiveWorkBook.Saved then
ExcelID.ActiveSheet.PrintPreview;

21) 工作表另存为: ExcelID.SaveAs( ’C:\Excel\Demo1.xls’ );

22) 放弃存盘: ExcelID.ActiveWorkBook.Saved := True;

23) 关闭工作簿: ExcelID.WorkBooks.Close;

24) 退出 Excel: ExcelID.Quit;

25)释放VARIANT变量:EX:ExcelApp:=Unassigned;

知道一個excel檔內有多少個WorkSheet
XLAPP.WorkBooks[n].Sheets.Count

知道該Sheet的名稱
XLAPP.WorkBooks[n].Sheets[n].Name

打开第2个工作表
ExcelApp.Worksheets[2].activate;

打开名为第四章的工作表
ExcelApp.WorkSheets['第四章'].activate;

用CreateOleObject方法对WORD文件进行操作

http://www.programfan.com/article/showarticle.asp?id=2759

使用CreateOleObject方法对WORD文档操作具有先天所具备的优势,与delphi所提供的那些控件方式的访问相比,CreateOleObject方法距离WORD核心的操作“更近”,因为它直接使用OFFICE所提供的VBA语言对WORD文档的操作进行编程。

这个程序很简单,在页面上放置了一个edit和一个button,每单击一次按钮,就会自动把edit中的内容添加在后台中的word文档中,程序关闭时文件自动保存在当前程序的主目录中。

unit main;
interface

//如果要使用CreateOleObject的办法对WORD文档进行操作,应该在uses Comobj和WordXP
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Comobj, WordXP, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
//全域變數
FWord: Variant;
FDoc: Variant;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
FWord.Selection.TypeParagraph;
FWord.Selection.TypeText(Text := form1.Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//首先创建对象,如果出现异常就作出提示
try
FWord := CreateOleObject('Word.Application');

//WORD程序的执行是否可见,值为False时程序在后台执行
FWord.Visible := False;
except
ShowMessage('创建word对象失败!');
Exit;
end;

//先在打开的Word中创建一个新的页面,然后在其中键入"Hello,"+回车+"World!"
try
FDoc := FWord.Documents.Add;
FWord.Selection.TypeText(Text := 'Hello,');
FWord.Selection.TypeParagraph;
FWord.Selection.TypeText(Text := 'World! ');
except
on e: Exception do
ShowMessage(e.Message);
end;
end;

//在程序关闭时把文件内容保存到当前目录中,并以test.doc命名,同时关闭WORD程序
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FDoc.SaveAs(ExtractFilePath(application.ExeName) +'test.doc');
FWord.Quit;
FWord := Unassigned;
end;

end.

2007年5月24日 星期四

WinXP 預約關機指令

在 開始-->執行 打指令
15分鐘=900s
半小時=1800s

shutdown -s -t 3600 (一小時後)
shutdown -s -t 7200 (二小時後)
shutdown -s -t 10800 (三小時後)
....
shutdown -a (取消關機)

2007年5月23日 星期三

二數相除取整數問題

為何,229.5\8.5 會等於28,而不是27?

Ans:
在執行整數除法運算之前,這種數值運算式必須是 Byte、Integer 或是 Long運算式(都是整數的),任何的小數部分都會被刪除。所以運算式會變成 229\8 =28

2007年5月22日 星期二

Exit與Abort的差別!

Abort:引起意外的放棄處理
Exit:立即從目前的語法中退出

如:ADO 元件,在Edit時,會先跑Before Edit Function ,Edit後會跑 After Edit Function ,若在Before Edit寫Abort,則不會跑After Edit,但若在Before Edit寫Exit,則只會跳出Before Edit,還是會跑After Edit。

2007年5月11日 星期五

Application中有 Thread 無法清除的問題!

通常會寫 Application.Terminate;
把它改成 ExitProcess(0);
這樣若Application 中有執行 Thread 時,才會一併清除

在windows下的排程工作設定php網頁自動執行

控制台->排定的工作->新增排定的工作->瀏覽(找出php.exe 如(c:\php\php.exe))->設定好後,按右鍵(內容)->執行那加上要跑的程式(EX:
C:\PHP\php.exe "C:\Inetpub\wwwroot\shopping\sendmail.php")








2007年5月10日 星期四

SQL Server Management studio 連接不同PORT的方法

使用『SQL Server Configuration Manager』

1. 在「SQL Server Configuration Manager」中,展開 [SQL Native Client 組態],以滑鼠右鍵按一下 [別名],然後按一下 [新增別名]。
2. 在 [別名名稱] 中,輸入別名的名稱。EX: TESTDB
3. 在 [伺服器] 中,輸入伺服器的名稱或 IP 位址。EX:127.0.0.1
4. 在 [通訊協定] 中,選取用於此別名的通訊協定。通常都選TCP/IP
5. 在 [通訊埠編號],輸入PORT號。EX:14330






然後在『SQL Server Management Studio』在連接伺服器名稱那邊輸入,TESTDB 就可以連到14330PORT的資料庫了



參考http://msdn2.microsoft.com/zh-cn/library/ms181035.aspx

在 SQL 中空白字元的問題

在 MS SQL 中,空白字元在【某些的字串函數或比較式】執行結果會與預期的不一樣。
例如:
空白和空字串
IF ( ' ' = '' )
print '相等'
else
print '不相等'
==> 相等

print Len(' ')
==> 0

print Len('123 ')
==> 3
Len 函數會自動將字尾的空白去掉

print Len(' 123')
==>4
Len 函數會計算前面的空白

Q: 那如果要真的求出字串 '123 ' ,長度為 5 ,指令該用什麼??
A: 後面有空白的字元長度,要求出實際長度,不可以使用 Len ,要使用 DataLength 求出【位元組】的長度


※特別注意:DataLength 是求出位元組,所以
當碰上中文字時,每一個字的長度皆為 2
當型態為:nvarchar、nchar 時,不管英文、符號,長度皆為 2當型態為:varchar、char 時,英文、符號的長度皆為 1


EX:
Declare @sWideString nvarchar(20) -- Unicode
Declare @sString varchar(20) -- 一般字元

Set @sWideString = '我是中文字加 ABC '
Set @sString = '我是中文字加 ABC '

print Len(@sWideString) -- 長度 10 (因為 Len 指令會將尾端的空白去掉)
print Len(@sString) -- 長度 10 (因為 Len 指令會將尾端的空白去掉)

print DataLength(@sWideString) -- 長度 26
print DataLength(@sString) -- 長度 19

2007年5月9日 星期三

Locate 用法的討論

TTable.Locate(const KeyFields:string; const KeyValues:Variant; Options:TLocateOptions): Boolean;
中的 TLocateOptions的
loCaseInsensitive 表示搜尋時忽略大小寫
loPartialKey 表示搜尋時只須開頭值吻合

用 Locate 方法找資料時, 可以選擇要或不要第三個參數
第三參數如果是空集合, 那表示找到的資料必須大小寫與資料長度均相等, 也就是完全相等的方式搜尋資料

ex:
假定 Table1 為
cu_no cu_name
AMKB 王大同
ACJC 金士欽
BDFD 林火金

1.若 sTest 為 'AMKB':
Table1.Locate('cu_no', sTest, []) ==> 當然可以找到

2.若 sTest 為 'AC':
Table1.Locate('cu_no', sTest, []) ==> 找不到
Table1.Locate('cu_no', sTest, [loPartialKey])
==> 找到 'ACJC 金士欽' 這筆記錄.
因為集合中有 loPartialKey 這個項目, 此時, 'AC' 相同於 'ACJC'
的開頭兩個字元, 即使兩者長度不等, 也算找到
3.若 sTest 為 'ac':
Table1.Locate('cu_no', sTest, [loPartialKey])
==> 找不到, 因為區分大小寫之故, 所以 'AC' 雖開頭相同於'ACJC',
也不能算作符合條件.
Table1.Locate('cu_no', sTest, [loCaseInsensitive, loPartialKey])
==> 找到 ACJC 金士欽 這筆記錄.
此時不再區分大小寫了. 可以順利找到接近的資料
4.Table1.Locate('cu_no;cu_name', VarArrayOf(['ac','金']), [loCaseInsensitive, loPartialKey])
==> 找到 ACJC 金士欽 這筆記錄.
1.搜尋值採用Variants,使得搜尋條件可指定不同的資料型態.
2.字串內指定多欄位,以分號隔離各項目.
3.利用VarArrayOf函數,傳入多個搜尋值.

AJAX 解決中文亂碼!

參考來源:http://www.real-blog.com/programming/217

用 AJAX 讀取一個中文頁面時,很多時會出現亂碼,因為 XMLHTTP 處理返回的 responseText 時,會用 UTF-8 編碼解讀,如果頁面送出的文件是 UTF-8 編碼便沒有問題,但如果所使用用的是 BIG5 或者 GB 編碼,就會出現亂碼情況。

解決方法是在送出的頁面加一個 HTTP Header 指定所使用的編碼,方法為:
PHP: header("Content-Type:text/html;charset=BIG5");
ASP: Response.Charset=”BIG5″
JSP: response.setHeader("Charset","BIG5");

windows 2000 網路時間校對

因為網路時間校對XP之後才有支援
如果用2000的話需要透過指令才能完成

net time /setsntp:time.stdtime.gov.tw
w32tm -once

2007年5月7日 星期一

排程磁碟重組

如果用平常的磁碟重組方式,沒有辦法做到排程的方式
但在XP之後MicroSoft有內建一個工具 Defrag.exe

Windows Disk Defragmenter
Copyright (c) 2001 Microsoft Corp. and Executive Software International, Inc.

使用方法:Defrag.exe [-a] [-f] [-v] [-?]
volume 磁碟機代號或掛接點 (d: 或 d:\vol\mountpoint)
-a 只分析
-f 即使可用空間太低也要強制磁碟重組。
-v 詳細資訊輸出
-? 顯示這個說明文字。
把它加入排程去執行就可以了

EX:
C:\Documents and Settings\Administrator>defrag e: -v

參考文件
http://support.microsoft.com/kb/314848/zh-tw
http://support.microsoft.com/kb/283080/zh-tw

2007年5月6日 星期日

Vista安裝IIS7

內容來源: http://www.xujiwei.cn/blog/article.asp?id=633

Windows Vista中IIS7是默认不安装的,所以在安装完Windows Vista之后如果需要安装IIS7的话,就要自己动手了。安装的步骤为:开始》控制面板》程序》打开或关闭Windows功能》Internet信息服务。IIS7安装时需要注意的是,如果需要ASP、ASP.NET等的支持,是需要把功能模块给装上的,默认是不安装的。

免費防毒軟體-AntiVir

AntiVir : http://www.free-av.com/

安裝教學 : http://b2ddoc.tnc.edu.tw/yh/antivir-ez/

更新無廣告 : http://tonychou.blogspot.com/2007/03/avira-antivir-personaledition-classic.html

2007年5月4日 星期五

Flash相關網站

軟體大學 : http://www.twisu.com.tw/

有很多flash source從list進去可以看到範例,並在左下有Download fla 可下載參考
http://www.senocular.com/flash/source.php

2007年4月30日 星期一

FCS-簡單範例-Hello World

內容來源:Luar's Flash遊樂場


這是最簡單的範例,當Flash連到FlashCom中一個Application後,它會Send一句Hello World給Flash。

在applications下建立一個叫helloworld Folder後,建立一個純文字檔main.asc,裡面輸入:
application.onConnect = function(newClient)
{
application.acceptConnection(newClient);
newClient.call("msgFromSrvr", false, "Hello World");
}

它作用時是當有Flash影片連上它時,它就會Call那個Flash中一個負責與FlashCom聯繫的NetConnection Object的一個自定Method叫msgFromSrvr,並傳出參數"Hello World"。

在Flash MX中,Frame 1輸入:
fc = new NetConnection();
fc.connect("rtmp:/helloworld");
fc.msgFromSrvr = function(msg)
{
trace(msg);
};

測試影片,就可以在Output窗口中見到Hello World。 注意:
新手經常面對的問題,就是經常來回修改Flash MX和main.asc中的ActionScript,但測試影片卻沒有改應,原因是因為凡main.asc經過修改後,都必須Reload那個Application才有效。

方法是在Flash MX Menu Bar選Window>Communication App Inspector,登入後在Active Application Instances選你那個Application,例如:helloworld,按View Detail後,再按Reload App,按OK,再測試影片便可。

2007年4月27日 星期五

無法安裝IIS

內容來源:http://www.atan.cn/article.asp?id=485

安裝時會顯示找不到staxmem.dll,但光碟裡卻有此檔案…
解決方法:
 開始->執行:輸入 esentutl /p %windir%/security/database/secedit.sdb  
按確定即可

用Google建立自已網站的搜尋引擎

http://www.google.com/coop/

Delphi 相關網站

Borland : http://www2.borland.com.tw/tw/reference.html

2007年4月24日 星期二

About Hotfix and Service Pack

Service Pack 可讓產品保持最新狀態、修正已知問題,並可擴充電腦功能。其中含有工具、驅動程式及更新,包括產品發行之後所做的加強。為了方便下載起見,這些項目都會封裝在一起。Service Pack 是產品特有的,亦即每一個產品各有其獨立的 Service Pack,但同一份 Service Pack 常被用在相同產品的不同版本上;例如,同一份 Service Pack 即可用來更新 Windows 2000 Server 及 Windows 2000 Professional。  

Service Pack 也是累加性的, 新的 Service Pack 含有先前各 Service Pack 的所有修正程式,外加之後所建議的任何新修正程式及系統修改。因此安裝最新的 Service Pack 後,就不需要安裝先前的各版本。

Quick Fix Engineering (QFE ) 是 Microsoft 公司內負責撰寫 Hotfix (產品程式碼修補程式) 的一個小組。當個別客戶遭遇嚴重問題,且沒有可用的解決方式時,便需提供 Hotfix。有些技術文件會將 Hotfix 稱為 QFE。  

Hotfix 並未接受廣泛的迴歸測試,且只處理特定問題,因此只有在遇到 Hotfix 可以處理的問題,且在使用現行軟體版本加上最新的 Service Pack 時,才應套用 Hotfix。Hotfix 累積到一定數目之後,會定期包裝成 Service Pack,此時這些 Hotfix 會接受比較嚴格的測試,並公佈讓客戶使用。安全性修補程式  

安全性修補程式的目的在於填補安全性漏洞。意圖闖入系統的駭客會去尋找這些安全性漏洞。安全性修補程式和 Hotfix 類似,但屬於強制性,只要條件符合,就必須儘快部署。許多已發行的安全性更新都是針對用戶端 (常是瀏覽器) 的問題,這些更新可能與伺服器安裝有關,也可能無關。您必須以用戶端修補程式更新目前的用戶端基礎元件,並以系統管理修補程式更新伺服器上的用戶端建置區。

大部份的 Hotfix 名稱都透露了此修正程式的重要資訊。
例如,以下是一個典型的 Hotfix 名稱 Q292435_W2K_SP3_x86_en.EXE,
其中:# Q292435 是知識庫中此 Hotfix 相關文件的編號。
# W2K 是指此 Hotfix 與 Microsoft Windows 2000 相關。
# SP3 是應該包含此 Hotfix 的 Service Pack。
# x86 是此 Hotfix 適用的處理器架構。
# en 是指語言 (英文)。

注意事項:檔名中只有 QXXXXXX.exe,後面沒有 W2K_SP3_x86 的 Hotfix,則是應用程式 (如 Internet Explorer) 所特有。Hotfix 也支援許多指令行參數,可用來控制 Hotfix 安裝程序的行為。

Hotfix 可執行檔的參數說明
-y 執行解除安裝
-f 關機時強迫應用程式關閉
-n 不建立解除安裝目錄
-z 更新完成後不重新開機
-q 無訊息模式 — 沒有使用者介面
-m 自動模式
-l 列出已安裝的 Hotfix

注意事項:檔名為 QXXXXXX.exe 的應用程式特定 Hotfix 通常不會支援上述所有的參數。

如果將安裝多重 Hotfix 的程序寫成指令碼,則可利用 -q 和 -z 參數讓使用者無需介入,且不強迫重新開機。  

在安裝多個 Hotfix 時,通常每安裝好一個,就得重新開一次機。這是因為系統無法替換被鎖定或使用中的檔案,因此要替換的檔案會先置於佇列中,等到系統重新開機後再替換。QChain 工具可讓您將數個 Hotfix 串連起來,只要最後重新開機一次,不需要每次都重開機。如果要使用 QChain,請在安裝 Hotfix 時加上 -z 參數,讓安裝程式完成後不會重新開機。然後執行 QChain.exe,最後再重新開機。

2007年4月23日 星期一

HTML-Structure

內容來源:http://wiki.moztw.org/index.php/HTML-Structure#.E4.B8.80.E5.80.8B.E5.9F.BA.E6.9C.AC.E7.9A.84_HTML_.E6.96.87.E4.BB.B6.E7.B5.90.E6.A7.8B
定義文件的類別
文件類別的宣告,代表了指明你所使用的 html 規格,最常用的文件類別有以下三種 DTD(Document Type Definition)。這是一份標準的 html 文件一定要放在開頭的。
Strict:對於文件語法的要求較為嚴謹的規格。

Transitional:這是比較鬆散的規格,對於語法的嚴謹度要求比較寬鬆。

Frameset:這個規格是專門用在含有框架頁的網頁上。

2007年4月18日 星期三

用PhotoImpact製作ICO

第一步:開啟圖檔



第二步:調整大小為32*32(調整->調整大小)


第三步:轉換色階為16色(調整->轉換影像類型->最佳化16色)

第四步:存檔