2010年9月3日 星期五

遠端連線

讓遠端連線桌面與本機相同
請加兩個參數/console與 /admin
%SystemRoot%\system32\mstsc.exe /console /admin

2010年8月11日 星期三

[轉貼]簡易JavaScript語法結構

來源:http://www.ncku.edu.tw/~rcenter/book/html/JavaScript.html
簡易JavaScript語法結構

「網頁瀏覽或執行,是開啟在瀏覽視窗(window)中,包含了一份或數份的HTML文件(document),文件中又包含了各種物件(object),每個物件都可以加以命名(name)或加上識別碼(id)。」
上面,先講了一段怪怪的話,但這段話,其實就是JavaScript的精要。常看到所謂DOM模式,就是指Document Object Model,或稱為「文件物件模式」,這是把HTML文件當作物件來操作,這種操作模式的好處,第一當然是符合程式語言主流,二來也易於學習,許多人認為 JavaScript不好學,事實上,瞭解JavaScript語法結構,就算用猜的,也能對八成!
比如說,視窗標題吧,視窗是什麼?window,對吧!而標題呢?則是title,那視窗標題用JavaScript角度來看,就變成 window.title,這裡,把所有的點「.」用「的」代替,用中文「唸」一遍變成:window的title,很口語吧!
其實,JavaScript就是在這種語法架構下發展,再舉個例子:
document.images['banner'].src

一樣用唸的:文件(document)的影像(image)名字叫banner的來源(src),這是什麼?再看看HTML中的對應:


所以,document.images['banner'].src就是JavaScript用來控制(讀取或設定)HTML文件中,被命名為 banner的影像來源。
也就代表,如果給document.images['banner'].src一個新值,就可以變換影像,那什麼時候用呢?看設計人員的巧思了,要在按下滑鼠時,就用onClick事件,要在滑鼠移過去時,就用onMouseOver事件,任君組合。
許多入門者,畏於學習程式語言,一味追求所謂酷炫網頁花招,若您是這麼認為的話,到處搜尋網頁特效,或迷惑於某些網頁編輯程式內建的特效,那你已經走上不歸路了。拉回話題,這裡不打算大書特書 JavaScript 的原理和語法、方法、屬性、物件等,直接進入應用面來說明如何上手 JavaScript。
取得或設定物件屬性值

先來思考一下,HTML文件中有什麼資料可能會需要被讀取出來,或需要被重新設定?比如有張圖片,圖片來源是什麼?這時用讀取的方式,那能不能改呢?就是設定,既然能讀取,也能設定,那是不是就能在瀏覽過程中改變呢?沒錯!這就是JavaScript可執行的基本功之一。
每一個HTML中的標籤,都可以加上id為這個標籤加上識名稱,例如某個儲存格
....

那麼,這個以my作為識別的HTML標籤,在JavaScript眼中,透過「由識別元取得元件」的相關資料就不是難事,而所謂由識別元取得元件,轉換成JavaScript語言,變成:
getElementById=由識別元(ById)取得(get)元件(Element)

非常直譯式的語法,別忘了,這是HTML文件(document)完整語法當然就變成:
document.getElementById('my')

這樣就取得了以my識別的HTML元件了。接下來呢?想知道以my識別的儲存格中的文字是什麼顏色?
document.getElementById('my').style.color

這個.style又是什麼呢?因為顏色等屬性,都是樣式嘛,再用前節提到的方法來記憶一下:
文件(document)的由識別元取得元件(getElementById)名為my的樣式(style)的顏色(color)
那這個儲存格的背景色是什麼呢?
document.getElementById('my').style.backgroundColor

想要改變背景色?
document.getElementById('my').style.backgroundColor='色碼';

這麼來看,其實JavaScript的語法並不難,反而,顏色是color,背景色是backgroundColor等這些代表名稱比較難,又分大小寫,這才真的難。常用的資料列表如下:
包含的HTML內容

document.getElementById('ID').innerHTML

使用樣式


document.getElementById('ID').className

顏色


document.getElementById('ID').style.color

背景色


document.getElementById('ID').style.backgroundColor

背景影像


document.getElementById('ID').style.backgroundImage

顯示?


document.getElementById('ID').style.visibility
取得或設定表單物件值

表單部份的處理,也是JavaScript可運用的重頭戲,首先,有一份表單,看起來可能像(取材自台灣雅虎)


紅框部份就是一份表單,這份表單在原始 HTML 原始檔中,看起來像是:


元件
代表這裡有個表單,在 與
之間的所有表單元件,都歸屬在這個表單之中,以這份表單而言,只有一個文字欄位,和一個執行表單動作的按鈕。
而文字欄位的語法是


input 是固定語法,套句白話的說法是:這裡有個表單元件喔!
type 則是宣告這個表單元件是什麼類型,指定類型為 text,同樣的,套句白話的說法是: 這裡有個表單元件是文字欄位喔!
name 屬性為這個文字欄位的表單元件命名,以便我們使用 JavaScript 來控制。再套句白話說法:這裡有個表單元件是文字欄位,名字叫作 searchStr 喔!
而完整一點的寫法,把
包含進來,就變成了:




同樣的,在 form 屬性中也有個 name 這裡命名為 formName,到這裡為止,我們作的工作是:有一份表單,叫作 formName,裡面有一個名字叫作 searchStr 的文字欄位。
好了,準備就緒了。請理解接下來這句有點繞口的說明:
在文件 (document) 中有份 formName 的表單,裡面有個 searchStr 的文字欄位。
這時,在 JavaScript 的眼中,這個文字欄位就變成了 document.formName.searchStr 了。
如果你還不習慣,用唸的方式,把所有的「點」唸成「的」,再來看一遍
document.formName.searchStr=document的formName的searchStr
是不是簡單多了?
接著,到目前為止,只不過可以指定文件裡的表單中的某個元件而已,照上面說明,document 的 formName 的 searchStr 的什麼東西呢?正確的說法叫作「文字欄位的屬性」,所謂屬性,就是基本資料的意思,比如:

value

文字欄位的值,也就是輸入在欄位中的文字


document.formName.searchStr.value

length


文字欄位內容的長度


document.formName.searchStr.value.length

也就是說,如果你在文字欄位中輸入的是「網誌」那麼 document.formName.searchStr.value 就等於「網誌」。而 document.formName.searchStr.value.length 就等於 2。
有些屬性是「唯讀」的,也就只能把值讀取出來,不能設定,這種屬性就稱為唯讀,本書不打算在這裡列一份清單告訴讀者些是唯讀,恐怕讀者會消化不良。
能夠讀取表單的值,就代表能檢查表單中的值是合規定的還是不合規定,比如在年齡欄裡,不能填入A,在血型欄裡,不能填入X型等,這就是表單驗證。要作到表單驗證,要先能讀取表單元件裡的資料,原理已經說明過了,接下來就把表單各種元件可能的值的語法列出來供讀者參考。
文字欄位
HTML語法






document.formName.textName.value

值的長度


document.formName.textName.value.length

是否唯讀


document.formName.textName.readOnly

文字區塊
HTML語法






document.formName.textareaName.value

值的長度


document.formName.textareaName.value.length

是否唯讀


document.formName.textareaName.readOnly

寬度


document.formName.textareaName.cols

高度


document.formName.textareaName.rows

單選核取
HTML語法



共幾項


document.formName.radioName.length

第N項的值


document.formName.radioName[N].value

第N項核取?


document.formName.radioName[N].checked

只有一項的值


document.formName.radioName.text

只有一項核取?


document.formName.radioName.checked

註:N由0開始計算
多選核取
HTML語法



共幾項


document.formName.boxName.length

第N項的值


document.formName.boxName[N].value

第N項核取?


document.formName.boxme[N].checked

只有一項的值


document.formName.boxName.text

只有一項核取?


document.formName.boxe.checked

註:N由0開始計算
下拉清單

HTML語法



共幾項


document.formName.selectName.length

選到第N項


document.formName.selectName.selectedIndex

第N項的值


document.formName.selectName.options[N].value

第N項的文字


document.formName.selectName.options[N].text

註:N由0開始計算
按鈕

HTML語法





按鈕上的字


document.formName.btnName.value

按鈕可不可按


document.formName.btnName.disabled
條件式和迴路

有了基本語法概念後,JavaScript最多的語法,if,最基本的迴路則是for,語法分別如下:
if (條件){
如果條件成立,要處理的動作
}else{
如果條件不成立,要處理的動作
}

通常條件是偵測某一個變數值,例如a等不等於1,就寫成:
if (a==1)
請注意,要連續兩個等號,JavaScript中,用於判斷值的等號,要連續兩個等號。
如果是要測試「不等於」則寫成:
if (a!=1)
迴路基本語法則為:
for (var i=起始值;i<最大值;i++){
要處理的動作}

迴路中要處理的動作,也可以加上條件式,判斷過再進行適當處理。例如,判斷表單中單選中,那一個項目被選取,可以使用迴路加條件式判斷,如:
for (var i=0;iif (document.formName.radioName[i].checked){
到這裡就找到被選取的項目
}
}

以上,就是基本的JavaScript,把握這幾條原則,在本書範例中含有JavaScript程式時,讀者可以對照參考。


2010年5月19日 星期三

私有雲端服務架設

前言:
最近看了一些雲端的資料,實際上雲端系統比較類似"資源共享"的理論,"資源共享"可能跟你認知上的有點不太一樣。

以前web server 一天服務三千人可以正常執行,如果一天來三十萬人次那web server 一定會忙線然後lag、當機(畫面不會動但是系統正在消化這三十萬人次的資料量),如果要公司添購滿足這樣需求的機器勢必會加大公司對it部門的預算,俗話說"想喝牛奶,不用真的養一頭牛在家裡",去路口的便利超商買就好了,何況就算買了以後機器負載可能90%都在低負載,這就是一種資源浪費,如果要應付突然的大量的使用量時,在it世界裡以前沒有解決方案但是現在有了---那就是雲端。

開頭說的資源共享是什麼意思呢? it的運算量跟儲存空間跟記憶體和流量,我們可以把它們換算成金錢,只要需要有龐大的狀況時我就買下這些資源,這跟保險原理+使用者付費是不是很類似呢?平常我就付一些維護費用當我用需要的時候我可以買更多的資源,如果沒有使用時我就不用花一毛錢,所以雲端服務公司的機器費用就可以被攤提到這些資源售價裡面了,當然對企業來說我的機器費用+維護費+軟體費都可以省下一筆開銷。

我相信以前要集合全世界的閒置pc在龐大運算的時候是很困難的,但是將來有一天所有的服務都上雲端的時候,集合雲端資源運算科學運算的話會是比較簡單的方式。

ubuntu 9.10開始支援雲端了現在最新版是10.04,之後我們會開始架設服務器用vm的方式模擬這個環境看看是不是真的分散運算了
有空還會測試google 的雲端不過這是另外一篇文章了

2010年5月5日 星期三

面試考題(二) asp與asp.net區別

1. asp是直譯式編譯 速度慢
asp.net是編譯式編譯 速度快

2. asp.net ui跟商業邏輯分開所以比較好修改跟程式碼reuse
asp程式碼與html code 混在一起管理跟修改不易

3. asp.net新增了比較多的web control的元件,減少開發時間

2010年4月28日 星期三

面試考題(一)畫星

過去我在面試的時候經常都會加考專業,有時候當場沒寫出來,有時候覺得寫的不夠好
或者有更好的想法可惜短時間內沒法實現
我花一點時間一步一步架構出解法,希望能對初學者有更好的幫助。有時候我們在想一個邏輯的時候會跳的太快不知道怎麼著手,這裡我用漸進的方式來實做一方面會比較清楚遇到問題時,該怎麼旁敲側擊找出線索來完成program,以下是我面試時遇到的考題或者從ptt上看到的,
希望各位讀者會喜歡。

// interview_program.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{

/* 第一題
*
**
***
****

*/
printf("第一題");
printf("\n");

for(int i=0;i<4;i++)
{
for(int j=0;j { printf("*");
}
printf("\n");
}


/* 第二題

****
***
**
*

*/
printf("\n");
printf("第二題");
printf("\n");

for(int i=0;i<4;i++)
{
for(int j=4;j>i;j--)
{ printf("*");
}
printf("\n");

}

/* 第三題
*
**
***
****
***
**
*

*/
printf("\n");
printf("第三題之一");
printf("\n");

for(int i=0;i<4;i++)
{
for(int j=0;j { printf("*");
}
printf("\n");
}

for(int i=0;i<4;i++)
{
for(int j=4;j>i+1;j--)
{ printf("*");
}
printf("\n");

}

printf("\n");
printf("第三題之二");
printf("\n");


for(int i=0;i<7;i++)
{
for(int j=0;j {
if(i>3)
continue;
else
printf("*");

}
printf("\n");

for(int j=7;j>i+1;j--)
{
if(i<3)
continue;
else
printf("*");

}


}

/* 第四題
---*---
--***--
-*****-
*******

*/
printf("\n");
printf("第四題");
printf("\n");


for(int i=0;i<4;i++)
{


for(int j=4;j>i+1;j--)
{ printf("-");
}

for(int j=1;j<=2*i+1;j++)
{ printf("*");
}
for(int j=4;j>i+1;j--)
{
printf("-");
}

printf("\n");





}


return 0;
}

2010年4月25日 星期日

asp.net 部署

1.
在vs2008有一個發行網站按下去後會問你要把你專案網站放在那
預設是 c://interrupt/wwwroot
把復製資料夾放到網頁伺服器的 c://interrupt/wwwroot

2. 如果你有用資料庫的話請用卸載然後在去把MDF跟log一起複製在附加到主機伺服器

3. 新增使用者 這個使用者是你網頁程式會用到的身份

4.如果你有用crystalreport的話請到官方網站下載
CRRedist2008_x86.msi (BootStrapper)
CRRedist2008_x64.msi (64 bit Intel)
CRRedist2008_ia64.msi (64 bit Itanium)
看你的os是那一個選一個下載主要是幫你的主機伺服器裝相關報表的dll檔
5. 測試一下應該就可以正常囉 記ㄉ主機名稱跟跟你程式寫ㄉ主機名稱一樣喔不然會找不到資料 庫

2010/05/11 VS2010 上市發表會提供
在VS2010 ASP.net 4.0 有提供一個新的功能
只要輸入伺服器的連線字串可以將整個專案連同
資料庫(MS SQL)整個打包部署

2010年4月24日 星期六

如何備份資料庫 使用windows form 的方式

學會:
這個主題會讓你學會如何備份跟還原

前言
為什麼要學這個技術?
備份資料庫你直接開資料庫管理工具保證都會有這個備份功能,但是你想想看如果你是套裝軟體開發商,你的客戶搞不好連資料庫管理工具都不知道在那裡 ,那他要如何完成備份的工作呢?比如說進銷存軟體你要備份你的資料庫這個資料庫可能是你裝軟體的時候它幫你裝上的,所以就沒有管理工具囉(如mysql)這時候就必需透過套裝軟體的gui介面幫你完成備份&還原

我已經幫你介紹了一些背景相信你可以明白的知道這個技術會用在那裡囉以下我們要正式開始囉

開始:
這次花一點時間研究一下,如何備份資料庫的資料表,這件事如果透果DBMS來做的話可能是相當簡單的但是有時候透過一個GUI介面的BUTON也可以完成,但真實的理由是非專業人員該如何實現備份當然是按下備份鈕備份頂多選個備份時間,跟備份資料跟備份地點,當然備份完還要還原......................好了 ,我已經說明了大概的功能了接下來還有一些規畫。

備份就是要知道
資料表結構
1.有資料表名稱
2.資料表欄位名稱
3.資料表欄位定義
4.資料表欄位條件限制
4.資料表可否允許null
5.資料表唯一
6.資料列

我的意思是你必需從資料表得到這些後你才能用sql的語法在製造相同的table達到備份的目地
概念是不是很簡單呢? 那我該如何得到上述的資訊了 我從來都不知道這些定義存在那邊!!!所以在資料庫中資料表是放在那呢?

1.查資料庫是否存在?
select * from sysdatabases where sid> 0x01
可以找出自訂的資料庫系統的我們就跳過吧
2.查資料庫裡的所有資料表?
use TestReport; --選擇你要查的資料庫
select TABLE_NAME from INFORMATION_SCHEMA.TABLES;
go
3. 查資料表的欄位定義
use TestReport;
select * from INFORMATION_SCHEMA.COLUMNS ;
go

那我們來熱身一下吧

首先我先畫一下windows form的草稿gui 大概是長這樣

實際是長這樣

code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
label6.Text = "";
String ServerAddress = "";
String useId = "";
String pwd = "";
ServerAddress = textBox1.Text;
useId = textBox2.Text;
pwd = textBox3.Text;

try
{ //測試連接資料庫
SqlConnection conn = new SqlConnection("Data Source=" + ServerAddress + ";Initial Catalog=" + comboBox1.SelectedText + ";Persist Security Info=True;User ID=" + useId + ";Password=" + pwd);
SqlCommand cmd = new SqlCommand("select * from company ", conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
//dr.Read()如果有資料的話會回傳true 沒有資料會回傳false
if (dr.Read())
{
label6.Text = "連線成功";
textBox1.ReadOnly = true;
}
else
{
label6.Text = "連線失敗";


}

conn.Close();
cmd.Cancel();
dr.Close();
}
catch (Exception ex)
{//登入異常時我們用 一個對話框來裝這些異常訊息
textBox1.ReadOnly = false;
//傳ex 異常訊息給對話框
Form2 f2=new Form2(ex);
f2.ShowDialog();//記的顯示它

}



}

private void Form1_Load(object sender, EventArgs e)
{
// TODO: 這行程式碼會將資料載入 'masterDataSet.news' 資料表。您可以視需要進行移動或移除。
//this.newsTableAdapter.Fill(this.masterDataSet.news);
textBox2.Enabled = false;
textBox3.Enabled = false;

}


//輸入伺服器之後可以馬上查詢伺服器上所有的私有資料庫 以條件sid> 0x01篩選
private void textBox1_Leave(object sender, EventArgs e)
{
String QQ = "";
QQ = textBox1.Text;
try
{
SqlConnection conn2 = new SqlConnection("Data Source=" + QQ + ";Initial Catalog=master;Integrated Security=True");
//SqlCommand cmd2 = new SqlCommand("select * from sysdatabases where sid> 0x01", conn2);
conn2.Open();

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from sysdatabases where sid> 0x01", conn2);
da.Fill(ds, "sysdatabases");
// this.dataGridView1.DataSource = ds.Tables["sysdatabases"];
conn2.Close();
textBox2.Enabled = true;
textBox3.Enabled = true;
//combobox "name"是sysdatabases的屬性
comboBox1.DataSource = ds.Tables["sysdatabases"];
comboBox1.DisplayMember = "name";
}
catch(Exception ex)
{
textBox2.Enabled = false;
textBox3.Enabled = false;
Form2 f2 = new Form2(ex);
f2.ShowDialog();

}
}


}
}
/code

前題:
實現備份有很多方式
1.實體檔案複製之後還原在載入
2.parse 資料庫然後編寫標準sql語法
3.DBMS管理備份功能

所以要實現相同目標有三條路可以走parse是比較細工的做法也可以學到很多東西,三種在本篇議題都會討論實做

想法流程:
1. 用焦點event 當輸入伺服器名稱後馬上捉取該伺服器上的資料庫用combox裝起來
供使用者選擇,登入方式是windows 驗證
2.輸入使用者密碼後 可以測試連接,以後就資以server 驗證登入操作系統
3.備份原理就是parse 整個資料內容使之成為一個sql 語法的檔案,內容包含資料庫,資料表結構,
資料列,之後還會parse像條件限制,預存,檢視表,觸發

功能1:備份資料庫
點選備份資料庫後會備份所選的資料庫,備份的資料庫要存在那?
先找出資料庫內有多少資料表,使用一個list<>來裝資料名稱 後要找出資料欄位跟欄位型態就可以完成簡單的資料表建構資訊

2010年4月23日 星期五

日期的差距計算

很多時候我們會計算日期的差距
比如說年資, 到期日多久

我們使用一個含數 datadiff(參數1,參數2,參數3)
參數1:表示要以year=yy ,Month=MM,day=DD 來計算
是以參數3 - 參數2

範例:
Declare @day1 date
Declare @day2 date
declare @day3 int
set @day1='2009-04-20'
set @day2='2009-04-27'
select @day3=DATEDIFF(DD,@day1,@day2)
select @day3
----------------------------------------------
7

2010年4月22日 星期四

sql 語法 bteween 與 in 的用法 篩選資料

資料庫 :AdventureWorks sql2008 範例資料庫
一年前我去面試得時候 ,那時我還不知道between用法的時候 , 在sql裡面查詢某一個資料行的區間範圍時我們用
select * from HumanResources.Employee where BirthDate >='1972-05-15' And BirthDate <='1977-05-15' 所謂的區間值其實本身已經隱含排序的味道,比如說日期, 真實數字 所以才有區間的感覺 在between 的語法下: where 資料行1 between A and B PS:A必須要小於B

select * from HumanResources.Employee where BirthDate Between '1972-05-15' and '1977-05-15'
所以這樣是不是簡單多了呢

2010年4月8日 星期四

電話禮儀sop

1. 拿起話統
2. 說"XXXe公司 您好 敝姓 xx 很高興為您服務 請問有什麼事嗎?"
3. 根據問題按保留
4. 轉給適合的人接聽














以下是廣告
營養分析軟體

sql 語法 union

union
簡稱聯集

將兩個查詢結果 合併在一起

為什麼要用union
a:目前有兩家公司 如果你要知道兩家公司的員工資料的話該怎麼用呢?
這時後你就可以用union合併兩個公司的員工資料
以下是code
select companyA.companyName, companyA.companyId from companyA
UNION
select companyB.companyName, companyB.companyId from companyB

不過如果把兩個公司的員工資料表分開的話 這正規化也做太爛了吧

2010年3月14日 星期日

cystalreport 按下匯出會登入錯誤得問題?

在page_load()裡面呼叫report()
ui
只拉元件就好了
用SqlDataSource1捉使用者selectquery的dataset 給crystalreport
在到.rpt設定
protected void report()
{
SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings["TestReportConnectionString"].ConnectionString;
DataTable dt = new DataTable();
String openwin = "";
String sql = TextBox1.Text.Trim();
if (String.IsNullOrEmpty(sql))
{
SqlDataSource1.SelectCommand = "select * from company";
dt = ((DataView)this.SqlDataSource1.Select(DataSourceSelectArguments.Empty)).ToTable();

}
else
{
SqlDataSource1.SelectCommand = "select * from company where companyId=" + "'" + TextBox1.Text + "'";
dt = ((DataView)this.SqlDataSource1.Select(DataSourceSelectArguments.Empty)).ToTable();
}
Response.Cache.SetCacheability(HttpCacheability.NoCache); //clear cache
ReportDocument rd = new ReportDocument();
rd.Load(Server.MapPath("CrystalReport.rpt"));
rd.SetDataSource(dt);
CrystalReportViewer1.ReportSource = rd;
GridView1.DataSourceID = SqlDataSource1.ID;
}

2010年3月4日 星期四

下拉式選單+連結資料庫 c# 版

SqlConnection Conn1 = new SqlConnection(WebConfigurationManager.ConnectionStrings["TestReportConnectionString"].ConnectionString);
SqlDataAdapter da1 = new SqlDataAdapter("select version from product where productName='萬能廚師系列'", Conn1);
DataSet ds1 = new DataSet();
da1.Fill(ds1, "product");
DropDownList3.AutoPostBack = true;
DropDownList3.DataTextField = "version";
DropDownList3.DataValueField = "version";
DropDownList3.DataSource = ds1.Tables["product"].DefaultView;
DropDownList3.DataBind();
Conn1.Close();