2010年6月30日 星期三

W3Schools Home SQL Tutorial

W3Schools Home

sum on count 的微妙關係

原處
select sum(col1)
from
(
select count(col1) col1 from tablename
group by columnname
)a

--------------------------------
換自己的運用:
我要統計今天書被出租的本數 (條件自己擴充)
SELECT COUNT(*) AS item_count
FROM (SELECT isbn_bar FROM BOOKS
GROUP BY isbn_bar) AS check_item

也就是說:
利用 ---> select xxx from ( ) as tmp_a
可以運用出更多的統計數據

SQL count 和 sum 的運用一

要指定來店次數:
select * from user_num group by user HAVING count(user)>=2

2010年6月29日 星期二

動態函式取值


如圖示,是採用函式方式取回值;這運用面就看各位怎去發揮了.
可大可小,會強化的;包好用!!
比如:
1.醫療數據類
2.單一會員基本檔
3...等等

這 code 很簡單,就慢慢品嚐這樣的作法和回饋的簡便性取值了
----
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
For i As Integer = 0 To UBound(arr_func)
ListBox1.Items.Add(arr_func(i).ToString)
Next
End Sub

Private Function arr_func() As Integer()
Dim arrint(9) As Integer
arrint(0) = 10
arrint(1) = 9
arrint(2) = 8
arrint(3) = 7
arrint(4) = 6
arrint(5) = 5
arrint(6) = 4
arrint(7) = 3
arrint(8) = 2
arrint(9) = 1
Return arrint
End Function
End Class

2010年6月28日 星期一

好用的 regex

這兒看到這篇 regex 的運用
依原例,我把它強化了;底下親自體驗一下這regex 帶來的方便性:
regex:表示不變的規則運算式


程式碼:
Imports System.Text.RegularExpressions

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim reg As New Regex("\d+")
Dim m As Match
Dim TmpStr As String = Label1.Text
TextBox1.Text = ""

For i As Integer = 0 To Label1.Text.Length
m = reg.Match(Label1.Text)
If m.Success Then
TextBox1.Text += m.Value
Label1.Text = Label1.Text.Replace(m.Value, "")
Else
Exit For
End If
Next
Label1.Text = TmpStr
End Sub
End Class

-------------
以上有看到嗎? 若採用一般的作法:迴圈+ascii , 這整體效率就差了

2010年6月26日 星期六

split 分割字串的差異性

在.net 下的 split() 與 n.split 是截然不同的,須特別小心使用.
先來看看.net help 的註解說明:
(1) n.split
傳回字串陣列,這個陣列包含這個執行個體中,由指定的字串或 Unicode 字元陣列之元素所分隔的子字串。
Unicode 字元陣列 (可分隔這個執行個體中的子字串)、不包含分隔符號的空陣列、或 nullNothingnullptrNull 參照 (即 Visual Basic 中的 Nothing)。
(2)split()
傳回以零起始的一維陣列,其中包含指定數目的子字串。

以上比較過後,相信可看到 unicode 字元陣列的關鍵了;所以大家在使用上千萬別搞錯了!!
不然哪一天寫到要切割組合字串時,一直debug不到問題所在呀!!
底下使用一個範例來說明{差異性}:


程式碼:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox2.Text = TextBox1.Text.Split("東南轉偏東風")(0) + vbCrLf + "***" + vbCrLf + TextBox1.Text.Split("東南轉偏東風")(1)
TextBox3.Text = Split(TextBox1.Text, "東南轉偏東風")(0) + vbCrLf + "***" + vbCrLf + Split(TextBox1.Text, "東南轉偏東風")(1)
End Sub
End Class

Store Procedure 動態語法預防SQL Injection方式

看了這篇
又查了一下sp_executesql這運用<支援參數值與 Transact-SQL 字串分開設定>
用這麼久的procedure,現才知道這招的好用!! 上面那篇,實在有點看不懂;是我能力太差!?
自己親自玩了一下,哈;簡單啦! 看了這張圖,包會的

----
底下為 sql code:
declare @sql nvarchar(300)
declare @func nvarchar(300)
declare @bar nvarchar(20)

set @func='@bar varchar(20)'
set @bar='ISBN97xxxx'
set @sql='select * from BOOKS where bar=@bar'
execute sp_executesql @sql,@func,@bar

2010年6月25日 星期五

簡易秀照片程式

在搜尋資料時,發現這個範例原處
但有遺漏,不知是故意的還是忘記了? 這若是初學者,可能run 不出來就放棄了
花了一點時間,把此範例調整並增加遺漏的部分

底下為我修正過後的結果圖:


原始程式碼:
Public Class Form1

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Dim header1, header2 As ColumnHeader
header1 = New ColumnHeader
header2 = New ColumnHeader
header1.Text = "File name"
header1.TextAlign = HorizontalAlignment.Left
header1.Width = 160

header2.TextAlign = HorizontalAlignment.Left
header2.Text = "Location"
header2.Width = 300
ListView1.Columns.Add(header1)
ListView1.Columns.Add(header2)
ListView1.View = View.Details
ListView1.GridLines = True
'--
Dim path As String = "C:\Documents and Settings\My Documents\My Pictures\"
Dim pic As String = "*.jpg"
Dim dirInfo As New System.IO.DirectoryInfo(path)
Dim file As System.IO.FileInfo

Dim files() As System.IO.FileInfo = dirInfo.GetFiles(pic)
ListView1.Items.Clear()
If Not (files Is Nothing) Then
For Each file In files
Dim item As New ListViewItem(file.Name)
item.SubItems.Add(file.FullName)
ListView1.Items.Add(item)
Next
End If
End Sub

Private Sub ListView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown
Dim selection As ListViewItem = ListView1.GetItemAt(e.X, e.Y)
If Not (selection Is Nothing) Then
PictureBox1.Image = System.Drawing.Image.FromFile(selection.SubItems(1).Text)
End If
End Sub

End Class

結帳條相關項目

1.來客數=每一張交易序號
2.商品數=明細數量總和
3.件數=明細筆數
4.平均客點數=銷售額/來客數
5.平均點單價=銷售額/商品數
6.銷售淨額=銷售額-其他付款項(已開發票項)

2010年6月24日 星期四

判斷是否日期的函數

本例是依據LINQ to SQL Equivalent of ISDATE() 套用原處
CREATE FUNCTION My_ISDATE(@maybeDate varchar(max))
returns bit
as return ISDATE(@maybeDate);

------
var db = SomeDataContext;
var query = from p in db.MyTable
where db.My_ISDATE(p.field1)
select p;

2010年6月23日 星期三

超出範圍的 datetime 值

在MS-SQL發生:char 資料型別轉換成 datetime 資料型別時,產生超出範圍的 datetime 值。
苦思到底怎回事,也google了;都是明確的問題可發現,但我這題真的是我眼睛太疲勞嗎?
資料結構:
s_day datetime -->2010/6/14
s_time varchar(5) -->07:43

在使用select s_day+' '+s_time>= or s_day+' '+s_time<= 時,卻報:
char 資料型別轉換成 datetime 資料型別時,產生超出範圍的 datetime 值。
但是我又 print isdate(s_day+' '+s_time) 又都是 1 (true)
怪事耶...是閏?
------
要用這樣嗎?
CONVERT(DATETIME, '2010-06-23 00:00:00', 102)
待測
2010/6/24 測試結果:沒用
------
最終解決方式:
1.採用isdate來判斷是否有非日期的資料
2.將 日期 + 時間 = 非日期的值 , 自動清除 (如:時間 00:00)
如此在使用較複雜的sql時,就能省掉這樣麻煩;但主要還是要在人機這界面層加入判斷,防止問題再發生

2010年6月22日 星期二

ASCII 表

自己要用的,因常常要接硬體設備;這ASCII表很重要!!

datagridview 匯出 excel

在CSDN 討論中發現一個不錯的匯出excel方式,原處
底下為我整理過,並測寫的結果:


底下為程式碼:
Imports System.IO

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim tba As New DataTable
tba.Columns.Add("t1", GetType(System.String))
tba.Columns.Add("t2", GetType(System.String))

Dim row As DataRow
row = tba.NewRow
row("t1") = "自己輸入值"
row("t2") = "自己輸入值"
tba.Rows.Add(row)

DGridView1.DataSource = tba
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call DataToExcel(DGridView1)
End Sub

Public Sub DataToExcel(ByVal m_DataView As DataGridView)
Dim kk As New SaveFileDialog()
kk.Title = "儲存EXECL文件"
kk.Filter = "EXECL文件(*.xls) |*.xls |所有文件(*.*) |*.*"
kk.FilterIndex = 1
If kk.ShowDialog() = DialogResult.OK Then
Dim FileName As String = kk.FileName ' + ".xls"
If File.Exists(FileName) Then
File.Delete(FileName)
End If
Dim objFileStream As FileStream
Dim objStreamWriter As StreamWriter
Dim strLine As String = ""
objFileStream = New FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write)
objStreamWriter = New StreamWriter(objFileStream, System.Text.Encoding.Unicode)
For i As Integer = 0 To m_DataView.Columns.Count - 1
If m_DataView.Columns(i).Visible = True Then
strLine = strLine + m_DataView.Columns(i).HeaderText.ToString() + Convert.ToChar(9)
End If
Next
objStreamWriter.WriteLine(strLine)
strLine = ""

For i As Integer = 0 To m_DataView.Rows.Count - 1
If m_DataView.Columns(0).Visible = True Then
If m_DataView.Rows(i).Cells(0).Value Is Nothing Then
strLine = (strLine & " ") + Convert.ToChar(9)
Else
strLine = strLine + m_DataView.Rows(i).Cells(0).Value.ToString() + Convert.ToChar(9)
End If
End If
For j As Integer = 1 To m_DataView.Columns.Count - 1
If m_DataView.Columns(j).Visible = True Then
If m_DataView.Rows(i).Cells(j).Value Is Nothing Then
strLine = (strLine & " ") + Convert.ToChar(9)
Else
Dim rowstr As String = ""
rowstr = m_DataView.Rows(i).Cells(j).Value.ToString()
If rowstr.IndexOf(vbCr & vbLf) > 0 Then
rowstr = rowstr.Replace(vbCr & vbLf, " ")
End If
If rowstr.IndexOf(vbLf) > 0 Then
rowstr = rowstr.Replace(vbLf, " ")
End If
If rowstr.IndexOf(vbTab) > 0 Then
rowstr = rowstr.Replace(vbTab, " ")
End If
strLine = strLine + rowstr + Convert.ToChar(9)

End If
End If
Next
objStreamWriter.WriteLine(strLine)
strLine = ""
Next
objStreamWriter.Close()
objFileStream.Close()
MessageBox.Show(Me, "儲存EXCEL成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub

End Class

2010年6月21日 星期一

超棒的ERP解釋

引用:原出處
ERP (Enterprise Resource Planning) presentation
寫的超棒的……你不懂何謂ERP嗎? 看了這篇文章就懂了~~^^ "
****************************************
一天中午,丈夫在外給家裏打電話:「親愛的老婆,晚上我想帶幾個同事回家吃飯可以嗎?」(訂貨意向)
妻子:「當然可以,來幾個人,幾點來,想吃什麼菜?」
丈夫:「6個人,我們7點左右回來,準備些酒、烤鴨、番茄炒蛋、涼菜、蛋花湯……你看可以嗎?」(商務溝通)
妻子:「沒問題,我會準備好的,」(訂單確認)
妻子記錄下需要做的功能表(MPS計劃),
具體要準備的菜:鴨 酒 番茄 雞蛋 調料──(BOM物料清單),
發現需要:1只鴨,5瓶酒,4個番茄,──(BOM展開),
炒蛋需要6個雞蛋,蛋花湯需要4個雞蛋(共用物料)。
打開冰箱一看(庫房),只剩下2個雞蛋(缺料)。
來到自由市場,妻子:「請問雞蛋怎麼賣?」(採購詢價)
小販:「1個1元,半打5元,1打9.5元。」
妻子:「我只需要8個,但這次買1打。」(經濟批量採購)
妻子:「這有一個壞的,換一個。」(驗收,退料,換料)
回到家中,準備洗菜、切菜、炒菜──(工藝路線),
廚房中有燃氣、微波爐、電飯堡──(工作中心)。
妻子發現拔鴨毛最費時間(瓶頸工序,關鍵工藝路線),
用微波爐自己做烤鴨可能就來不及(產能不足),
於是決定在樓下的餐廳裏買現成的(產品委外)。
下午4點,電話鈴又響:「媽媽,晚上幾個同學想來家裏吃飯,你幫準備一下。」(緊急訂單)
「好的,兒子,你們想吃什麼,爸爸晚上也有客人,你願意和他們一起吃嗎?」
「菜你看著辦吧,但一定要有番茄炒雞蛋。我們不和大人一起吃,6:30左右回來。」(呵呵,不能併單處理)
「好的,肯定讓你們滿意。」(訂單確認)
雞蛋又不夠了,打電話叫小販送來。(緊急採購)
6:30,一切準備就緒,可烤鴨還沒送來,急忙打電話詢問:「我是李太太,怎麼訂的烤鴨還沒送來。」(採購委外單跟催)
「不好意思,送貨的人已經走了,可能是堵車吧,馬上就會到的。」門鈴響了,「李太,這是您要的烤鴨。請在單上簽一個字。」(驗收、入庫、轉應付帳款)
6:45,女兒的電話:「媽媽,我想現在帶幾個朋友回家吃飯可以嗎?」(呵呵,又是緊急訂購意向,要求現貨)
「不行呀,女兒,今天媽媽已經需要準備兩桌飯了,時間實在是來不及,真的非常抱歉,下次早點說,一定給你們準備好。」(哈哈,這就是ERP的使用侷限,要有穩定的外部環境,要有一個起碼的提前期)
送走了所有客人,疲憊的妻子坐在沙發上對丈夫說:「親愛的,現在咱們家請客的頻率非常高,應該要買些廚房用品了(設備採購),最好能再雇個小保姆(連人力資源系統也有介面了)。」
丈夫:「家裏你做主,需要什麼你就去辦吧。」(通過審核)
妻子:「還有,最近家裏花銷太大,用你的私房錢來補貼一下,好嗎?」(哈哈哈哈,最後就是應收貨款的催要。還可再加上成本核算,總帳,決策分析等等)。
例如……送走了所有客人,妻子拿著計算器,準確地算出了今天的各項成本(成本核算)和節餘原材料(車間退料),並計入了日記帳(總帳),把結果念給丈夫聽(給領導報表),丈夫說道「值得,花了145.49元,請了好幾個朋友,感情儲蓄帳戶增加了若干」(經濟效益分析)。
還可再寫下去,種種原因妻子和丈夫打架,造成整個ERP系統岌岌可危,請來了幾大著名的ERP諮詢公司,妻子和某諮詢顧問好上了(key user跳槽到了諮詢公司)…………

2010年6月18日 星期五

Shell CMD ping

看到有人問,在net 下怎shell ping ip ; 底下範例:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Shell("CMD.exe /c ping 127.0.0.1 -t", AppWinStyle.MinimizedNoFocus, False, -1)
End Sub
End Class

2010年6月17日 星期四

SQL Server Management Studio 物件總管參數設定


使用 SQL Server Management Studio 在編寫<預存程序>時
若發現出現很多物件宣告且文字顏色對應很奇怪,表示:
SQL Server 物件總管->指令碼 (這地方的參數設定亂掉了)
底下為標準參數:
<一般指令碼選項>
IncludeVarDecimal:False
分隔個別陳述式:True
包含描述性標頭:True
針對伺服器版本編寫指令碼:SQL Server 2008
編寫 USE <資料庫> 的指令碼:True
編寫全文檢索目錄的指令碼:False
編寫變更追蹤的指令碼:False
<物件指令碼選項>
包含 IF NOT EXISTS 子句:False
產生相依物件的指令碼:False
結構描述會限定物件名稱:True
編寫資料壓縮選項的指令碼:False
編寫擴充屬性的指令碼:True
編寫權限的指令碼:False
<資料表和檢視表選項>
ScriptDriIncludeSystemNames:False
包含 IDENTITY 屬性:True
包含定序:False
將使用者定義資料類型轉換成基底類型:False
產生 SET ANSI PADDING 命令:True
結構描述會限定外部索引鍵參考:True
編寫 CHECK 條件約束的指令碼:True
編寫主索引鍵的指令碼:True
編寫外部索引鍵的指令碼:True
編寫全文檢索索引的指令碼:False
編寫索引的指令碼:False
編寫唯一索引鍵的指令碼:True
編寫統計資料的指令碼:False
編寫資料分歌配置的指令碼:False
編寫預設值的指令碼:True
編寫檔案群組的指令碼:True
編寫檢視表資料行的指令碼:True
編寫繫結預設值和規則的指令碼:False
編寫觸發程序的指令碼:False

2010年6月16日 星期三

CheckedListBox1 項目數值相加


本題要達到上面圖示內容(是數值)相加,程式如下:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim addsum As Integer = 0
For i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1
addsum += Val(CheckedListBox1.CheckedItems.Item(i).ToString)
Next
MessageBox.Show(addsum)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
CheckedListBox1.Items.Add("4")
CheckedListBox1.Items.Add("8")
CheckedListBox1.Items.Add("16")
CheckedListBox1.Items.Add("32")
CheckedListBox1.Items.Add("64")
End Sub
End Class

2010年6月14日 星期一

Buffer.BlockCopy 複製指定的位元組數到從特定位移開始的目的陣列上

.NET Framework 類別庫這是微軟上的MSDN範例
由這buffer位移,表示VB能處理更低階的工作了(有點跟組合語言一樣ASM);但要運用必須瞭解位移的方式和特性
底下依原例,稍調整並呈現數據出來;方便研究!!
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim src() As Short = {258, 259, 260, 261, 262, 263, 264, _
265, 266, 267, 268, 269, 270}
Dim dest() As Long = {17, 18, 19, 20}
' src: 010E 010D 010C 010B 010A 0109 0108 0107 0106 0105 0104 0103 0102
' dest: 0000000000000014 0000000000000013 0000000000000012 0000000000000011
' 未位移前的陣列內容
For i As Integer = 0 To UBound(src)
For j As Integer = 0 To UBound(dest)
ListBox1.Items.Add("S:" & Hex(src(i)) & " D:" & Hex(dest(j)))
Next
Next

' 執行位移陣列和內容
Buffer.BlockCopy(src, 5, dest, 7, 6)
Buffer.BlockCopy(src, 16, dest, 22, 5)
Buffer.BlockCopy(src, 4, src, 5, 7)
Buffer.BlockCopy(src, 16, src, 15, 7)
For i As Integer = 0 To UBound(src)
For j As Integer = 0 To UBound(dest)
ListBox2.Items.Add("S:" & Hex(src(i)) & " D:" & Hex(dest(j)))
Next
Next
' src: 010E 010D 0D01 0C01 0B01 0A09 0108 0701 0601 0501 0404 0103 0102
' dest: 00000000000C010B 010A000000000013 0000000701060105 0100000000000011

End Sub
End Class

--用圖來一下--

function 一次處理多程序並回傳

此問題,是在csdn論壇看到;順便回答,自己記錄起來;以後遇到可用!!
底下範例簡單,但...細看卻可運用在很多判斷機制上唷.
-----------------------------------------------
Public Class Form1
Dim p() As Boolean

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For i As Integer = 0 To UBound(fp)
MessageBox.Show(i & " " & fp(i))
Next
End Sub

Function fp()
'p(1)=false,p(2)=true,p(3)=false,p(4)=false,p(5)=false
ReDim p(4)
p(0) = False
p(1) = True
p(2) = False
p(3) = False
p(4) = False

Return p
End Function
End Class

2010年6月13日 星期日

發票機 TP-3688

原討論文
底下為個人整理:
採用LPT/RS232均可:
這是控制指令,翻成 chr (&h??) 即可
byte[] ESC_FF = new byte[] { 0x1B, 0x56, 0x42 };
byte[] ESC_G = new byte[] { 0x1B, 0x47 };
byte[] ESC_R = new byte[] { 0x1B, 0x52 };
byte[] ESC_P = new byte[] { 0x1B, 0x50, 0x42, 0x01 };
byte[] ESC_C = new byte[] { 0x1B, 0x43 };
byte[] ESC_V = new byte[] { 0x1B, 0x56,0x42 };

列印:
Dim str as string
str = Chr(&H1B) & "P" & "B" & "1" & "aaa" & Chr(&HD)
str & = Chr(&H1B) & "P" & "B" & "1" & "bbb" & Chr(&HD)
str & = Chr(&H1B) & "P" & "B" & "1" & "ccc" & Chr(&HD)

Dim strByte() as Byte = System.Text.Encoding.Default.GetBytes(str)
invoicePrinter.Open()
invoicePrinter.Write(strByte, 0,strByte.Length)
invoicePrinter.Close()

初探 Visual Studio 2010 Ultimate 繁體試用版

Microsoft Visual Studio 2010 已於 2010 年 5 月 6 日台灣上市發表會中精彩上市!
今天利用整整一天時間,測一下VS2010新功能和差異性了;在本篇中無法全部,只能針對部分;因實在太浩瀚了.
1.先要下載Visual Studio 2010 Ultimate 企業旗艦版(試用版)
Microsoft Visual Studio 2010 Ultimate 試用版 - ISO
2.再來要花時間安裝了,因我採用全部安裝約7.5GB;安裝完成後又加裝說明文件檔約600MB~800MB,所以全套安裝到好,要8.0GB~8.5GB的容量,這共花了3~4小時(因電腦慢)

終於安裝好了,來看看有哪些功能:

A:元件擴充管理員

這代表著,將會有更多更多用不盡的資源和套用更多的元件;減少開發時間了,相對的要熟悉元件特色時間就得花更多了

B:UML功能

我習慣上是採用StarUML這套Free的工具,至於這次VS2010新加的UML倒要試試看

C:程式CODE更智慧型了(如下圖)

包含相對應均可,如:for , if ...等等

D:報表部分,微軟已把Crystal Report 脫離出來;不再內嵌了,要使用就得手動自己下載/安裝了
這整個過程,要花點時間安裝了!!


上圖一樣可點選打開,但進入後;卻不一樣了!(如下圖)














---
Crystal Report (v)14 安裝後,竟無法嵌入 VS2010 ; 待研究中
找好久,終於找到這篇了;時間太晚了,改天有空再測裝寫心得了
Crystal Reports for Visual Studio 2010 Beta

2010年6月10日 星期四

發票機接rs232印中文

'必須將中文轉Byte Array且是big5
Dim big5 = System.Text.Encoding.GetEncoding("big5")
Dim Chtdata As Byte() = big5.GetBytes("統一麵 $90")
SerialPort1.Open()
SerialPort1.Write(Chtdata, 0, Chtdata.Length) '由 0 ~ 總長
SerialPort1.Close()

參考網址

2010年6月9日 星期三

Aqua Data Studio 資料庫管理工具

Aqua Data Studio 8.0
Aqua Data Studio 是供資料庫管理員、軟體開發員和業務分析師使用的一個完整的整合開發環境 (IDE)。它可提供四大功能領域:1) 資料庫查詢與管理工具;2) 一套資料庫、來源控制與檔案系統的比較工具;3) 用於 Subversion (SVN) 和 CVS 的一個完整與整合來源控制用戶端;及 4) 與最好的單機資料庫圖解工具一樣強大的一款資料庫類比軟體。
作業系統相容性: * Windows ADS * Linux ADS * OSX ADS * Solaris ADS * Java 平台 ADS

RDBMS 相容性: (Oracle - 11g, 10g, 9i, 8i) (DB2 iSeries V5R3, V5R4, V6R1) (DB2 LUW - 9.7/9.x/8/7) (DB2 z/OS - V8/V9) (MS SQL Server - 2008/2005/2000/7/MSDE) (Sybase ASE - 15/12.x/11.x) (Sybase Anywhere - 11/10/9/8) (Sybase IQ - 12.x, 15) (Teradata 12) (Aster nCluster 4.0) (Informix IDS - 11.x/10/9.x/7.x) (PostgreSQL - 8.4/8.x/7.x) (MySQL - 5.x/4.x/3.x) (Apache Derby 10.x) (Generic JDBC Platform) (Generic ODBC)
-------以上截取官網訊息-------
稍看簡介圖,真是強;且rdms幾乎全包各式資料庫平台
更利害的是,MS-SQL 匯出 script 可包含 insert ; 光這一點,使用MSSQL開發的;使用這一款管理工具就能省掉很多資料轉移時的困擾問題了,值得推薦!!
不過,這是要註冊付費的;但他有提供開源軟體(OSS)開發員授權有興趣的可以去深入了解!!

2010年6月8日 星期二

稅額計算方式

稅額=應稅金額-(應稅金額/1+營業稅)
例:
營業稅=5%
那就要除 1+0.05=1.05
稅額=應稅金額-(應稅金額/1.05)

應稅金額=總應收-代收-已開發票(其他付款)-明細免稅商品金額

combobox 下拉式輔助選字


由圖示效果,類似 SQL like 'aaa%' 效果;英文字完全沒問題,但是中文字要再多一空隔再倒回(backspace)即可看到下拉輔助選字效果.
底下為source:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim aname As New AutoCompleteStringCollection
aname.Add("w")
aname.Add("wu")
aname.Add("wus")
aname.Add("wush")
aname.Add("wushi")
aname.Add("good")
aname.Add("program")
aname.Add("池")
aname.Add("池龍")
aname.Add("池龍工")
aname.Add("池龍工作")
aname.Add("池龍工作室")

ComboBox1.AutoCompleteMode = AutoCompleteMode.Suggest
ComboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource
ComboBox1.AutoCompleteCustomSource = aname

End Sub
End Class

2010年6月2日 星期三

RDLC 報表(1)

RDLC 是微軟內嵌的報表工具,但是要 View 還是得另外安裝工具和開發元件;這樣才能使建置和設計與瀏覽!!
本篇標示(1),表示將會有(2)(3)(4)(5)(6)..等等
所以第1篇,打算介紹引用相關部署的方式與相關訊息
1.先安裝Microsoft 報表檢視器可轉散發套件 2008

2.先學一下微軟提供的RDLC設計教學Walkthrough:Creating a ReportViewer Report
3.看不懂英文,這兒有一篇中文[ASP.NET] rdlc報表設計(一)
4.當要散發時,要注意會缺一檔;看一下這方法來解決ReportViewer 2008的部署

2010年6月1日 星期二

sql 處理中英文字串長度

原文:SQL處理中英文字串長度的範例
-- 計算中英文字串長度
DECLARE @string varchar(50)
set @string='一二三456七八9十'
select @string '字串', len(@string) '中英字數', datalength(@string) '資料長度', datalength(@string)-len(@string) '中文字數'

--------------------------------------------------------------------------------
-- 截取中英文字串長度
DECLARE @string varchar(50), @l int
set @string='一二三456七八9十'
set @l=8
select substring(@string,1,@l) '取字數', case when datalength(@string)>8 then convert(varchar(8),@string)+'...' else convert(varchar(8),@string) end '取資料數'
select substring(@string,1,@l)

--以上為原文--

個人覺上述寫法,運用在論壇時;當標題過長時,使用此法 "..." 倒是不錯的作法.
個人開發環境均是application環境,此種 "..." 就不大適合;要就截掉!!
倒是值得一提的是:
DATALENGTH = 是取位元組數 ; 當"ABCD甲乙丙"=10 bytes
LEN = 是取非位元組數 ; 當"ABCD甲乙丙"=7 個字元數

sql 字串固定長度

底下為相關做法網址:
1. Will 在網路世界的學習心得與技術分享
2.SQL Server T-SQL LPAD & RPAD Functions (String Padding Equivalent to PadLeft & PadRight)

依第2個網址作法,他是已產生script;底下稍編修原文(因為太亂了,第一眼還真花):
另外,這範例是在國外;所以沒有中文.英文的需求考量,但..用在台灣就不行了;底下已經過調整符合中英文!!
(1)補左邊字串函數 fnPadLeft
ALTER FUNCTION dbo.fnPadLeft
(
@PadChar char(1),
@PadToLen int,
@BaseString varchar(100)
)
RETURNS varchar(1000)
AS
BEGIN

DECLARE @Padded varchar(1000)
DECLARE @BaseLen int
SET @BaseLen = datalength(@BaseString)
IF @BaseLen >= @PadToLen
BEGIN
SET @Padded = @BaseString
END
ELSE
BEGIN
SET @Padded = REPLICATE(@PadChar, @PadToLen - @BaseLen) + @BaseString
END
RETURN @Padded

END

(2)補右邊字串函數 fnPadRight
ALTER FUNCTION dbo.fnPadRight
(
@PadChar char(1),
@PadToLen int,
@BaseString varchar(100)
)
RETURNS varchar(1000)
AS
BEGIN

DECLARE @Padded varchar(1000)
DECLARE @BaseLen int
SET @BaseLen = datalength(@BaseString)
IF @BaseLen >= @PadToLen
BEGIN
SET @Padded = @BaseString
END
ELSE
BEGIN
SET @Padded = @BaseString + REPLICATE(@PadChar, @PadToLen - @BaseLen)
END

RETURN @Padded
END

utf-8 轉 big5

Function encode_utf8big5(ByVal detail)
'utf-8 轉 big5

Dim strUtf8 As Byte() = System.Text.Encoding.Unicode.GetBytes(detail)
Dim strBig5 As Byte() = System.Text.Encoding.Convert(System.Text.Encoding.Unicode, System.Text.Encoding.Default, strUtf8)
encode_utf8big5 = System.Text.Encoding.Default.GetString(strBig5)

End Function