2008年10月5日 星期日

VB.NET - DataGridView

----DataGridView在設計點選內容時,可用DataGridView.CurrentCellAddress.X(或Y)來找到所選中的列或欄


Private Sub DataGridView1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)Handles DataGridView1.MouseClick

  TextBox1.Text = DataGridView1.Item(0, DataGridView1.CurrentCellAddress.Y).Value
  TextBox2.Text = DataGridView1.Item(1, DataGridView1.CurrentCellAddress.Y).Value
  DataGridView1.SendToBack()

End Sub

Read More...

DataSet與DataReader及資料庫連結運用(一)

關於在.NET裡的DataSet經過幾天的使用,稍微有了一些簡單的心得,DataSet裡包含有許多DataTable,這些DataTable彼此還可以透過DataRelation物件來建立表格的關聯性,加上有別於以往的Recordset必須持續連線的狀態,DataSet採用離線運作的模式,不會影響到Database的負擔。

而其中各種不同的元件關係如下圖。

基本上的觀念先釐清就方便了。




'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法一-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private dr As SqlDataReader
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    dr = cmd.ExecuteReader
    while dr.Read()
    txb_test.Text = dr("欄位名稱").ToString
    end while
    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法二-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand

    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    cmd.ExecuteNonQuery()

    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法三-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private dt As New DataTable
  Private dr As SqlDataReader
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    dr = cmd.ExecuteReader
    dt.Load(dr)
    obj_DataGridView.DataSource = dt
    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法四-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private da As New SqlDataAdapter
  Private ds As New DataSet
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    da.SelectCommand = cmd
    ds.Clear()
    da.Fill(ds, "自設表單名")
    dt.Load(dr)
    obj_DataGridView.DataSource = ds
    obj_DataGridView.DataMember = "自設表單名"

    進行各種ds運用    

    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法五-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private da As New SqlDataAdapter
  Private ds As New DataSet
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    da.SelectCommand = cmd
    ds.Clear()
    da.Fill(ds, "自設表單名")
    dt.Load(dr)
    obj_DataGridView.DataSource = ds
    obj_DataGridView.DataMember = "自設表單名"

    進行各種ds運用    

    cmd.Dispose()
    cnn.Close()


連結的方式多種,而取值也各有不同表示法

'-----------------------取值法一-----------------------------------------------------
'------------------------------------------------------------------------------------
  cmd.CommandText = "select top 流水號 count from hn_news order by counter desc"
  obj_txtBox.Text = cmd.ExecuteScalar.ToString

'單獨取得第一資料行的第一列值


'-----------------------取值法二-----------------------------------------------------
'------------------------------------------------------------------------------------
  cmd.CommandText = "select * from hn_news order by counter desc"
  dr = cmd.ExecuteReader
  dr.Read()   '讀一列
  obj_txtBox.Text = dr("欄位名稱").ToString

'單筆資料行的值,再依欄位名去抓取各欄位值


'-----------------------取值法三-----------------------------------------------------
'------------------------------------------------------------------------------------
  cmd.CommandText = "select * from hn_news order by counter desc"
  da.SelectCommand = cmd '使用SqlDataAdapter的SelectCommand
  ds.Clear()
  da.Fill(ds, "tab1") '將SqlDataAdapter
  obj_DataGridView.DataSource = ds
  obj_DataGridView.DataMember = "自設表單名"

  If MyDs.Tables(0).Columns.Count > 0 Then
    obj_txtBox.Text1 = ds.Tables(0).Columns(1).ColumnName
    obj_txtBox.Text2 = ds.Tables(0).Rows(0).Item("有效期限").ToString
    obj_txtBox.Text3 = ds.Tables(0).Rows(0).Item("驗收人代號").ToString
  End If



   關於取值法三中
    ds.Tables(0).Columns(1).ColumnName
 '表示取得table的欄位名稱,上圖中紅框區
    此處中Tables(0)可寫成Tables("表單名"),Columns(1)可寫成Columns("欄位名")

    
ds.Tables(0).Rows(0).Item("有效期限").ToString
    ds.Tables(0).Rows(0).Item("欄位名").ToString
    此處中Item("欄位名")可寫成Item(0) 'index
    如果寫ds.Tables(0).Rows(2).Item(4).ToString,表示是table(0)的第3行資料列 第5欄位的值

    
MyDs.Tables(0).Columns.Count
  '表示傳回的資料列數,用於判斷是否有傳回資料列
    
先暫存於此...

Read More...

VB.NET - 字串相關運用

在vb.net裡用vb的函式


'Microsoft.VisualBasic.函式
'例如:

Microsoft.VisualBasic.Right(s,2)
Microsoft.VisualBasic.Left(s,2)


Mid()
從字串中截取一段字串


s="123456"
s=Mid(s,2,4)  '從s第2個字元起,連續取4個字元成為新字串
結果:s等於"2345"


VB.NET

Trim()
截掉字串的頭尾字元,如果未給值則是去掉頭尾的空白,如果有給值,則去掉頭尾所有符合給定值的字元


Dim S1 as string
S1 ="aab123456789bcaa"
S1=S1.Trim("a", "b")
結果:S1等於"123456789bc"


Compare()

'語法:n=string.Compare(str1,str2)
'功能:str1字串與str2字串作比較,若
' str1 > str2 傳回 1
' str1 = str2 傳回 0
' str1 < str2 傳回 -1

ToUpper / ToLower

'語法:str1.ToUpper / str1.ToLower
'功能:將str1字串中所有字母轉成大寫 / 小寫

CompareTo

'語法:n=str1.CompareTo(str2)
'功能:str1字串與str2字串作比較,若
' str1 > str2 傳回 1
' str1 = str2 傳回 0
' str1 < str2 傳回 -1


Copy

'語法:str1=string.copy(str2)
'功能:將str2字串複製給str1字串
'ex : str1="aaa"
' str2="bbb"
' str1=string.Copy(str2) -> str1="bbb"


CopyTo

'語法:str1.CopyTo(n1,arrayA,,n2,n3)
'功能:將str1字串的第n1個位置開始複製n3個字元放到arrayA字元陣列,由第n2個位置開始放起
'範例:Dim arrayA(8) as char
'    str1="aabbccddeeff"
'    str1.CopyTo(4,arrayA,2,4)
'    arrayA(0)=""
'    arrayA(1)=""
'    arrayA(2)="c"
'    arrayA(3)="c"
'    arrayA(4)="d"
'    arrayA(5)="d"
'    arrayA(6)=""
'    arrayA(7)=""
'    arrayA(8)=""


SubString

'語法:str1.SubString(n1,n2)
'功能:將str1字串第n1個字元開始取n2個字元


Equals

'語法:str1.Equals(str2)
'功能:檢查str1字串是否和str2字串相等


PadLeft / PadRight

'語法:str1.Padright(n,"*")
'功能:以指定的字元補足在字串 左/右方,使其長度為n
'範例:str1="abc"
'   str2=str1.Padright(6,"*") -> str2 = "abc***"


Insert

'語法:str1.Insert(n,str2)
'功能:將str2字串插在str1字串的第n個


Split

'語法:arrayA=str1.Split(分隔字元或符號)
'功能:將字串按照指定的字元作分隔符號,將字串隔開分存置字串陣列中


Join

'語法:str1.Join(分隔字元或符號,陣列)
'功能:將string型別的各陣列字串,透過指定的分隔字元,組合成一個字串
'範例:myArray(0)="aa"
'   myArray(1)="bb"
'   myArray(2)="cc"
'   str1.join("*",myArray) -> str1="aa*bb*cc"



Replace

'語法:str1.Replace(str2,str3)
'功能:將str1字串中的str2字串以str3取代


IndexOf / LastIndexOf

'語法:n=str1.indexOf(str2)
'功能:由str1字串內找出str2第一次出現的位置(由0開始算起),若找不到傳回-1





字元字串的特殊用法

vbNewLine
'新增一行
vbTab
'填入一個間隔字元(tab字元)

Read More...

2008年6月17日 星期二

DataGridView1.CurrentCellAddress紀錄

'----DataGridView在設計點選內容時,可用DataGridView1.CurrentCellAddress.X(或Y)來找到所選中的列或欄


Private Sub DataGridView1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseClick

  TextBox1.Text = DataGridView1.Item(0, DataGridView1.CurrentCellAddress.Y).Value
  TextBox2.Text = DataGridView1.Item(1, DataGridView1.CurrentCellAddress.Y).Value
  DataGridView1.SendToBack()

End Sub

Read More...

2008年5月29日 星期四

VB.net Directory與DirectoryInfo的運用_資料夾管理工具

由於自己有許多的音樂CD以及音樂檔案,透過一個個資料夾去進行整理與分類,為了個人習慣的問題,因此設計一個資料夾工具,主要提供資料夾名稱更改的功能,需求如下:

1.選取資料夾 (開啟A資料夾)
2.匯入選取的資料夾中所含子資料夾 (匯入A中的AA BB CC三個資料夾)
3.更改子資料夾內的所含子資料夾的名稱,使其與子資料夾相同 (將AA中的子資料夾改名為AA,將BB中的子資料夾改名為BB,將CC中的子資料夾改名為CC)

真遶口...算了 直接紀錄吧!!



Imports System.IO
Public Class 資料夾名稱管理
  Dim dir_Directory As DirectoryInfo '將最裡層的選擇資料夾 設為 DirectoryInfo物件 名為dir_Directory
  'd_str_tempFolderPath - 左邊list裡資料夾的路徑
  'd_str_tempFolderName - 左邊list裡選中的資料夾名稱
  Dim d_str_tempFolderPath, d_str_tempFolderName As String
  Private Sub obj_開啟_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles obj_開啟.Click
    obj_folderBD.ShowDialog()
  If obj_folderBD.SelectedPath.Count > 0 Then obj_listbox1.DataSource = Directory.GetDirectories(obj_folderBD.SelectedPath, "*.*")
    sub_歸零()
  End Sub 'obj_bt1_Click

  Private Sub obj_改名_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles obj_改名.Click
    Do While Directory.Exists(d_str_tempFolderPath & "\" & d_str_tempFolderName)
      d_str_tempFolderName &= "I"
    Loop
    dir_Directory.MoveTo(d_str_tempFolderPath & "\" & d_str_tempFolderName)
    obj_文字.Text = "完成"
    sub_歸零()
  End Sub 'obj_改名_Click

  Private Sub obj_listbox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles obj_listbox1.Click, obj_listbox1.SelectedIndexChanged
        sub_歸零()
    If obj_listbox1.Items.Count > 0 Then
      '將listBox2的來源設為 listbox1中選取的資料夾
      obj_ListBox2.DataSource = Directory.GetDirectories(obj_listbox1.Items(obj_listbox1.SelectedIndex.ToString).ToString, "*.*")
      '給定d_str_tempFolderPath與d_str_tempFolderName的值
      d_str_tempFolderPath = obj_listbox1.Items(obj_listbox1.SelectedIndex.ToString).ToString
      Dim dir_temp As New DirectoryInfo(obj_listbox1.Items(obj_listbox1.SelectedIndex.ToString).ToString)
      d_str_tempFolderName = dir_temp.Name
      obj_文字_資料夾.Text = dir_temp.Name
    End If
  End Sub 'obj_listbox1_Click

  Private Sub obj_ListBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles obj_ListBox2.Click, obj_ListBox2.SelectedIndexChanged
    If obj_ListBox2.Items.Count > 0 Then
      obj_改名.Enabled = True
      '將最裡層的選擇資料夾 設為 DirectoryInfo物件 名為dir_Directory
      dir_Directory = New DirectoryInfo(obj_ListBox2.Items(obj_ListBox2.SelectedIndex.ToString).ToString)
      obj_文字_子資料夾.Text = dir_Directory.Name
    End If
  End Sub 'obj_ListBox2_Click

  Private Sub sub_歸零()
    d_str_tempFolderPath = Nothing
    d_str_tempFolderName = Nothing
    If d_str_tempFolderPath = Nothing Or d_str_tempFolderName = Nothing Then
      obj_改名.Enabled = False
    End If
  End Sub 'sub_歸零()


  Private Sub obj_批次改名_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles obj_批次改名.Click
    'dir_tempDir_1 表開啟之資料夾的類別
    'dir_tempDir_2 表開啟之資料夾中子資料夾的類別
    Dim dir_tempDir_1 As New DirectoryInfo(obj_folderBD.SelectedPath)
    Dim Ary_dir_1 As DirectoryInfo() = dir_tempDir_1.GetDirectories
    For i As Integer = 0 To Ary_dir_1.Length - 1
      Dim dir_tempDir_2 As New DirectoryInfo(Ary_dir_1(i).FullName)
      Dim Ary_dir_2 As DirectoryInfo() = dir_tempDir_2.GetDirectories
      '至此    Ary_dir_1 表左邊list的資料夾完整路徑 array
      '        Ary_dir_2 表右邊list的資料夾完整路徑 array
      d_str_tempFolderPath = dir_tempDir_2.FullName
      d_str_tempFolderName = dir_tempDir_2.Name
      If Ary_dir_2.Length > 0 Then
        For Each tmp In Ary_dir_2
          Do While Directory.Exists(d_str_tempFolderPath & "\" & d_str_tempFolderName)
            d_str_tempFolderName &= "I"
          Loop
        tmp.MoveTo(d_str_tempFolderPath & "\" & d_str_tempFolderName)
        Next
      End If
    Next
    obj_文字.Text = "完成批次更名"
  End Sub
End Class


'obj_listbox1.Items(0).ToString 得到listbox中第一個選項目
'obj_listbox1.SelectedIndex.ToString 得到listbox被選取的項目的index


'--------宣告法一
'    Dim dir_temp As DirectoryInfo
'    dir_temp = New DirectoryInfo("C:\Documents and Settings\g_user\桌面\誠工具")
'--------宣告法二
'    Dim dir_temp2 As New DirectoryInfo("C:\Documents and Settings\g_user\桌面\測試dir")
'
'--------宣告並同時建立子資料夾
'    Dim dir_temp2 As New DirectoryInfo("C:\Documents and Settings\g_user\桌面\測試dir")
'    Dim dir_sub1 As DirectoryInfo = dir_temp2.CreateSubdirectory("subDir1")
'    Dim dir_sub2 As DirectoryInfo = dir_temp2.CreateSubdirectory("subDir2")
'    Dim dir_sub3 As DirectoryInfo = dir_temp2.CreateSubdirectory("subDir3")

Read More...

SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲

SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(一)

SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(二)

非常不錯的文章
留做紀錄

Read More...

2008年5月26日 星期一

VB.net_將資料填進EXCEl與WORD中

整理一下最近對於如何將資料填進已經設好檔案的word與excel中的紀錄。

關於使用VB.NET將資料匯進WORD與EXCEL,主要都是透過OFFICE的參考,運用各自的類別,一層一層建立它們的各自的屬性,像是WORD從外到內的Application、Document、Table以及EXCEL從外到內的Application、Workbook、Worksheet,在連接上彼此並運用各自的Method來進行工作。首先先來看word的程式碼


Imports Microsoft.Office.Interop

Dim wod_app As New Word.Application    '這邊要注意建立app時要用new
Dim wod_doc As Word.Document
Dim wod_tab As Word.Table

  wod_doc = wod_app.Documents.Open("C:\NEWS管理.doc", , True)
  wod_tab = wod_doc.Tables.Item(1)

  contSqlconn(1)    '個人的連接資料庫函式
  cmd.CommandText = "select * from hn_news where (流水號='" + 流水號.Text + "')"
  dr = cmd.ExecuteReader
  dr.Read()

    wod_tab.Cell(1, 1).Range.Text = dr("狀態旗標").ToString
    wod_tab.Cell(1, 2).Range.Text = dr("流水號").ToString
    wod_tab.Cell(1, 4).Range.Text = dr("標題").ToString
    wod_tab.Cell(2, 2).Range.Text = dr("內容").ToString
    wod_tab.Cell(4, 2).Range.Text = dr("回覆").ToString

  dr.Close()
  contSqlconn(-1)

  wod_app.Visible = True '預覽列印
  'wod_app.PrintOut(Copies:=1) '直接列印
  'wod_app.Quit(SaveChanges:=False) '關閉開啟的WORD

  wod_tab = Nothing

  wod_doc.Close()
  wod_doc = Nothing

  wod_app.Quit()
  wod_app = Nothing
  
  GC.Collect()


EXCEL:

Imports Microsoft.Office.Interop

  Dim exl_ap As New Excel.Application
  Dim exl_wkb As Excel.Workbook
  Dim exl_wks As Excel.Worksheet
  Dim i As Integer = 1

  exl_wkb = exl_app.Workbooks.Open("C:\驗購表.xls", , True) '這個TRUE是Readonly
  exl_wks = exl_wkb.Worksheets("sheet1") '或者 exl_wks = exl_wkb.Worksheets(1)

  contSqlconn(1)
  cmd.CommandText = "sql語法省略" + _
  dr = cmd.ExecuteReader
    With exl_wks
      .Name = "藥品驗購表"
      .Range("A" & i).Value = "藥品中文名"
      .Range("B" & i).Value = "藥品索引"
      .Range("C" & i).Value = "藥品簡稱"
      .Range("D" & i).Value = "驗收日期"
      .Range("E" & i).Value = "藥廠名稱"
      .Range("F" & i).Value = "藥廠代號"
      .Range("A1:F1").Interior.ColorIndex = 6
      .Cells().ColumnWidth = 7

    End With
  While dr.Read
    i += 1
    With exl_wks
      .Range("A" & i).Value = dr(0).ToString
      .Range("B" & i).Value = dr(1).ToString
      .Range("C" & i).Value = dr(2).ToString
      .Range("D" & i).Value = dr(3).ToString
      .Range("E" & i).Value = dr(4).ToString
      .Range("F" & i).Value = dr(5).ToString
    End With
  End While

  exl_app.SaveWorkspace()
  exl_app.Visible = True

  exl_wks = Nothing

  exl_wkb.Close()
  exl_wkb = Nothing

  exl_app.Quit()
  exl_app = Nothing

  contSqlconn(-1)
  GC.Collect()


大至上就是如此,特別的地方再說一下。

這個word是用填表的方式所以才會有table,也就是先在預設好的word裡畫好table表格,然後算他的欄位去填入資料,但也有另一種方式不用畫表格的,就是運用word裡的書籤功能,至於這個等我有例子在作紀錄。

不管是word還是excel,都必須要在使用前先加入各自的參考(dll),這點可是不能忘的。

Read More...

2008年5月18日 星期日

VB.net 流程控制函式

'IF...ELSE....THEN....
'-------------------------------------
If (condition) Then
  [Then 敘述區段]
Else
  [Then 敘述區段]
End If

'condition 表滿足條件,True執行 False跳過


'IF...ELSEIF...ELSE....THEN....
'-------------------------------------
If (condition) Then
  [Then 敘述區段]
ElseIf (condition) Then
  [Then 敘述區段]
ElseIf (condition) Then
  [Then 敘述區段]
End If



'SELECT CASE
'-------------------------------------
Select Case (expression)
  Case value1
    [Statements for value1]
  Case value2
    [Statements for value2]
  Case value3
    [Statements for value3]
  Case Else
    [Statements for Else]
End Select

expression可為變數、數值、字串運算式。
value必須跟expression資料型別一致
value可如下:
      Case 1,2,6,to 8
      Case is <= 20
      Case "a" to "z"
      Case "a","b","K"


IIF...
'-------------------------------------
IIf(expression ,V1,V2)
滿足expression即expression為true,則傳回V1,不然則傳回V2。
V1 可為數值、字串、運算式。


Switch
'-------------------------------------
Switch (Expression1 , V1, Expression2 , V2, Expression3 , V3, Expression4 , V4)
Expression1 為True時  傳回V1
Expression2 為True時  傳回V2
...
...



'Choose

'-------------------------------------
Choose (Expression , V1 , V2, V3, V4)
Expression 值 為1時傳回V1
       為2時傳回V2
       為3時傳回V3
       為4時傳回V4



重覆結構:VB中最主要的迴圈函式分別為For...Next,Do...Loop,While...End While

'For...Next...
'-------------------------------------
For counter=start to end [step value]
  敘述式
Next

Do...Loop有四種型態
分別為:
--------------------------------------
    Do while (條件判斷式)
      敘述式
    Loop
--------------------------------------
    Do
      敘述式
    Loop while (條件判斷式)
--------------------------------------
    Do Until (條件判斷式)
      敘述式
    Loop
--------------------------------------
    Do
      敘述式
    Loop Until (條件判斷式)
--------------------------------------

while是指:當判斷式滿足,也就是成立(true)時,則進入迴圈
Until是指:當判斷式不滿足,也就是不成立(false)時,則進入迴圈


Continue
'-------------------------------------------------
寫於迴圈之內,當執行到此處時,直接跳至判斷迴圈處,並作一次判斷是否繼續迴圈的動作
其中又分為Continue For,Continue Do,Continue While

Read More...

2008年5月15日 星期四

運用VBA抓取SQL的資料到EXCEL裡(一)

最近在學習用.NET從SQL抓資料丟進EXCEL或WORD裡進行另存新檔和列印的技巧,稍微有些心得,不過尚未整理完畢,不過從.NET去撈SQL的資料再丟進EXCEL裡的動作,對於單純用在SELECT資料並且只是運用在簡單的處理上,效能與速度反而不如直接從EXCEL裡運用VBA去作同樣的動作,雖然感覺起來都是同樣的動作,但是實際上,我在實例經驗裡直接用EXCEL處理量大的資料,速度快上很多,在這邊對於這個技巧稍作點紀錄。以下是最近實作的例子。

實例一(住診會診):統計些住診會診的資料
打開EXCEL檔後,會看到如下圖的介面,其中部份欄位為保密資料已清除資料,剩下的部份可見到一個Button鈕,由於這個例子是在辦公室完成,然而這次紀錄是在家裡作的,前者是使用office2003以前的版本,家裡則是使用office2007的版本,有些功能在2007裡我也不太知道被放到那邊去了,大至上紀錄些關鍵步驟與最重要的VBA「程式碼」。

1.要從SQL撈出如下的資料,先點選巨集,放置一個Button於sheet3上,並且開啟設計模式,雙擊button進入vba編輯區,sheet3是上圖,也是我們主要的控制頁面,而sheet1與sheet2則是拿來放兩份從SQL撈出來的資料table,等等再在前面的excel作運算匯整成sheet3。

2.以這個例子看,主要有程式的地方有兩處,分別為主要頁面的sheet3與一個自己加的Module1(模組)。

先看sheet3的程式碼

  '---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim strDate As String, endDate As String, strCell As String
Dim iDolrPos As Integer, lDataRows As Long
  Sheets("Sheet3").Select
  strDate = Right("00000" & Trim(Range("C3").Value), 7)
  endDate = Right("00000" & Trim(Range("C4").Value), 7)

  Range("E5").Font.Color = vbRed
  Range("E5").Font.Bold = True
  Range("E5").Value = "讀取高壓氧收入資料,請稍候!!"
  lDataRows = querydata(strDate, endDate)


  Worksheets("Sheet3").Select
  Range("A7").Select

  If lDataRows > 0 Then
    Range("A8:M30000").Clear

    Range("A8").Formula = "=Sheet1!A8"
    Range("B8").Formula = "=Sheet1!B8"
    Range("C8").Formula = "=Sheet1!C8"
    Range("D8").Formula = "=VLOOKUP(Sheet1!D8,Sheet2!醫師查詢,2,FALSE)"
    Range("E8").Formula = "=VLOOKUP(Sheet1!E8,Sheet2!科別查詢,2,FALSE)"
    Range("F8").Formula = "=Sheet1!F8"
    Range("G8").Formula = "=VLOOKUP(Sheet1!G8,Sheet2!醫師查詢,2,FALSE)"
    Range("H8").Formula = "=VLOOKUP(Sheet1!H8,Sheet2!科別查詢,2,FALSE)"
    Range("I8").Formula = "=Sheet1!I8"
    Range("J8").Formula = "=IF(Sheet1!J8=""會"",Sheet1!J8,""尚未會診"")"
    Range("A8:J8").Copy Destination:=Range("A9:A" + CStr(lDataRows + 6))

  Else
    MsgBox ("資料查詢結果有誤,請洽資訊室!")
  End If
  Range("E5").Value = "資訊查查詢完畢!!!!! "

End Sub
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------



再看Module1的程式碼

'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Function querydata(strDate, endDate) As Long
  Dim lDataRows As Long
  Sheets("Sheet1").Select
  Range("A7").Select
  Selection.QueryTable.Connection = "ODBC;DRIVER=SQL Server;SERVER=\\test\testsql;UID=userid;PWD=password;APP=Microsoft Office 2003"
  Selection.QueryTable.CommandType = xlCmdSql
  
Selection.QueryTable.CommandText = _
  Array("SELECT 語法"
& Chr(10) & Chr(13) _)

    Selection.QueryTable.Refresh BackgroundQuery:=False

    lDataRows = Range("住院查詢").Rows.Count

  Sheets("Sheet2").Select
  Range("B1").Value = Format(Now, "YYYY/MM/DD")
  If Range("A1").Value <> Range("B1").Value Then
    Range("Sheet2!A7").Select
    Selection.QueryTable.Connection = "ODBC;DRIVER=SQL Server;SERVER=\\test\testsql;UID=userid;PWD=password;APP=Microsoft Office 2003"
    Selection.QueryTable.CommandType = xlCmdSql
    Selection.QueryTable.CommandText = _
    Array("SELECT 語法" & Chr(10) & Chr(13) _)

    Selection.QueryTable.Refresh BackgroundQuery:=False

        Range("Sheet2!H7").Select
    Selection.QueryTable.Connection = "ODBC;DRIVER=SQL Server;SERVER=\\11.11.11.11;UID=1111;PWD=11111;APP=Microsoft Office 2003"
    Selection.QueryTable.CommandType = xlCmdSql
    Selection.QueryTable.CommandText = _
    Array("SELECT 語法" & Chr(10) & Chr(13) _)

    Selection.QueryTable.Refresh BackgroundQuery:=False


    Range("A1").Value = Format(Now, "YYYY/MM/DD")
  End If
  querydata = lDataRows
End Function
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

淡紅色:連接SQL用,相關SQL訊息
紅色:運用SQL的SELECT語法,並將結果放在一個暫存TABLE裡

暫存於此...



程式碼欄位

Read More...

VB.NET_DataSet與DataReader及其相關資料庫連結運用(一)

關於在.NET裡的DataSet經過幾天的使用,稍微有了一些簡單的心得,DataSet裡包含有許多DataTable,這些DataTable彼此還可以透過DataRelation物件來建立表格的關聯性,加上有別於以往的Recordset必須持續連線的狀態,DataSet採用離線運作的模式,不會影響到Database的負擔。


而其中各種不同的元件關係如下圖。



基本上的觀念先釐清就方便了。


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法一-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private dr As SqlDataReader
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    dr = cmd.ExecuteReader
    while dr.Read()
    txb_test.Text = dr("欄位名稱").ToString
    end while
    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法二-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand

    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    cmd.ExecuteNonQuery()

    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法三-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private dt As New DataTable
  Private dr As SqlDataReader
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    dr = cmd.ExecuteReader
    dt.Load(dr)
    obj_DataGridView.DataSource = dt
    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法四-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private da As New SqlDataAdapter
  Private ds As New DataSet
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    da.SelectCommand = cmd
    ds.Clear()
    da.Fill(ds, "自設表單名")
    dt.Load(dr)
    obj_DataGridView.DataSource = ds
    obj_DataGridView.DataMember = "自設表單名"

    進行各種ds運用    

    cmd.Dispose()
    cnn.Close()


'--------------------------------------分格線---------------------------------------'
'--------------------------------------連結法五-------------------------------------'
Imports System.Data.SqlClient
  Private cnn As New SqlConnection
  Private cmd As New SqlCommand
  Private da As New SqlDataAdapter
  Private ds As New DataSet
    cnn.ConnectionString = "Data Source=G_HISBKS;Initial Catalog=XXX;User ID=XXX"
    cnn.Open()

    cmd.Connection = cnn
    cmd.CommandText = "下SQL語法"
    da.SelectCommand = cmd
    ds.Clear()
    da.Fill(ds, "自設表單名")
    dt.Load(dr)
    obj_DataGridView.DataSource = ds
    obj_DataGridView.DataMember = "自設表單名"

    進行各種ds運用    

    cmd.Dispose()
    cnn.Close()


連結的方式多種,而取值也各有不同表示法

'-----------------------取值法一-----------------------------------------------------
'------------------------------------------------------------------------------------
  cmd.CommandText = "select top 流水號 count from hn_news order by counter desc"
  obj_txtBox.Text = cmd.ExecuteScalar.ToString

'單獨取得第一資料行的第一列值


'-----------------------取值法二-----------------------------------------------------
'------------------------------------------------------------------------------------
  cmd.CommandText = "select * from hn_news order by counter desc"
  dr = cmd.ExecuteReader
  dr.Read()   '讀一列
  obj_txtBox.Text = dr("欄位名稱").ToString

'單筆資料行的值,再依欄位名去抓取各欄位值


'-----------------------取值法三-----------------------------------------------------
'------------------------------------------------------------------------------------
  cmd.CommandText = "select * from hn_news order by counter desc"
  da.SelectCommand = cmd '使用SqlDataAdapter的SelectCommand
  ds.Clear()
  da.Fill(ds, "tab1") '將SqlDataAdapter
  obj_DataGridView.DataSource = ds
  obj_DataGridView.DataMember = "自設表單名"

  If MyDs.Tables(0).Columns.Count > 0 Then
    obj_txtBox.Text1 = ds.Tables(0).Columns(1).ColumnName
    obj_txtBox.Text2 = ds.Tables(0).Rows(0).Item("有效期限").ToString
    obj_txtBox.Text3 = ds.Tables(0).Rows(0).Item("驗收人代號").ToString
  End If


    關於取值法三中
    ds.Tables(0).Columns(1).ColumnName '表示取得table的欄位名稱,上圖中紅框區
    此處中Tables(0)可寫成Tables("表單名"),Columns(1)可寫成Columns("欄位名")

    ds.Tables(0).Rows(0).Item("有效期限").ToString
    ds.Tables(0).Rows(0).Item("欄位名").ToString
    此處中Item("欄位名")可寫成Item(0) 'index
    如果寫ds.Tables(0).Rows(2).Item(4).ToString,表示是table(0)的第3行資料列 第5欄位的值

    MyDs.Tables(0).Columns.Count  '表示傳回的資料列數,用於判斷是否有傳回資料列
    
先暫存於此...

程式碼欄位

Read More...

2008年5月11日 星期日

字串相關函式

Trim()
截掉字串的頭尾字元,如果未給值則是去掉頭尾的空白,如果有給值,則去掉頭尾所有符合給定值的字元!


dim s1 as string
S1 ="aab123456789bcaa"
S1=S1.Trim("a", "b")
結果:S1等於"123456789bc"


Mid()
從字串中截取一段字串

s="123456"
s=Mid(s,2,4)  '從s第2個字元起,連續取4個字元成為新字串
結果:s等於"2345"




程式碼欄位

Read More...

在vb.net裡用vb的函式

這應該是屬於我的愚蠢,不過還是紀錄一下,像是.net裡已經沒有原本的right()或left(),但是如果依然想使用的話,可以這樣寫


Microsoft.VisualBasic.函式
例如:

Microsoft.VisualBasic.Right(s,2)
Microsoft.VisualBasic.Left(s,2)

Read More...

工作管理系統(一)

最近將之前的news管理系統與其它幾個上班時會用到的小程式整合起來,統稱為<工作管理系統>,打算再多想幾個可能會有幫助的東西,順便多熟悉一下.NET。

目前的工作管理系統裡面有幾個功能部份:
1.打卡系統
2.news管理系統
3.成員設定
4.列印出勤月報表

一、打卡系統
打卡系統比較多是在於判斷不同工作階段時的邏輯分析,將上班前、上班中、下班後,與不同成員、不同日期,是否當日已打過卡等情況作各種判斷,同時會記錄一些打卡時的資訊與判斷,不過目前這版還不適用於三班制的工作,而只限於一般朝九晚五用,接下來打算改良成三班制適用的,一些紀錄如下。

在打卡介面上顯示一個跑馬時間,讓使用者可見到當下的最新時間


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles obj_time.Tick
  obj_時間.Text = Date.Now.ToString
End Sub '時間跑馬燈


幾個時間取得與轉換,像是"0970505"與"12:13:57",另外日期的yyy應該取一個right(3),只是.net的right與left不存在了,以至於用Substring來截取,所以yyy就懶得用了。

d_str_datetoday = "0" + CStr(Date.Today.Year - 1911) + ("0" + Date.Today.Month.ToString).Substring(("0" + Date.Today.Month.ToString).Length - 2, 2) + ("0" + Date.Today.Day.ToString).Substring(("0" + Date.Today.Day.ToString).Length - 2, 2)
d_str_hhmmss = Date.Now.ToString.Substring(12, 8)

另外剛才又想到一種截取方試
特地來補充一下主要是運用string.remove(0,Length-),程式會短一點,就順便把yyy也作

("0" + CStr(Date.Today.Year - 1911)).Remove(0, CStr(Date.Today.Year - 1911).Length - 2) + ("0" + Date.Today.Month.ToString).Remove(0, Date.Today.Month.ToString.Length - 1) + ("0" + Date.Today.Day.ToString).Remove(0, Date.Today.Day.ToString.Length - 1)




取得本機的IP,不過只限於區網的IP,連外IP還沒研究

Dim ip As System.Net.IPHostEntry = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName)
Dim i() As System.Net.IPAddress

  i = ip.AddressList
  obj_textbox.text= i(0).ToString   '這才是ip



二、管理系統
除了原本的新增、開啟、刪除外,新加了列印出來的功能,整段主要是先設計好WORD的表格,然後將搜尋出來的資料自動填入WORD裡,並作開啟WORD與列印的動作,目前在填表格上是用欄與列去填值,有另一種方式是不用表格與欄列去填,而是使用WORD的書籤功能,在WORD裡先設好書籤的位置,然後將值填入該位置處,目前還沒試過,以下為處理該段的主要程式碼:

  Private Sub sub_printOut(ByVal a As Integer)

    Dim wod_myword As New Microsoft.Office.Interop.Word.Application
    Dim wod_wdoc As Microsoft.Office.Interop.Word.Document
    Dim tab_t1 As Microsoft.Office.Interop.Word.Table

    wod_wdoc = wod_myword.Documents.Open("C:\NEWS管理.doc", , True)

    contSqlconn(1)
    cmd.CommandText = "select * from hn_news where (流水號='" + 流水號.Text + "')"
    dr = cmd.ExecuteReader
    dr.Read()
    If p_intControl = 1 And dr("回覆").ToString.Length = 0 Then

      tab_t1 = wod_wdoc.Tables.Item(1)
      tab_t1.Cell(1, 1).Range.Text = dr("狀態旗標").ToString
      tab_t1.Cell(1, 2).Range.Text = dr("流水號").ToString
      tab_t1.Cell(1, 4).Range.Text = dr("標題").ToString
      tab_t1.Cell(2, 2).Range.Text = dr("內容").ToString
      'tab_t1.Cell(4, 2).Range.Text = dr("回覆").ToString
      tab_t1.Cell(1, 5).Range.Text = dr("初始日期").ToString.Substring(1, 2) + "年" + dr("初始日期").ToString.Substring(3, 2) + "月" + dr("初始日期").ToString.Substring(5, 2) + "日"

    ElseIf p_intControl = 1 Then
      tab_t1 = wod_wdoc.Tables.Item(1)
      tab_t1.Cell(1, 1).Range.Text = dr("狀態旗標").ToString
      tab_t1.Cell(1, 2).Range.Text = dr("流水號").ToString
      tab_t1.Cell(1, 4).Range.Text = dr("標題").ToString
      tab_t1.Cell(2, 2).Range.Text = dr("內容").ToString
      tab_t1.Cell(4, 2).Range.Text = dr("回覆").ToString
      tab_t1.Cell(1, 5).Range.Text = dr("初始日期").ToString.Substring(1, 2) + "年" + dr("初始日期").ToString.Substring(3, 2) + "月" + dr("初始日期").ToString.Substring(5, 2) + "日"

    End If
    dr.Close()
    contSqlconn(-1)

    If a = 0 Then
      wod_myword.Visible = True '預覽列印
    ElseIf a = 1 Then
      wod_myword.PrintOut(Copies:=1) '直接列印
    End If
    
wod_wdoc=Nothing
    wod_myword=Nothing

    'wod_myword.Quit(SaveChanges:=False) '關閉開啟的WORD

  End Sub '列印sub


以下的NEWS管理的查詢與開啟,沒什麼可看的,純粹個人作個紀錄!!

  Private Sub 查詢_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 查詢.Click
    p_intControl = 0
    Call contSqlconn(1)
    Try
      cmd.CommandText = "select 流水號,標題,初始日期,狀態旗標 from hn_news where 初始日期 between '" + sdt + "' and '" + edt + "'"
      ds.Clear()
      da.SelectCommand = cmd
      da.Fill(ds, "tabl1")
      dgview_1.DataSource = ds
      dgview_1.DataMember = "tabl1"
      dgview_1.Columns("標題").Width = 350


    Catch ex As Exception
      MessageBox.Show(ex.ToString)
    Finally
      contSqlconn(-1)
    End Try

  End Sub '查詢_Click

  Private Sub 開啟_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開啟.Click

    p_intControl = 1
    Try
      Call contSqlconn(1)
      cmd.CommandText = "select 初始日期,標題,內容,回覆,狀態旗標 from hn_news where 流水號='" + dgview_cont + "'"
      dr = cmd.ExecuteReader
      dr.Read()
      p_strDtime = dr("初始日期").ToString
      tital = dr("標題").ToString
      main = dr("內容").ToString
      stat = dr("狀態旗標").ToString()
      resp = dr("回覆").ToString

    Catch ex As Exception
      MessageBox.Show(ex.ToString)
    Finally
      Call contSqlconn(-1)
      ' News內容.Tag() = Me
      News內容.Show()
      Me.Hide()
    End Try
  End Sub '開啟_Click


另外Select資料庫後得到的值比較特別有null與根本沒有值,兩者乍聽之下以為相同,其實判斷上是不同
null值判斷
a Is DBNull.Value

沒有select到值的判斷
a Is Nothing



三、成員設定的地方,也是多在判斷各種情況,像是使用者目前是要新增成員、修改成員資料、還是刪除成員,而同時要判定成員是否已經存在,以及一些介面上的防呆設計,程式上沒什麼要紀錄的!


四、列印出勤月表未完成

以上為最近的新紀錄,正在新增excel的列印與讀取外部ini檔的資料練習,同時,在news管理裡的查詢增加條件設定,最後紀錄一下連接資料庫的public Module

Module sqlContral
  Public cnn As New System.Data.SqlClient.SqlConnection
  Public cmd As New System.Data.SqlClient.SqlCommand
  Public da As New System.Data.SqlClient.SqlDataAdapter
  Public dt As New DataTable
  Public ds As New DataSet
  Public dr As System.Data.SqlClient.SqlDataReader


  Public Sub contSqlconn(ByVal i As Integer)
    If i = 1 Then      
      cnn.ConnectionString = "Data Source=\\5.10.20.133;Initial Catalog=hnsql;User Id=xxxxxx;Password=xxxxx"
      cnn.Open()
      cmd.Connection = cnn
    ElseIf i = -1 Then
      cmd.Dispose()
      cnn.Close()
    Else
      cmd.Dispose()
      cnn.Close()
    End If
  End Sub
End Module


程式碼欄位


Read More...

2008年5月8日 星期四

.NET中 tag的一個小應用

tag的一個小應用



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As Control

  For Each con In Me.Controls
    If TypeOf (con) Is TextBox Then
      Dim txt As TextBox = con
      If txt.Tag = "a" Then
        txt.Text = ""
      End If
    End If
  Next

End Sub

Read More...

2008年5月6日 星期二

NEWS管理(續)-讀取sql資料為null值或select不到值時

從news中讀取資料時,如果SQL的select結果為null時,在.net裡使用Is DBNull.Value來作判定值,程式語法的判別如下:

如果SQL的select結果為null時,在.net裡使用Is DBNull.Value來作判定值,程式語法的判別如下:

If cmd.ExecuteScalar Is DBNull.Value Then
  MsgBox("使用者帳號未定義!")
Else

另外,select到null的值跟select不到值是不同的,如果是要判定select不到值的話
使用

If cmd.ExecuteScalar Is Nothing Then
  MsgBox("使用者帳號未定義!")
Else

Read More...

NEWS管理(續)-SQL字串存入時處理

在NEWS系統中碰到存字串「 select * from table where (條件 like '%xx')」時,發生了錯誤,細究後發現SQL語法在insert時,如果要存「'」這個字元時,要重覆該字元一次,也就是如下sql語法

insert into table values('''') <-中間兩個「'」才是新增一個「'」的正確加法


因此,在程式裡要將幾個抓字串的text稍作處理後才能丟進sql裡,修正語法如下
tital = 標題.Text.Replace("'", "''") 'Replace(預取代之字串,取代字串)

Read More...

2008年4月30日 星期三

動態增加控制元件


Dim mylb As TextBox = New TextBox
Me.Controls.Add(mylb)
mylb.Text = "Hello,VB.NET"

Read More...

VB.NET中寫入文件的同時,並覆蓋原文件內容


Dim strFilePath As String = "F:\\1.txt"
Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(strFilePath, False)
Dim temp As String = "1111111111111111111111111"
sw.WriteLine(temp)
sw.Flush()
sw.Close()
sw = Nothing


如果 Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(strFilePath, False)
改成 Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(strFilePath, true)
就是往後追加的

Read More...

2008年4月29日 星期二

Virustotal線上掃毒大作戰

VirusTotal

關於 VirusTotal
VirusTotal 是一款可疑檔案分析服務, 通過各種知名反病毒引擎, 對您所上傳的檔案進行偵測, 以判斷檔案是否被病毒, 蠕蟲, 木馬, 以及各類惡意軟體感染.
特點:
免費, 獨立的服務
使用多種反病毒引擎
實時自動更新病毒特徵庫
每款反病毒引擎都將顯示詳細的結果
實時全球統計資料

Read More...

EFix_高手所寫的防毒小工具

EFix下載點
以下是轉載網頁上此程式的相關功能簡介

版本:Ver 4.59
下載位置:
微軟SkyDrive
因有人反應有公司會檔EXE檔下載,所以這裡放一個zip壓縮檔,如果沒辦法下載exe檔的人請下載這個微軟SkyDrive但建議如果是公司使用請資訊人員協助處理會比較好,畢竟有些系統是不能隨便關閉的。
如不能下載請晚點在下,上面三個分流常常爆......
從4.53開始因避免直接連結,這邊每更新一次版本檔案名稱就會更改,請勿直接做檔案連結。
功能:
修復因病毒造成隱藏檔選項無法開啟和磁碟雙擊顯示找不到程式的錯誤
修正工作管理員無法開啟的問題 (因登錄檔關閉造成的話)
關閉自動撥放功能 (此功能在Ver4.56後取消)
簡易的病毒檔案刪除
會產生掃描報告供解毒人員分析
執行方式:
依照指示作就好了跑完會自動跳出文字檔提供分析用

另外如果你確定系統無中毒只是因為隨身碟內有autorun.inf檔案造成沒辦法開啟磁碟的話可使用EFix Lite,此程式只會將各磁碟內的autorun.inf和記載在autorun.inf open項的檔案刪除而已。本身不具解毒功能
EFix Lite下載位置:
EFix Lite下載 (Hinet空間)

Read More...

2008年4月28日 星期一

更改msn的密碼

msn live主頁
帳戶管理主頁

實在不懂為何要把這麼重要的頁面藏得這麼好
害我花了十來分鐘在msn首頁上找

Read More...

修改微軟的登錄機碼

HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
"NoDriveTypeAutoRun"=hex:b5" 取消自動播放資料光碟為"b5", 自動播放為"95"
"NoRecentDocsMenu"=hex:1" 隱藏文件選單"
"NoLogoff"=hex:0" 隱藏開始選單的登出"
"NoFavoritesMenu"=hex:1" 隱藏我的最愛選單"
"NoRecentDocsHistory"=hex:1" 隱藏文件歷史記錄"
"NoPrinterTabs"=dword:1" 隱藏一般及詳細資料畫面"
"NoDeletePrinter"=dword:1" 關閉刪除印表機"
"NoAddPrinter"=dword:1" 關閉其它印表機"
"NoStartMenuSubFolders"=dword:1" 隱藏開始功能表子資料夾"
"NoRun"=dword:1" 移除 '執行' 指令"
"NoSetFolders"=dword:1" 從開始功能表的 '設定' 移除資料夾"
"NoSetTaskbar"=dword:1" 從開始功能表的 '設定' 移除工作列"
"NoFind"=dword:1" 移除 '尋找' 指令"
"NoDrives"=hex: 取消的磁碟機代號
"NoDrives"=dword:03ffffff" 隱藏 '我的電腦' 的磁碟機"
"NoNetHood"=dword:1" 隱藏網路上的芳鄰"
"NoDesktop"=dword:1" 隱藏桌面上所有的項目"
"NoClose"=dword:1" 關閉「關機」指令"
"NoSaveSettings"=dword:1" 結束不要儲存設定值"
"RestrictRun"=dword:00000001 "只執行容許的應用程式檔名,需配合另一個機碼RestrictRun
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun
"1"="regedit.exe"
"2"="command.com"
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\System
顯示器
"NoDispCPL"=dword:1" 關閉顯示器控制台"
"NoDispBackgroundPage"=dword:1" 隱藏背景畫面"
"NoDispScrSavPage"=dword:1" 隱藏螢幕保護裝置畫面"
"NoDispAppearancePage"=dword:1" 隱藏外觀畫面"
"NoDispSettingsPage"=dword:1" 隱藏設定值畫面"
"NoSecCPL"=dword:1" 關閉密碼控制台"
"NoPwdPage"=dword:1" 隱藏變更密碼畫面"
"NoAdminPage"=dword:1" 隱藏遠端管理畫面"
"NoProfilePage"=dword:1" 隱藏使用者設定檔畫面"
"NoDevMgrPage"=dword:1" 隱藏裝置管理員畫面"
"NoConfigPage"=dword:1" 隱藏硬碟設定檔畫面"
"NoFileSysPage"=dword:1" 隱藏檔案系統按鈕"
"NoVirtMemPage"=dword:1" 隱藏虛擬記憶體按鈕"
"DisableRegistryTools"=dword:1" 關閉登錄編輯工具"
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\WinOldApp
"Disabled"=dword:1" 關閉 MS-DOS 模式"
"NoRealMode"=dword:1" 關閉單一模式 MS-DOS 應用程式"
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Network
"NoNetSetup"=dword:1" 關閉網路控制台"
"NoNetSetupIDPage"=dword:1" 隱藏識別資料畫面"
"NoNetSetupSecurityPage"=dword:1" 隱藏存取控制畫面"
"NoFileSharingControl"=dword:1" 關閉檔案分享控制"
"NoPrintSharingControl"=dword:1" 關閉列印分享控制"
"NoEntireNetwork"=dword:1" 網路上的芳鄰沒有 '整個網路'"
"NoWorkgroupContents"=dword:1" 網路上的芳鄰沒有工作群組內容"
HKEY_CLASSES_ROOT\*\shell\以記事本開啟\command]
預設="Notepad.exe %1" 不明的檔案以記事本開啟
任何檔案的動作,都幫它配上聲音
例如當WinAmp開啟和關閉時 都有自己的聲音
先增加機碼winamp
[HKEY_CURRENT_USER\AppEvents\Schemes\Apps\winamp]
再增加機碼open 開啟程式
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\winamp\open]
再增加機碼close 關閉程式
[HKEY_CURRENT_USER\AppEvents\Schemes\Apps\winamp\close]
最後到控制台->聲音->winamp->開啟程式 選取所要的聲音
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup]
"SourcePath"="e:\\WIN98\\" 更改win98原始程式的路徑
自動登錄
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"AutoAdminLogon"="1"
"DefaultUserName"="ohmen"
"DefaultPassword"="YourPassword"

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion]
"RegisteredOwner"="ohmen" 註冊者的名稱
刪除螢幕保護程式的密碼
[HKEY_CURRENT_USER\Control Panel\Desktop]
"ScreenSaveUsePassword" 改成 00000000
"ScreenSave_Data" 改成 00
取消IE5的分級密碼
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Ratings]
[HKEY_CURRENT_USER\Control Panel\Sound]
"Beep"="No" 取消錯誤時beep聲,開啟為"yes"
更改特殊資料夾的名稱
[HKEY_CLASSES_ROOT\CLSID\{21EC2020-3AEA-1069-A2DD-08002B30309D}]
預設="身邊" "變更控制台名稱"
[HKEY_CLASSES_ROOT\CLSID\{992CFFA0-F557-101A-88EC-00DD010CCC48}]
預設="雨過天晴" "變更撥號網路名稱"
[HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}]
預設="或許妳是對的" "變更資源回收筒名稱"
[HKEY_CLASSES_ROOT\CLSID\{2227A280-3AEA-1069-A2DE-08002B30309D}]
預設="天使" "變更印表機名稱"
[HKEY_CLASSES_ROOT\CLSID\{D6277990-4C6A-11CF-8D87-00AA0060F5BF}]
預設="乾脆" "變更排程名稱"

HKEY_CLASSES_ROOT\exefile\shell\open\command
預設="%1" %*" 這個機碼若不是這*的話,表示有病毒入侵,趕快改回來吧
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Runonce
上面這幾個機碼下的值,為每次開機時都會執行的檔案,也是常常病毒寄生的地方
檢查一下有沒有奇怪的程式,很有可能是病毒哦
Hardware\Description\System\CentralProcessor\0
這下面的機碼為CPU的型號資訊

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan
這個機碼下的子機碼為所開的資源分享名稱,檢查一下分享資料夾下有一個名稱
為Flags的值,通常為3位數,如102,但若百位數為3的話,則表示這個分享的資料夾
為隱藏的資料夾,使用者無法知道開了這個資料夾,但是別台電腦還是可以存取。
解決方法,可以將個LanMan下資源分享的機碼殺掉

隱藏桌面
HKEY_CURRENT_USER\Software\Microsoft\ Windows\CurrentVersion\Policies\Explorer
增加 "DWORD" = "NoDesktop" 值 "1"
關閉開始選單中的"執行""關機""尋找"
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Policies\Explorer
增加"DWORD" ="NoRun" 關閉執行
增加"DWORD" ="NoClose" 關閉關機
增加"DWORD" ="NoFind" 關閉尋找
值為1,要復原的話,把值改為0

輸入法排序
HKEY_CURRENT_USER\Keyboard layout\Preload
這個地方所對應的輸入法順序為桌面上的順序,
所以要改變輸入法排序,在這個地方排序就好.

使I.E瀏覽器無分級限制
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Ratings
去除Ratingsru就可以了

關掉某個磁碟機

HKEY-CURRENT-USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDrives
預設的鍵值是0x00000000
01=A 02=B 04=C 08=D....
要關掉那一個磁碟,把數據填入即可

一台電腦數個IP
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans
在這個鍵值下尋找 IPAddress和IPMask兩個鍵
IPAddress 是代表IP位址(要幾個自己加)
IPMask是代表子網路遮罩

鎖定桌面
Hkey\Users\default\Software\Microsoft\Windows\Current Version\Policies\Explorer
把"No Save Setting " 鍵值改為1就行了
IE下載地各數太少嗎?
1.按 "開始" -> "執行",在開啟的地方鍵入 "regedit.exe" 再按確定。
2.在左邊的視窗,請找到
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVers ion\Internet Settings
3.在右邊的視窗,按右鍵應該會出現 "新增" 訊息。
4.選擇 "DWORD值",然後鍵入 "MaxConnectionsPer1_0Server",再按右鍵修改為 "63"。
5.按步驟4,新增另一 "MaxConnectionsPerServer",並設值為 "63"。

Read More...

2008年3月21日 星期五

副檔名之對應

副檔名之對應


001 分片壓縮檔 WinRAR3.0
3ds 格式檔 3ds max
ace 壓縮檔 WinRAR 3.0
ade 文件檔 PowerPoint
arj 壓縮檔 WinRAR 3.0
asf 影片檔 Media player
asp 程式原始碼 Internet Explorer, 用記事本開啟編輯
avi 影片檔 Media player
bak 備份檔 如果不需要可直接刪除
bat 批次檔 滑鼠點兩下執行或用記事本編輯
bik 影片檔 Bink Player
bin 燒錄映像檔 CDMate
bkf 備份檔 Windows XP內建的"備份或還原精靈"
bmp 圖片檔 小畫家, ACDsee
bwi 燒錄映像檔 BlindSuite
c2d 燒錄映像檔 WinOnCD
cab 壓縮檔 Cabinet Manager 99
ccd 燒錄映像檔 配合img及sub檔用CloneCD開啟
cdi 燒錄映像檔 Padus DiscJuggler
cdp 燒錄映像檔 NTI CDMaker
cdr 文件檔 CorelDraw
cfg 設定檔 通常可用記事本開啟
cfm 網頁程式檔 Internet Explorer, 用記事本開啟編輯
cgi 網頁程式檔 Internet Explorer, 用記事本開啟編輯
cif 燒錄映像檔 Easy CD Creator
com 命令檔 滑鼠點兩下執行
csv 通訊錄 用Outlook Express或其他郵件軟體匯入
cur 滑鼠游標檔 ACDSee
dao 燒錄映像檔 Duplicator
dat 影片檔 Media player
dbx 郵件檔 用Outlook Express匯入
divx 影片檔 需裝Divx5.02, 用Media player開啟
dll 動態聯絡檔 系統重要檔案, 不要隨意刪除
doc 文件檔 Word
dot 範本檔 Word
drv 驅動程式檔 安裝硬體時需要此檔
dwg 圖檔 AutoCAD
eml 郵件檔 Outlook Express
eps 圖片檔 ACDSee
exe 執行檔 滑鼠點兩下執行
fcd 虛擬光碟檔 Virtual CD-ROM
gcd 燒錄映像檔 Prassi CD Right Plus
gho 備份檔 Ghost還原程式
gif 圖片檔 ACDSee
hlp 說明檔 滑鼠點兩下執行
htm 網頁檔 Internet Explorer
html 網頁檔 Internet Explorer
ico 圖示檔 ACDSee
igs 文件檔 Lotus Notes
ime 輸入法主檔 若刪除此檔會導致無法使用輸入法
inf 組態設定檔 可用記事本開啟, 但不要隨意修改
ini 組態設定檔 可用記事本開啟, 但不要隨意修改
iso 燒錄映像檔 Nero或大部分的燒錄軟體
jar 壓縮檔 WinRAR 3.0
jpg 圖片檔 ACDSee, Photoshop等秀圖, 影像處理軟體
js java script檔 可用記事本開啟
lnk Windows捷徑檔 滑鼠點兩下執行
log 記錄檔 通常可用記事本開啟
lzh 壓縮檔 WinRAR 3.0
m3u Winamp play播放清單 Winamp
mht 網頁封存檔 Internet Explorer
mid 音樂檔 Media player
mov 影片檔 Quicktime
mp3 聲音檔 Media player
mpg 影片檔 Media player
msi 安裝檔 滑鼠點兩下執行
mv2 影片檔 PowerDVD
nrg 燒錄映像檔 Nero
ogg 聲音檔 Winamp
pcx 圖片檔 ACDsee, Photoshop等秀圖, 影像處理軟體
pdb 資料庫 Palm作業系統專用
pdf 文件檔 Acrobat Reader
php 網頁程式檔 Internet Explorer, 用記事本開啟編輯
pls mp3播放列表 Winamp
png 圖片檔 ACDsee, Photoshop等秀圖, 影像處理軟體
pot PowerPoint範本檔 PowerPoint
pps PowerPoint播放檔 僅限播放, 無法修改
ppt PowerPoint文件檔 PowerPoint
prc 可執行程式檔 Palm作業系統專用
psd 圖片檔 Photoshop專用的格式
pwl Windows密碼檔 存放Windows中各式密碼
ra 影片檔 Realplayer
ram 影片檔 Realplayer
rar 壓縮檔 WinRAR3.0
reg 登錄檔 滑鼠點兩下匯入或用記事本開啟編輯
rm 影片檔 Realplayer
rtf 文字檔 Word
sav 儲存檔 遊戲進度的記錄檔案
scr 螢幕保護程式檔 按滑鼠右鍵選擇安裝
sfv 檢查檔 FireSFV
swf 動畫檔 Flash
swp 系統置換檔 管理虛擬記憶體檔案, 勿隨意刪除
sys 系統檔 程式重要檔案, 勿隨意刪除
tab 輸入法的對照表 記事本
tar 壓縮檔 WinRAR3.0
tbl 輸入法字碼檔 輸入法所需使用的檔案
tga 圖片檔 ACDSee, Photoshop等秀圖, 影像處理軟體
tgz 壓縮檔 WinRAR 3.0
tif 圖片檔 ACDSee, Photoshop等秀圖, 影像處理軟體
tmp 暫存檔 程式視需要建立, 可刪除
ttf 字形檔 在控制台中的字型資料夾中新增
txt 文字檔 記事本, Word等可編輯文字的程式
uin ICQ使用者資訊檔 記錄ICQ號碼
url 網頁位址 Internet Explorer
vbs VB script檔 可用記事本開啟
vob 影片檔 PowerDVD
voc 聲音檔 Media player
wab 通訊錄檔 Outlook Express使用
wav 聲音檔 Media player
wbk Word備份檔 Word
wmf 聲音檔 Media player
wri 文件檔 小作家
wsz Winamp的外觀檔 用Winamp匯入
xls excel文件檔 Excel
xml 跨平台網頁檔 Internet Explorer
zip 壓縮檔 Winzip, WinRAR3.0


abf
Adobe二進位螢幕字體
abk
CorelDRAW自動備份檔案
aif
MAC 上使用的,音效檔。PC上可用 plany 播放
ai
Adobe Illustrator格式圖形
aif,aiff
音頻互交換文件,Silicon Graphic and Macintosh應用程式的聲音格式
arc
壓縮檔,可用 pkunpak 解壓及 pak.exe 來解壓
au
SUN 的音效檔,在PC 上可用 plany 放出
cap
畫面狩獵者的輸出格式
cob
Cobol語言原始程式
cpp
C++語言原始程式
dcf
disk image by Disk Copy Fast
ddi
diskdupe 做出來的 disk image 檔
可用 diskdupe, unddi, ddi2file 來解,其中後面兩個可以
直接解到硬碟。
dib
圖形格式,類似 *.bmp,通常可以處理 *.bmp 的程式都可以用來處理
dl
一種動畫格式,可以用 dl-view 來看
dxf (Autodesk Drawing Exchange Format)
AutoCAD 2-d 圖形檔
fla
Flash 的檔案
fon
Windows下"wife"字型,印表機字型等字型檔
fot
Windows的TTF字型掛入檔
frm
Visual Basic語言的畫面原始程式
frx
Visual Basic語言的畫面檔
lbm
圖形檔, Deluxe Paint使用,編碼方式類似 *.iff
iff
圖形檔,Amiga Images, Deluxe Paint 使用
inc
組合語言原始程式的定義/含入檔
img
hd-copy 做出來的 disk image 檔
jis
JIS (—) = Japanese Industrial Standard 日本工業規格
JIS 在這指的應該是日本用的一種文字內碼,一般的 *.jis
都是文字檔,可以用南極星來編修。
mag
日本常用的一種圖形檔。 PC 上可以用 gv,display 來看
ndx
dBase資料庫的索引檔
par
Windows的永久性交換檔
pcd
圖形檔(Kodak PhotoCD)
pic
圖形檔 (Lotus 1-2-3 Pictures)
pro
文書處理軟體的設定檔
ps
post script,一種page description language,如果你使用的列表機
有支援PS 格式的話,直接列印就好了。不然PC 上可以抓ghostview,
ghostscript 等東西來用。
ras (Sun Raster files)
圖形檔
raw
圖形檔(Raw GrayScale)
rcp
一種 Midi 音效檔
rle
壓縮過的 *.bmp(Run Length Compressed)
s3m
S3M 是由 Future Crew 所設計的一種音樂檔格式,可用 iplay 來播放。
*.u01 *.u02 .....
這是 unpack 造出來的,用 pack 可以合起來。
unpack 是把一個大檔案分成數個小檔的程式。
ufo
photoimpact 專用圖檔
vba
Visual Basic 4.0之視覺延伸函式庫
vbx
Visual Basic 3.0之視覺延伸函式庫


Read More...