在ASP程式中以SQLOLEDB連線到SQL Server2000

在建立連線時發生
Microsoft OLE DB Provider for SQL Server (0x80004005)
Login failed for user 'kingkong'. Reason: Not associated with a
trusted SQL Server connection
的錯誤

其中連線字串如下:
Provider=SQLOLEDB; Data Source=DDSQL02; Initial Catalog=testdb1; User ID="test1";Password="test1"

未設定
integrated Security=SSPI及Trusted_Connection=yes

網路上討論均是以未設定好SQL Server登入模式為解決方法,但經檢查後SQL Server2000 設定均為混合模式

現在發現將上面的連線字串DataSource改為IP就可解決

經使用者敘述是先灌好SQL Server 2000後,再變更電腦名稱及加入網域,是否因此造成透過SQLOLEDB連線時預先以windows帳號登入?

bgm 發表在 痞客邦 留言(0) 人氣()

最近常有人因為中毒或其他原因無法上網

有可能因為防毒軟體在清除病毒時一併把windows內的winsock設定清掉了

可以到下列網址抓winsockfix修正此問題

http://www.snapfiles.com/get/winsockxpfix.html

bgm 發表在 痞客邦 留言(0) 人氣()

MS SQL 可以用update from 
UPDATE titles
SET ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)



但是ORACLE就只不支援

可以用

UPDATE table1 t_alias1
SET column1 =
(SELECT expr
FROM table2 t_alias2
WHERE t_alias1.column2 = t_alias2.column2);

但是些指令當table1中column2有table2裡沒有對應的資料,則column1會被update成null

再不然就只能用cursor
Example 13-7 Using UPDATE With a Subquery
-- Create a table with all the right IDs, but messed-up names
CREATE TABLE employee_temp AS
SELECT employee_id, UPPER(first_name) first_name,
TRANSLATE(last_name,'aeiou','12345') last_name
FROM employees;
BEGIN
-- Display the first 5 names to show they're messed up
FOR person IN (SELECT * FROM employee_temp WHERE ROWNUM < 6)
LOOP
DBMS_OUTPUT.PUT_LINE(person.first_name || ' ' || person.last_name);
END LOOP;
UPDATE employee_temp SET (first_name, last_name) =
(SELECT first_name, last_name FROM employees
WHERE employee_id = employee_temp.employee_id);
DBMS_OUTPUT.PUT_LINE('*** Updated ' || SQL%ROWCOUNT || ' rows. ***');
-- Display the first 5 names to show they've been fixed up
FOR person IN (SELECT * FROM employee_temp WHERE ROWNUM < 6)
LOOP
DBMS_OUTPUT.PUT_LINE(person.first_name || ' ' || person.last_name);
END LOOP;
END;


bgm 發表在 痞客邦 留言(0) 人氣()

因為看了486的介紹
http://www.486word.com/new_page_272.htm

所以也參加了他的團購

下面是照片(果然不如專業的,照得好醜)

整體外觀


這是底座的部分,前面的頭可以換成管子


這是他的核心可以裝水並把髒水吸回去


實際用起來不像廣告中說的那麼厲害
聲音還蠻大的

bgm 發表在 痞客邦 留言(0) 人氣()

美國櫻桃產期又到了

公司也有團購,花了些錢買了三盒來

一盒拿去送人,兩盒留給自己和家人吃

規格是9.5ROW

ROW是美國的規格(轉貼購物網站的說明)

一般櫻桃的果實大小,都是依生產國的標準而訂定之,目前世界上的標準訂定,大致上分為ROW和MM兩種,通常以ROW為標準的地區有美國和加拿大,其它地區都是以公制單位mm為準,如紐西蘭、智利和澳洲。請參考對照表如下:

ROW 9 10 10½ 11 11½ 12
MM 29.8 28.2 26.6 25.4 24.2 22.6 21.6
註:以上尺寸是指櫻桃直徑最寬的部分所量得的尺寸。
 
櫻桃以量規檢查尺寸大小

9.5 ROW的櫻桃和50元硬幣大小幾乎相


下面是我拍的照片
這張曝光了
 

這張比較好

看起來都很大顆

顏色比較深的看來是比較成熟的,吃起來較軟

真的很好吃,我洗一盒一下子就被我自己吃光了

bgm 發表在 痞客邦 留言(0) 人氣()

端午假期結束,上班電腦一開機就出現

發生一個問題,所以 Windows 無法正確檢查這台電腦的授權。錯誤碼:0x80070002。

這個問題

後來請教NTA少恆 
COPY別台電腦 %WINDOR%/SYSTEM32下的
secudp.dat
oembios.dat
oembios.bin
windows才恢復正常

上網查了一下微軟的KB

http://support.microsoft.com/kb/310794

看不出來是什麼問題,真鳥


bgm 發表在 痞客邦 留言(0) 人氣()

當編譯VB程式時發生 Can't find project or library 錯誤
且IDE指向 Date String Len等應該不會發生錯誤的指令

請到 Project/References中取消勾選 有Miss字樣的References

bgm 發表在 痞客邦 留言(0) 人氣()

Crystal Kay-こんなに近くで...

恋がせつないと
すぐそばで気付いたあの夜
だって他の誰より
あなたの事をしってるから
いつものさりけない
優しささえ この胸を締め付けてく

即使戀愛讓人苦悶
在某天夜晚立刻會察覺 你在我身邊
因為我比任何人
對你都要了解
總是若無其事的 溫柔地支持我
令我揪心不已

こんなに こんなに 近くで見つめても
どうして どうして ただの友達なの?
どんなに どんなに 強く思っていても
伝えられない you do not understand
I am so in love with you.

如此地 如此地 即使如此靠近的凝視著
為何 為何 卻只能當朋友
無論 無論如何強烈的思念
都無法傳達給你 you do not understand
I am so in love with you.

「元気ないよね?」と
あなたからいわれた瞬間
涙隠すアクビで
「寝不足かな?」っていい訳した

「怎麼沒精神?」聽到你說的瞬間
用打呵欠來隱藏淚水
「沒睡好吧?」 只好如此解釋


一番大切な
人に嘘を重ねてく...今の私

對最重要的人不斷的說謊 如今的我

毎日 毎日 胸が苦しいから
いくつも いくつも 眠れぬ夜を越え
はじめて はじめて 出逢ったあの日にまた
戻れるのなら いいのに...
I am so in love with you.

每天 每天 都覺得苦悶
多少個 多少個 渡過了無法成眠的夜晚
第一次第一次 相逢的那天
能再回來的話 那該有多好
I am so in love with you.

「アイシテル」と告げたらきっと
もう二度と笑顔のは戻れないかもしれない
けれども友達のまま 作り笑いは
これ以上私出来ないから

「我愛你」如果我告訴你的話 一定
已經無法再看到笑顏再重返
但就這樣笑著只作朋友
我無法再這麼做

ホントは ホントは ずっとすきだったの
いつでも いつでも 愛し續けてたの
あなたに あなたに 届けたい気持ちを
青い空へと囁いた
I am so in love with you.

真的 真的 一直很喜歡你
總是 總是 不斷愛你
想傳達給你的心意
只好向天空偷偷的說
I am so in love with you.


こんなに こんなに 近くで見つめても
どうして どうして ただの友達なの?
どんなに どんなに 強く思っていても
伝えられない you do not understand
I am so in love with you.

如此地 如此地 即使如此靠近的凝視著
為何 為何 卻只能當朋友
無論 無論如何強烈的思念
都無法傳達給你 you do not understand
I am so in love with you.

bgm 發表在 痞客邦 留言(0) 人氣()

每個系統的基礎建設有一些必要項目

使用紀錄,內容最好要有使用者登入的帳號、使用權限、執行的功能項或更細微的動作、日期、時間另外針對這些紀錄在系統上要有VIEW、DELETE的功能;因為如果紀錄在DB中,不能保証DBA會給開發人員讀取資料的權限。而刪除功能則是怕使用率過高爆檔(如果是交易性的系統的話,這另外考量)

如果需要不同權限、身份登入系統測試,會因為SSO造成一些不便;可以考慮使用權限模擬的方式。但是如果交易系統的話,請不要作夢。

測試是很大的問題,在程式設計時所有測試項目請以特定條件設定在測試區才有功用;程式能直接由測試區不必修改就能放入版本管理系統直接上線才合格

 user 對於一套系統的好壞的感覺,並不是來自所有功能的表現,而會集中在某幾個常用的功能上面,針對這些功能需要最用心去作。自己要玩的部份等真的有空再玩吧。

模擬正式環境的測試環境要跟正式環境越像越好,要是有人回報有bug,先在這個環境上面照他提供的步驟來重建案發現場。你要知道在什麼情況下可以把這個問題慢動作播放一遍。一般說就是reproduce這個bug。
接著寫程式的人,才有辦法去找出問題的關鍵去解決。所以在記錄bug時,怎麼樣重建案發現場的reproduce procedure是很重要的記錄。 

你要叫美眉測試,要叫他們在測試環境上面測。要驗證bug有沒有被解掉,也是要在這個環境上測。要不然你家美眉到底是不是在唬弄你,或是這個新版本放上去會不會動,就是個大問號。
這個環境上應該就是上一次production的正式release,再加上programmer最近針對bug的修正。
也因為要管的環境如果很多很麻煩,最好所有上code的動作都是透過標準的script,從cvs中把code checkout再丟上去rebuild。
你要上code到正式環境(production),就是要把測試環境上的這一份丟上去。這樣,總不會有什麼測好的東西還上不了線的怪現象。當然啦,你的測試環境跟production要長的一模一樣,不要一邊用tomcat4.x,一邊用tomcat 5.5。想死也不是這樣玩的。
如果有測試資料要塞,那最好也把sql都事先準備好。這樣比較省事。

     

bgm 發表在 痞客邦 留言(0) 人氣()


這個問題,微軟有提出修正程式了。 

微軟針對此所提所提出的修正檔:
http://support.microsoft.com/kb/916089/

但安裝這個修正檔後,系統又會出現錯誤,必須要再安裝以下的修正檔。
詳細內容:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q927891

程式下載:
WINXP:
http://www.microsoft.com/downloads/details.aspx?familyid=7A81B0CD-A0B9-497E-8A89-404327772E5A&displaylang=zh-tw

WIN2003:
http://www.microsoft.com/downloads/details.aspx?familyid=2A4A8F01-ACD6-42A1-BB78-3D83CAEDA7A7&displaylang=zh-tw



轉載自 http://www.yannicafe.info/wp/2007/02/18/61.html


svchost.exe 吃掉所有 CPU 資源的原因很多,不過我的狀況都是在執行 Windwos Update 時發生的(或是自動更新服務 Automatic Updates 執行時)。因此解決方法主要就是把 Windows 的自動更新重設一次,步驟如下:

一、首先檢查系統服務的狀態。
1. 點「開始」–>「執行」,輸入「services.msc」後按「確定」。
2. 在服務「Automatic Updates」上點二下。
3. 點選「登入」頁籤,確定登入身分為「本機系統帳戶」且「允許服務與桌面互動」“沒有”被選取。
4. 確認服務已在目前的「硬體設定檔」中被啟用,如果沒有,按下「啟用」按鈕。
5. 點選「一般」頁籤,確定「啟動類型」為「自動」,然後按下「啟動」按鈕以啟動服務。
6. 對「Background Intelligent Transfer Service (BITS) 」服務重覆 2 ~ 5 的步驟。

二、接著重新註冊 Windwos Update 的元件。
1. 點選「開始」–>「執行」。
2. 輸入「REGSVR32 WUAPI.DLL」後按 Enter。
3. 當看到 “DllRegisterServer 在 WUAPI.DLL 成功” 的訊息後按下「確定」。
4. 重覆上述步驟重新註冊下列元件
REGSVR32 WUAUENG.DLL
REGSVR32 WUAUENG1.DLL
REGSVR32 ATL.DLL
REGSVR32 WUCLTUI.DLL
REGSVR32 WUPS.DLL
REGSVR32 WUPS2.DLL
REGSVR32 WUWEB.DLL

三、最後清除可能已損壞了的 Windows Update 暫存目錄。
1. 點「開始」–>「執行」,輸入「cmd」後按「確定」。
2. 在命令提示字元中鍵入以下指令。(若出現錯誤訊息請先重開機後再報執行一次
net stop WuAuServ
2. 點「開始」–>「執行」,輸入「%windir%」後按「確定」。
3. 找到「SoftwareDistribution」並更名為「SDold」。
4. 點「開始」–>「執行」,輸入「cmd」後按「確定」,並在在命令提示字元中鍵入以下指令。
net start WuAuServ

四、大功告成!

bgm 發表在 痞客邦 留言(0) 人氣()

 偶而就會吃掉上百MB的記憶體
 然後就hang了
 要terminate msnmsgr.exe這個process再重啟才行
 版本為 8.1.0178

 這邊也是這樣, 原先以為是因為作了Windows Update造成問題.
  後來作了以下步驟才解決掉.
  1. 到控制台的新增移除中將WLM相關程式移除
  2. 到 Program Files中將有關 Messenger的目錄移除
  3. 到Documents and Setting中, 帳號名稱下的 Local Settings\Applicaiton Data
     \Microsoft 中刪除Messenger 相關目錄
  4. Regedit, HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOF 刪除Messneger相關資料;
     HKEY_CURRENT_USER\SOFTWARE\MICROSOFT 刪除 Messenger相關資料
  5. 重新安裝WLM

bgm 發表在 痞客邦 留言(0) 人氣()

.NET Framework 提供了一個System.Web.Mail Class來處理寄信電子郵件

但是實際上使用時會發生一些錯誤,下面是從各網站找來的解決方法


mail.To         = csweng@gmail.com;//收件者的email address(必要)
mail.From       = abc@some.com;//寄件者的email address(必要)
mail.Subject    = "TEST";//寄件標題  
MailMessage mail= new MailMessage();
mail.From = "csweng@gmail.com";//收件者的email address(必要)
mail.To = "abc@some.com";
mail.Subject = "TEST";
mail.Body = "THIS IS MAIL TEST!!";
if (nZipSize < 5*1024*1024) //5MB
{
 MailAttachment ma = new MailAttachment(zipFile); //夾帶附件
 mail.Attachments.Add(ma);
}
else
{
 mail.Body +=  "\r\n因檔案大於5MB無法以信件附件寄送";
}

SmtpMail.SmtpServer = "88.8.64.47";//指定SMTP SERVER
SmtpMail.Send(mail);
/*以下是SMTPMAIL需要認証時需要加入*/
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)  
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "SMTP 登入帳號")  
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "密碼")   
     
另外請參考
http://www.systemwebmail.com/faq/3.8.aspx

http://blog.joycode.com/ghj/archive/2004/02/17/13197.aspx

http://www.blueshop.com.tw/board/show.asp?subcde=BRD20050328163711ZN1&fumcde=FUM20041006161839LRJ&rplcnt=13


bgm 發表在 痞客邦 留言(0) 人氣()

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>vForm表單驗證程序</title>
<style type="text/css">
<!--
div.info {
 width: 170px;
 overflow:visible;
 height:auto;
 font-size: small;
 position: absolute;
 background-color: #FFffdd;
 border: 1px solid #000;
 filter:progid:DXImageTransform.Microsoft.Shadow(color=#111111,direction=135,strength=3);
 top: 375px;
 padding: 5px;
 left: 671px;
}
div.info_title

.err{
 padding: 5px;
 height: 50px;
 width: 24em;
 position: absolute;
 background-color: #FFFFCC;
 left: 196px;
 top: 114px;
 font-size: small;
 opacity:0.5;
 border: 1px double #333333;
 filter: Shadow(Color=#000000, Direction=135);
 filter:progid:DXImageTransform.Microsoft.Shadow(color=#111111,direction=135,strength=5);

}
#form1 .text_input {
 border-top: 1px solid #333333;
 border-right: 1px solid #999999;
 border-bottom: 1px solid #ddd;
 border-left: 1px solid #000000;
}
.info_title {
 color: #FF0000;
 background: #ACB9D1;
}
#form1 {
 position: static;
 left: 581px;
 top: 463px;
 border: 1px solid #3300FF;
 padding: 5px;
 ;
}
#imok {
 display: block;
 position: absolute;
 height:315px;
 overflow:scroll;
 left: 100px;
 top: 100px;
 width: 306px;
}
.title h1 {
 background: #33CCFF;
 border-bottom: medium solid #3366FF;
}
.title p {
 font-size: medium;
 text-indent: 2em;
}
body {
 font-family: Verdana, Arial, Helvetica, sans-serif;
 font-size: medium;
}

code {
 font: 12px/18px "lucida Grande", verdana, lucida, Arial, helvetica, "宋體", sans-serif;
 border:1px solid #0099cc;
 padding:5px;
 margin: 5px;
 width: 80%;
 color: #000;
 background-color: #ddedfb;
 display: block;
}

-->
</style>
<script language="JavaScript" type="text/javascript">
//程序基本思路:通過擴展對象來實現,將String擴展 將默認的表單元素擴展 定義兩個自定義對象。
//String.isEmail
//String.isUrl
//表單元素.required
//表單元素.isvalid
//表單元素.validate
//

//字符串驗證擴展
//├電子郵件驗證
String.prototype.isEmail = function(){
 var tmpStr = this;
 var email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
 return email.test(tmpStr)
}
//├http地址驗證
String.prototype.isUrl = function(){
 var url = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
 var tmpStr = this;
 return url.test(tmpStr);
}
//├日期驗證(第一部分)
String.prototype.isDateTime = function(){
 if(Date.parse(this)||Date.parseDate(this))
 {
  return true;
 }
 else
 {
  return false;
 }
}
String.prototype.isInteger = function()
{
 var _i = /^[-\+]?\d+$/;
 var _s = this;
 return _i.test(_s);
}
Date.prototype.toIsoDate = function()
{
 var _d = this;
 var _s;
 _Y =_d.getFullYear();
 _M = _d.getMonth() + 1;
 _D = _d.getDate();
 _H = _d.getHours();
 _I = _d.getMinutes();
 _S = _d.getSeconds();
 with(_d)
 {
  _s = [getMonth() + 1,getDate(),getHours(),getMinutes(),getSeconds()];
 }
 for(var i = 0; i < _s.length; i++)
 {
  if (_s[i].toString().length == 1)_s[i]= '0'+_s[i];
 }
  return (_Y + '-'+_s[0]+'-'+_s[1]+' '+_s[2]+':'+_s[3]+':'+_s[4])
}
//├日期驗證(第二部分)
Date.parseDate = function(str, fmt) {
 fmt = fmt||"%Y-%m-%d %H:%M";
 var today = new Date();
 var y = 0;
 var m = -1;
 var d = 0;
 var a = str.split(/\W+/);
 var b = fmt.match(/%./g);
 var i = 0, j = 0;
 var hr = 0;
 var min = 0;
 for (i = 0; i < a.length; ++i) {
  if (!a[i])
   continue;
  switch (b[i]) {
      case "%d":
      case "%e":
   d = parseInt(a[i], 10);
   break;

      case "%m":
   m = parseInt(a[i], 10) - 1;
   break;

      case "%Y":
      case "%y":
   y = parseInt(a[i], 10);
   (y < 100) && (y += (y > 29) ? 1900 : 2000);
   break;

      case "%b":
      case "%B":
   for (j = 0; j < 12; ++j) {
    if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; }
   }
   break;

      case "%H":
      case "%I":
      case "%k":
      case "%l":
   hr = parseInt(a[i], 10);
   break;

      case "%P":
      case "%p":
   if (/pm/i.test(a[i]) && hr < 12)
    hr += 12;
   else if (/am/i.test(a[i]) && hr >= 12)
    hr -= 12;
   break;

      case "%M":
   min = parseInt(a[i], 10);
   break;
  }
 }
 if (isNaN(y)) y = today.getFullYear();
 if (isNaN(m)) m = today.getMonth();
 if (isNaN(d)) d = today.getDate();
 if (isNaN(hr)) hr = today.getHours();
 if (isNaN(min)) min = today.getMinutes();
 if (y != 0 && m != -1 && d != 0)
  return new Date(y, m, d, hr, min, 0);
 y = 0; m = -1; d = 0;
 for (i = 0; i < a.length; ++i) {
  if (a[i].search(/[a-zA-Z]+/) != -1) {
   var t = -1;
   for (j = 0; j < 12; ++j) {
    if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; }
   }
   if (t != -1) {
    if (m != -1) {
     d = m+1;
    }
    m = t;
   }
  } else if (parseInt(a[i], 10) <= 12 && m == -1) {
   m = a[i]-1;
  } else if (parseInt(a[i], 10) > 31 && y == 0) {
   y = parseInt(a[i], 10);
   (y < 100) && (y += (y > 29) ? 1900 : 2000);
  } else if (d == 0) {
   d = a[i];
  }
 }
 if (y == 0)
  y = today.getFullYear();
 if (m != -1 && d != 0)
  return new Date(y, m, d, hr, min, 0);
 return today;
};
//擴展完成

//對象定義

var vform = new Object;
//獲取彈出提示的顯示位置
vform.getAbsolutePos = function(el) {
 var _p = { x: 0, y: 0 };
  do{
    _p.x += (el.offsetLeft - el.scrollLeft);
    _p.y += (el.offsetTop - el.scrollTop);
  }
   while(el=el.offsetParent)
     return _p;
      };
vform.toString = function()
{
 return("vForm表單驗證程序\n版本:1.0beta\n作者:雷曉寶\n時間:2006-07-31\n網址:http://lxbzj.com\n許可:LGPL");
}
vform.rules = new Array;
vform.rules.add = function(obj,minLength,dataType,errmsg,maxLength,rule,patams)
{
    var curlen = this.length;
        this[curlen] = [obj,minLength,dataType,errmsg,maxLength,rule,patams];
        //this[curlen] = [ 0 ,    1    ,    2   ,   3  ,   4  ,  5 ,   6  ];

    return this.length;
}
vform.init= function()
{
 if(document.getElementById(this.form_id))
 {
  //獲取表單
  var o = document.getElementById(this.form_id);
  //遍歷規則
  for(var i = 0 ;i< this.rules.length;i++)
  {
   _r = this.rules[i]
   //如果存在元素,則添加驗證程序
   if(_o = o.elements[_r[0]])
   {
    //判斷是是否必填,是否有最小長度
    if(_r[1] > 0 )
    {
     _o.required = true;//必填的含義和最小長度為1是一樣的
     _o.minLength = parseInt(_r[1]);
    }
    else
    {
     _o.required = false;
     _o.minLength = 0;
    }
    //判斷是否有最大長度;
    if(_r[4])
    {
     _o.maxLength = parseInt(_r[4]);
    }
    //添加長度驗證函數
    _o.validLength = function ()
    {
     var b =true;
     if(this.minLength)
     {
      b = (this.minLength <= this.value.length);
     }
     if(this.type == 'textarea' && this.maxLength )
     {
      b = b && (this.maxLength >= this.value.length );
     }
     return (b);
    }
    //添加驗證,進行格式驗證
    switch(_r[2])
    {
     case 'e-mail':
      _o.validate = function()
      {
       this.isvalid = this.validLength() && this.value.isEmail();
       return (this.isvalid);
      };
      break;
     case 'url':
      _o.validate = function()
      {
       if (this.value.substring(0,7) != 'http://')this.value = 'http://' +this.value;
       this.isvalid = this.validLength() && this.value.isUrl();
       return (this.isvalid);
      }
      break;
     case 'date':
      _o.validate = function()
      {
       var _d = Date.parse(this.value)||Date.parseDate(this.value);
       this.value =  _d.toIsoDate();
       
       this.isvalid = this.validLength() && this.value.isDateTime();
       return (this.isvalid);
       a=a>b?1:1;
      }
      break;
     case 'number':
      _o.validate = function()
      {
       this.isvalid = this.validLength() && this.value.isInteger();
       return (this.isvalid);

      }
      break;
     case 'any':
      _o.validate = function()
      {
       this.isvalid = this.validLength();
       return  this.isvalid
      }
      break;
     default :
      var regexp = /^\\\w+$/;
      if ( regexp.test(_r[2]))//表示必須和同表單下的某個字段的值一樣。用于重復輸入的驗證
      {
       _el = _r[2].substring(1);
       if (o.elements[_el]){
        _o.equal = _el;
        _o.validate = function()
        {
         if(_o = this.form.elements[this.equal])
         {
          if ( (_o.value == this.value) && this.validLength())
          {
           return true;
          }else {
          return false;
          }
         }else{
          alert('setup error');
         }
        
        }
       }else
       {
        alert(_el + 'is not a valid form element');
        _o.validate = function(){return true;}
       }
      }
      var regexp1 = /^\\(==|!=|>=|<=|>|<)/;
      if ( regexp1.test(_r[2]) )
      {
       _s0 = _r[2];
       _s1 = RegExp.$1;
       _s2 = _s0.replace(regexp1,'');
       _operator = _s1.substring(0);//比較操作符
       var regexp2 = /^\w+$/;
       if (regexp2.test(_s2))//是一個標志符,整數 或者變量
       {
        _o.operation = _operator+_s2;
        _o.validate = function()
        {
         _b = true;
         if (this.value.length !=0)
         {
          _b = eval(this.value+this.operation+';');
         }         
         _b = _b && this.validLength();
         return _b;
        }
       }
      };
      break;
      
    }
    //添加驗證提示(div標簽)并初始化
    var _p = vform.getAbsolutePos(_o);
    _o.tip = new tip(_r[3],vform.err_class,_p.x+_o.offsetWidth+3,_p.y);

    _o.tip.init();
    //失去焦點時,開始驗證
    _o.onblur =function(e)
    {
     if(this.minLength || this.value.length >0)
     {
      if( this.validate() )
      {
       this.tip.hide();
      }else
      {
       this.tip.show();//顯示錯誤信息
       //this.focus(); 添加這句在ie里會導致死循環 :(
       return false;
      }
     }
    }
   }
  }
 //焦點驗證可能會失敗,所以最后需要表單提交前的驗證作為最后的補充。
  document.getElementById(this.form_id).onsubmit = function()
  {
   var valid = true;
   for(i=0;i<this.elements.length;i++)
   {
    _o = this.elements[i];
    if(_o.minLength && !_o.isvalid)
    {
     _o.tip.show();
     valid = false;
    }
   }
   return valid;
  }
 }
}
//彈出提示定義
function tip(text,className,x,y)
{
 var o = document.createElement("div");
 o.style.display = "none";
 o.innerHTML = text;
 //var t = document.createTextNode(text);
 document.body.appendChild(o);
 //o.appendChild(t);
 
 this.init = function(dis)
 {
  o.className = "info";
  o.style.left = x+"px";
  o.style.top = y+"px";
  o.style.zindex = 100;
  if(dis)
  {
   o.style.display = "";
  }
  else
  {
   o.style.display = "none";
  }
 }
 this.show = function()
 {
  o.style.display = "";
 }
 this.hide = function()
 {
  o.style.display = "none";
 }
}


function start()
{
  vform.form_id = 'form1';//必須是表單的id
  vform.err_class = 'info';//出錯提示的樣式
 //驗證規則,逐條填寫
vform.rules.add('frm_name',1,'e-mail','請您按照 user@domain.com 的格式輸入電子郵件地址。<br /><span style="color:#f00">必填項目</span>');
  vform.rules.add('myweb',1,'url','請您按照 http://www.domain.com 的格式輸入您的網址。<br /><span style="color:#f00">必填項目</span>');
  vform.rules.add('dateinput',0,'date','請按2000-03-05 的格式輸入日期。<br /><span style="color:#f00">必填項目</span>');
  vform.rules.add('qq',0,'number','這必須是一個整數');
  vform.rules.add('least10',10,'any','您必須至少填寫10個<br /><span style="color:#f00">必填項目</span>');
  vform.rules.add('ok100',1,'any','這里被限制為100個字符<br /><span style="color:#f00">必填項目</span>',100);
  vform.rules.add('r_pass0',5,'any','密碼最短5位最長20位<br /><span style="color:#f00">必填項目</span>',20);
  vform.rules.add('r_pass1',5,"\\r_pass0",'確認密碼錯誤<br /><span style="color:#f00">必填項目</span>',20);
  vform.rules.add('frm_sel',1,"\\>2",'必須大于2000<br /><span style="color:#f00">必填項目</span>');
  vform.init();
 
}

</script>
</head>
<body onload="start()">

<form id="form1" name="form1" method="get" action="">
 <label for="frm_name">e-mail:
 <input name="frm_name" type="text" class="text_input" id="frm_name" title="輸入一個電子郵箱地址"/>
 </label>
 *
 <p>
  <label for="r_pass0">輸入密碼:
  <input name="r_pass0" type="text" class="text_input" id="r_pass0" title="輸入您希望的密碼 " />
  </label>
 *</p>
 <p>
  <label for="r_pass1">密碼確認:
  <input name="r_pass1" type="text" class="text_input" id="r_pass1" title="將密碼確認一次" />
  </label>
 *</p>
 <p>
  <label for="frm_sel">選擇:
  <select name="frm_sel" id="frm_sel" title="請選擇一個答案">
   <option value="0">請選擇一個答案</option>
   <option value="1" selected="selected">1000</option>
   <option value="2">2000</option>
   <option value="3">3000</option>
   <option value="4">4000</option>
   <option value="5">5000</option>
   <option value="6">6000</option>
  </select>
</label>
 *</p>
 <p>
  <label for="input3">輸入網址:
  <input name="myweb" type="text" class="text_input" id="input3" title="輸入一個網址" onmousemove="" value="http://" maxlength="100"/>
  </label>
 *</p>
 <p>
  <label for="dateinput">輸入日期
  <input name="dateinput" type="text" class="text_input" title="輸入一個日期" id="dateinput"/>
</label>
 *</p>
 <p>
  <label for="mub">輸入數字
  <input name="qq" type="text" class="text_input" title="填寫數字" id="mub"/>
  </label>
 </p>
 <p>
  <label for="len">輸入任意但長度限制為10個
  <input name="least10" type="text" class="text_input" maxlength="88" id="len"/>
  *
  </label>
 </p>
 <p>
  <label for="text">只能輸入100個
  <textarea name="ok100" cols="40" rows="5" id="text" title="詳細內容"></textarea>
  *
  </label>
 </p>
 <p>
  <input type="submit" name="Submit" value="提交" />
  <button onclick="alert(vform)" >關于驗證程序</button>
 </p>
</form>
<!--具體的日期設置,必須放在body的結束標簽前面-->
<script type="text/javascript">
  vform .init();
    Calendar.setup({
   inputField     :    "dateinput",   // 把這個改成你需要的 id
   ifFormat       :    "%Y-%m-%d %H:%M", // format of the input field
   showsTime      :    true,
   //button     :    "dateinput_btn",
   timeFormat     :    "24"
   });
 </script>
<!--END具體的日期設置,必須放在body的結束標簽前面-->
<div class="title">
 <h1>vForm1.0beta</h1>
 <ul>
  <li>作者:雷曉寶</li>
  <li>時間:2006-08-08</li>
  <li>網址:http://lxbzj.com</li>
  <li>e-mail:lxbzmy@163.com</li>
  <li>許可:LGPL</li>
 </ul>
 <h2>功能簡述:</h2>
 <ol>
   <li>
     <h3>驗證:</h3>
     <ul>
       <li>http地址。</li>
          <li>時間日期</li>
       <li>e-mail</li>
       <li>數字</li>
       <li>字符長度檢查</li>
       <li>一項輸入與另一項輸入比較(例如:密碼的確認輸入)</li>
       <li>大小比較(只能有一個比較符號)</li>
        </ul>
   </li>
      <li>
        <h3>特點</h3>
        <ul>
          <li>擴展容易,可以方便的添加自己需要的驗證方式</li>
          <li>兼容性好(ie5,6 firefox,oprea)。</li>
        <li>可用性好,沒有使用alert()來彈出提示;</li>
        </ul>
      </li>
  </ol>
 <p> </p>
 <h2>使用方法</h2>
 <p>使用時,需要定義一個出錯提示框的樣式,本例的樣式為:<code>div.info {
     width: 170px;<br />
    overflow:visible;<br />
    height:auto;<br />
    font-size: small;<br />
    position: absolute;<br />
    background-color: #FFffdd;<br />
    border: 1px solid #000;<br />
    filter:progid:DXImageTransform.Microsoft.Shadow(color=#111111,direction=135,strength=3);<br />
    padding: 5px;<br />
    }</code></p>
 <p>然后在網頁&lt;head&gt;部分中添加<code>&lt;script type="text/javascript" src="calendar/calendar.js"&gt;&lt;/script&gt;</code><br />
   ,然后可以寫一個函數設置表單名稱,驗證規則,<code>function start()<br />
   {
   <br />
   vFormvform.form_id = 'form1';<br />
  vform.err_class = 'info';<br />
  // (obj,required(true/false),dataType,errmsg,minlen,maxlen,rule,patams)<br />
  //驗證規則,逐條填寫<br />
  vform.rules.add('frm_name',1,'e-mail','請您按照 user@domain.com 的格式輸入電子郵件地址。&lt;br /&gt;&lt;span style="color:#f00"&gt;必填項目&lt;/span&gt;');<br />
  vform.rules.add('myweb',1,'url','請您按照 http://www.domain.com 的格式輸入您的網址。&lt;br /&gt;&lt;span style="color:#f00"&gt;必填項目&lt;/span&gt;');<br />
  vform.rules.add('dateinput',0,'date','請按2000-03-05 的格式輸入日期。&lt;br /&gt;&lt;span style="color:#f00"&gt;必填項目&lt;/span&gt;');<br />
  vform.rules.add('qq',0,'number','這必須是一個整數');<br />
  vform.rules.add('least10',10,'any','您必須至少填寫10個&lt;br /&gt;&lt;span style="color:#f00"&gt;必填項目&lt;/span&gt;');<br />
  vform.rules.add('ok100',1,'any','這里被限制為100個字符&lt;br /&gt;&lt;span style="color:#f00"&gt;必填項目&lt;/span&gt;',100);<br />
   vform.init();<br />
   }</code>最后為body添加onload事件。   <code>   &lt;body onload="start();"&gt;
 </code></p>
 <p> </p>
</div>
</body>
</html>

bgm 發表在 痞客邦 留言(0) 人氣()

CODE:

一般的checkbox<input type=checkbox >
<br/>
比較不同的checkbox<input type=checkbox style="position:absolute;clip: rect(5 16 16 5)">
<br/>
平面checkbox--&gt;<input type=checkbox style="position:absolute;clip: rect(6 15 15 6)">
<br/>
外凸checkbox--&gt;<input type=checkbox style="position:absolute;clip: rect(6 17 17 6)">
<br/>
一般的select
<div style="width:108px; height:19px; overflow: hidden; border: 1 solid black">
<div style="position:absolute; left:-2; top:-2; width:171px; height:50px; clip: rect(2 108 19 2)">
    <select name="select">
      <option selected>aaaaaaaaaaaa</option>
      <option>bbbbbbbbbbbb</option>
      <option>cccccccccccc</option>
      <option>dddddddddddd</option>
    </select>
  </div>
 </div>
<br/>
平面的select<select name="menu1" style="position:absolute;clip: rect(6 17 17 6)">
    <option>111111</option>
    <option>222222</option>
    <option>333333</option>
    <option>444444</option>
    </select>
<br/>
外凸的select<select name="menu1" style="position:absolute;clip: rect(2 50 30 2)">
    <option>111111</option>
    <option>222222</option>
    <option>333333</option>
    <option>444444</option>
  </select>
</br></br>


語法︰
 
clip : auto | rect ( number number number number )
 
參數︰
 
auto :  對象無剪下
rect ( number number number number ) :  依據上-右-下-左的順序提供自對象左上角為(0,0)坐標計算的四個偏移數值,其中任一數值都可用auto取代,即此邊不剪下
 
說明︰
 
檢索或設定對象的可視欄位。欄位外的部分是透明的。
必須將position的值設為absolute,此屬性方可使用。
自IE5開始,此屬性在MAC平臺上可用。
對應的腳本特性為clip。請參閱我編寫的其它書目。

bgm 發表在 痞客邦 留言(0) 人氣()

很簡單利用label就能達成

<label for="box"><input type=checkbox name=box id=box value="box">點這裡的文字看看!</label>

bgm 發表在 痞客邦 留言(0) 人氣()