Easy 的小舖Blog

Easy 程式設計心得分享


My Links

Blog Stats

隨筆分類

每月文章

好站連結

Monday, November 17, 2008 #

喜愛Easy 文章的人請注意嘍

EASY 部落格搬家嘍!!

以後Easy 發的IT文章都統一放在下面網址,

有興趣的人可以前往參觀

http://itgroup.blueshop.com.tw/ZEasyChen/IT

posted @ 12:13 AM | Feedback (1)

Thursday, March 15, 2007 #

'傳送端
'此處需要1個WinSock,1個Timer,3個Button
Option Explicit
Dim blnConnect As Boolean

Private Sub cmdConnect_Click()  '連線
    On Error Resume Next
        With Winsock1
            If .State = sckConnected Then Exit Sub
            If .State <> sckClosed Then .Close
            .Protocol = sckTCPProtocol
            .Connect txtRemoteIP, txtPort
        End With
        blnConnect = False
        Timer1.Interval = txtSec * 1000
End Sub

Private Sub cmdExit_Click()
    Unload Me
End Sub

Private Sub cmdSend_Click()     '傳送資料
    On Error Resume Next
        Winsock1.SendData txtReceivedData
End Sub

Private Sub Timer1_Timer()      '
    On Error Resume Next
        If Not blnConnect Then MsgBox "連線逾時(" & txtSec & ")!!"
        Timer1.Interval = 0
End Sub

Private Sub Winsock1_Connect()
    blnConnect = True
    MsgBox "連線OK"
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)  '接收資料
        Dim xx As String
        Winsock1.GetData xx, vbString
        txtReceivedData = txtReceivedData & CStr(xx)

End Sub

 '接收端
'此範例是用物件陣列開2個Port 來傳送/接收資料
'此處需要2個winsock,4個Button,4個TextBox
Option Explicit

Private Sub cmdConnect_Click(Index As Integer)  '連線
        With Winsock1(Index)
             .Bind txtPort(Index), .LocalIP
             .Listen
         End With

End Sub

Private Sub cmdExit_Click()         '結束
    Unload Me
End Sub

Private Sub cmdSend_Click()         '傳送資料
    On Error Resume Next
    Dim intLoop As Integer
        For intLoop = 0 To 1
        Winsock1(intLoop).SendData txtReceivedData(intLoop)
        Next
End Sub

Private Sub Timer1_Timer()
    Dim intLoop As Integer
    For intLoop = 0 To Winsock1.UBound
        If Winsock1(intLoop).State <> sckClosed Then
            lblReceivedData(intLoop).ForeColor = &H8000000F
        Else
            lblReceivedData(intLoop).ForeColor = &HFF&
        End If
    Next
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        If Winsock1(Index).State <> sckClosed Then Winsock1(Index).Close
        Winsock1(Index).Accept requestID
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)    '接收資料
    Dim xx As String
        Winsock1(Index).GetData xx, vbString
        txtReceivedData(Index) = txtReceivedData(Index) & CStr(xx)
End Sub

posted @ 10:50 AM | Feedback (5)

Friday, February 09, 2007 #

Public Sub SendMail(Optional Address As String, _
    Optional Subject As String, Optional Body As String, _
    Optional CC As String, Optional BCC As String, Optional ATTACH As String)

    Dim strCommand As String
    '根據傳入的參數拼湊字串,各項目之間以 '&' 分開
    If Len(Subject) Then strCommand = "&Subject=" & Subject '主旨
    If Len(Body) Then strCommand = strCommand & "&Body=" & Body '內文
    If Len(CC) Then strCommand = strCommand & "&CC=" & CC   '副本
    If Len(BCC) Then strCommand = strCommand & "&BCC=" & BCC    '密件副本
    '附加檔案之路徑必須包含前後的雙引號
    '附加檔案在 Outlook 有效,在 Outlook Express 無效,其他電子郵件程式請自行測試
    If Len(ATTACH) Then strCommand = strCommand & "&Attach=""" & ATTACH & """"
    '拼湊出來的字串第一碼改成 '?'
    If Len(strCommand) Then
        Mid(strCommand, 1, 1) = "?"
    End If
    '在字串之前加上 "mailto:" 及 收件人地址
    strCommand = "mailto:" & Address & strCommand
    '執行 ShellExecute API
    Call ShellExecute(Me.hWnd, "open", strCommand, vbNullString, vbNullString, 5)
End Sub

posted @ 10:21 AM | Feedback (1)

Sunday, December 10, 2006 #

Option Explicit

Private Sub Command1_Click()
    Dim FSO As Object
    Dim Files1 As Object
    Dim Files2 As Object
    '使用檔案系統物件開檔
    Set FSO = CreateObject("scripting.FileSystemObject")
    Dim strFolder1 As String
    Dim strFolder2 As String
    Dim blnHave As Boolean
   
    strFolder1 = "c:\temp\1" '目錄1可改成TextBox 輸入
    strFolder2 = "c:\temp\2" '目錄2可改成TextBox 輸入
    Set Files1 = FSO.GetFolder(strFolder1).Files
    Set Files2 = FSO.GetFolder(strFolder2).Files
    ChkFile Files1, Files2
    ChkFile Files2, Files1
   
End Sub

Private Sub ChkFile(ByVal Files1 As Files, ByVal Files2 As Files)
    Dim File1 As File
    Dim File2 As File
    Dim blnHave As Boolean
   
    For Each File1 In Files1
        blnHave = False
        For Each File2 In Files2
            '檢查檔案名稱一不一樣
            If File1.Name = File2.Name Then
                blnHave = True
                Exit For
            End If
        Next
        If blnHave Then
            '檢查修改日期一不一樣
            If File1.DateLastModified > File2.DateLastModified Then
                FileCopy File1.Path, File2.Path
            End If
        Else
            Kill File1.Path
        End If
    Next
   
End Sub

posted @ 3:32 AM | Feedback (1)

Saturday, December 09, 2006 #

<%--HTML 原始碼--%>
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="SampleForm.aspx.vb" Inherits="Sample_SampleForm" %>

<!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 runat="server">
    <title>Web新增刪除修改程式</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FormView ID="FormView1" runat="server" DataKeyNames="KeyNo" DataSourceID="SqlDataSource1" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" Font-Size="Small" Width="100%">
            <EditItemTemplate>
                <table>
                    <tr>
                        <td>
                            員工編號
                        </td>
                        <td>
                            <asp:TextBox ID="EmpNoTextBox" runat="server" Text='<%# Bind("EmpNo") %>'></asp:TextBox>                           
                        </td>
                        <td>
                            員工姓名
                        </td>
                        <td>
                            <asp:TextBox ID="EmpNameTextBox" runat="server" Text='<%# Bind("EmpName") %>'></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            到職日期
                        </td>
                        <td>
                            <asp:TextBox ID="EntryDateTextBox" runat="server" Text='<%# Bind("EntryDate") %>'></asp:TextBox>
                        </td>
                        <td>
                            地址
                        </td>
                        <td>
                            <asp:TextBox ID="AddressTextBox" runat="server" Text='<%# Bind("Address") %>'></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            備註
                        </td>
                        <td>
                            <asp:TextBox ID="NoteTextBox" runat="server" Text='<%# Bind("Note") %>'></asp:TextBox>
                        </td>
                    </tr>
                </table>
                <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
                    Text="更新">
                </asp:LinkButton>
                <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                    Text="取消">
                </asp:LinkButton>
            </EditItemTemplate>
            <InsertItemTemplate>
                <table>
                    <tr>
                        <td>
                            員工編號
                        </td>
                        <td>
                            <asp:TextBox ID="EmpNoTextBox" runat="server" Text='<%# Bind("EmpNo") %>'></asp:TextBox>                           
                        </td>
                        <td>
                            員工姓名
                        </td>
                        <td>
                            <asp:TextBox ID="EmpNameTextBox" runat="server" Text='<%# Bind("EmpName") %>'></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            到職日期
                        </td>
                        <td>
                            <asp:TextBox ID="EntryDateTextBox" runat="server" Text='<%# Bind("EntryDate") %>'></asp:TextBox>
                        </td>
                        <td>
                            地址
                        </td>
                        <td>
                            <asp:TextBox ID="AddressTextBox" runat="server" Text='<%# Bind("Address") %>'></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            備註
                        </td>
                        <td>
                            <asp:TextBox ID="NoteTextBox" runat="server" Text='<%# Bind("Note") %>'></asp:TextBox>
                        </td>
                    </tr>
                </table>
                <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
                    Text="插入">
                </asp:LinkButton>
                <asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                    Text="取消">
                </asp:LinkButton>
            </InsertItemTemplate>
            <ItemTemplate>
                <table>
                    <tr>
                        <td>
                            員工編號
                        </td>
                        <td>
                            <asp:Label ID="EmpNoTextBox" runat="server" Text='<%# Eval("EmpNo") %>'></asp:Label>                           
                        </td>
                        <td>
                            員工姓名
                        </td>
                        <td>
                            <asp:Label ID="EmpNameTextBox" runat="server" Text='<%# Eval("EmpName") %>'></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            到職日期
                        </td>
                        <td>
                            <asp:Label ID="EntryDateTextBox" runat="server" Text='<%# String.Format("{0:yyyy/MM/dd HH:mm:ss}",Eval("EntryDate"))  %>'></asp:Label>
                        </td>
                        <td>
                            地址
                        </td>
                        <td>
                            <asp:Label ID="AddressTextBox" runat="server" Text='<%# Eval("Address") %>'></asp:Label>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            備註
                        </td>
                        <td>
                            <asp:Label ID="NoteTextBox" runat="server" Text='<%# Eval("Note") %>'></asp:Label>
                        </td>
                    </tr>
                </table>
                <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New"
                    Text="新增">
                </asp:LinkButton>
                <asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit"
                    Text="編輯">
                </asp:LinkButton>
                <asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="javascript:return(confirm('確定要刪除??'));"
                    Text="刪除">
                </asp:LinkButton>
            </ItemTemplate>
            <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
            <EditRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
            <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
        </asp:FormView>
        <br />
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
            AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None"
            BorderWidth="1px" CellPadding="3" DataKeyNames="KeyNo" DataSourceID="SqlDataSource1"
            GridLines="Vertical" Font-Size="Small" Width="100%">
            <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
            <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="KeyNo" HeaderText="KeyNo" InsertVisible="false" ReadOnly="True" SortExpression="KeyNo" />
                <asp:BoundField DataField="EmpNo" HeaderText="員工編號" SortExpression="EmpNo" />
                <asp:BoundField DataField="EmpName" HeaderText="員工姓名" SortExpression="EmpName" />
                <asp:BoundField DataField="EntryDate" HeaderText="到職日期" SortExpression="EntryDate" DataFormatString="{0:yyyy/MM/dd HH:mm:ss}" HtmlEncode="False" />
                <asp:BoundField DataField="Address" HeaderText="地址" SortExpression="Address" />
                <asp:BoundField DataField="Note" HeaderText="備註" SortExpression="Note" />
            </Columns>
            <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
            <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="#DCDCDC" />
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb"
            DeleteCommand="DELETE FROM [Demo] WHERE [KeyNo] = ?" InsertCommand="INSERT INTO [Demo] ([EmpNo], [EmpName], [EntryDate], [Address], [Note]) VALUES ( ?, ?, ?, ?, ?)"
            ProviderName="System.Data.OleDb" SelectCommand="SELECT * FROM [Demo]" UpdateCommand="UPDATE [Demo] SET [EmpNo] = ?, [EmpName] = ?, [EntryDate] = ?, [Address] = ?, [Note] = ? WHERE [KeyNo] = ?">
            <DeleteParameters>
                <asp:Parameter Name="KeyNo" Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="EmpNo" Type="Int32" />
                <asp:Parameter Name="EmpName" Type="String" />
                <asp:Parameter Name="EntryDate" Type="DateTime" ConvertEmptyStringToNull="true" />
                <asp:Parameter Name="Address" Type="String" ConvertEmptyStringToNull="true" />
                <asp:Parameter Name="Note" Type="String" ConvertEmptyStringToNull="true" />
                <asp:Parameter Name="KeyNo" Type="Int32" ConvertEmptyStringToNull="true" />
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="EmpNo" Type="Int32" />
                <asp:Parameter Name="EmpName" Type="String" />
                <asp:Parameter Name="EntryDate" Type="DateTime"/>
                <asp:Parameter Name="Address" Type="String"/>
                <asp:Parameter Name="Note" Type="String"/>
            </InsertParameters>
        </asp:SqlDataSource>
    </div>
    </form>
</body>
</html>

'VB 程式碼
Partial Class Sample_SampleForm
    Inherits System.Web.UI.Page

    Protected Sub GridView1_PageIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.PageIndexChanged
        MoveFormView(sender)

    End Sub

    Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
        MoveFormView(sender)

    End Sub

    Protected Sub GridView1_Sorted(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.Sorted
        MoveFormView(sender)

    End Sub

    Private Sub MoveFormView(ByVal sender As Object)
        If sender.SelectedRow Is Nothing Then
            FormView1.PageIndex = -1
            Exit Sub
        End If

        Dim dv As Data.DataView = Me.SqlDataSource1.Select(New DataSourceSelectArguments)
        Dim i As Int32 = 0
        If sender.SortExpression.ToString.Length > 0 Then
            dv.Sort = sender.SortExpression & " " & IIf(sender.SortDirection = 0, "Asc", "Desc")
        End If

        Dim value As Long = dv.Item(sender.PageSize * sender.PageIndex + sender.Selectedindex).Item("KeyNo")
        dv.Sort = ""
        For i = 0 To dv.Count - 1
            If dv(i).Item("KeyNo").ToString = value.ToString Then
                Exit For
            End If
        Next
        FormView1.PageIndex = i
    End Sub

End Class

執行效果

posted @ 10:44 PM | Feedback (2)

Friday, December 08, 2006 #

'因是利用Access 連線,所以所有語法都需以Access可接受的語法來做
'範例為單純的Select 語法,可自行將其改成Insert,Update,Delete
'Oracle
Private Sub Command1_Click()
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strOraODBCTable As String
    Dim ConnStr As String
    Dim TableName As String
    Dim strSQL As String
        '建立連線
        ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False;"
        cn.Open ConnStr
       
        TableName = "xx"
        strOraODBCTable = "[ODBC;DRIVER={Microsoft ODBC for Oracle};UID=...;PWD=...;SERVER=...;]" & _
                ".[" & TableName & "]"
       
        strSQL = "Select * From " & strOraODBCTable
        '可自行改成Insert ,Update ,Delete語法
        rs.CursorLocation = adUseClient
        rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly
       
        Set Me.DataGrid1.DataSource = rs
        DataGrid1.Refresh
End Sub

'SQL Server
Private Sub Command2_Click()
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strSQLODBCTable As String
    Dim ConnStr As String
    Dim TableName As String
    Dim strSQL As String
        '建立連線
        ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False;"
        cn.Open ConnStr
       
        TableName = "TEST1"
        strSQLODBCTable = "[ODBC;DRIVER=SQL Server;SERVER=...;APP=Visual Basic;WSID=...;DATABASE=...;Trusted_Connection=Yes]" & _
                ".[" & TableName & "]"
        strSQL = "Select * From " & strSQLODBCTable
        rs.CursorLocation = adUseClient
        rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly
        '可自行改成Insert ,Update ,Delete語法
        '再利用cn.Execute strSQL 異動資料庫
       
        Set Me.DataGrid1.DataSource = rs
        DataGrid1.Refresh

End Sub

posted @ 4:41 PM | Feedback (3)

'做法都是用隔月的第一天減一天

'VB

Private Sub Command1_Click()
    Dim d As Date
        d = "2006/05/03"
        MsgBox (DateAdd("M", 1, Format(d, "YYYY/MM") & "/01") - 1)
End Sub
'VB.NET

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim d As Date
        d = "2006/05/03"
        MsgBox(Date.Parse(d.AddMonths(1).ToString("yyyy/MM") & "/01").AddDays(-1))

End Sub

posted @ 12:02 PM | Feedback (2)

ROWLOCK 讀取或修改資料時使用資料列層級鎖定。這些鎖定會依適當情況被取得及釋放。

PAGLOCK 讀取或修改資料時使用頁面層級鎖定。這些鎖定會依適當情況被取得及釋放。
 
TABLOCK 讀取或修改資料時使用資料表鎖定。此鎖定會被保留到陳述式結束為止。
 
DBLOCK 讀取或修改資料時使用資料庫鎖定。此鎖定會被保留到陳述式結束為止。
 
LOCKMODES
 
UPDLOCK 在讀取資料表時使用更新鎖定,而非共用鎖定,並使用保留鎖定直到陳述式或交易結束為止。UPDLOCK 可讓您不會在讀取資料時封鎖其他讀取器,且稍後更新資料時,也可確信自從您上次讀取之後,資料並未發生變更。

XLOCK 在讀取資料表時使用獨佔鎖定,而非共用鎖定,並使用保留鎖定直到陳述式或交易結束為止。
 
持續期間
 
HOLDLOCK 使用保留鎖定將鎖定保留至交易完成為止,而不會在所需資料表、資料列或資料頁已不再需要時立即釋放鎖定。
 
NOLOCK 不會發出任何鎖定。這是 SELECT 作業的預設值。此鎖定不適用於 INSERT、UPDATE 及 DELETE 陳述式。

範例:

begin tran begin tran select * from test1 with (xlock) where t1 = 1 '鎖定t1=1的資料

rollback

begin tran begin tran select * from test1 with (tablock,xlock) '鎖定資料表Test1

rollback

詳細資料可參考微軟網站

posted @ 11:49 AM | Feedback (0)

可將資料欄位設成LONG 或 CLOB 等型態

語法需再做一點點小加工

可設一個陣列,先將一串字串分成每個元素都不超過4000Bytes 再用Oracle 的字串相加(||)加起來就行嘍

EX:

insert into xx (x1) values (to_clob('" & str(0) & "')||to_clob('" & str(1) & "')||to_clob('" & str(2) & "'))

 

 

 

posted @ 11:18 AM | Feedback (3)

Thursday, December 07, 2006 #

有再增加一個查詢的功能,有需要的人可以參考

....

Private Sub cmdFind_Click()
    On Error GoTo ChkErr
    Dim strWhere As String
    '串查詢條件
        If txtFindEmpNo1.Text <> "" Then
            strWhere = strWhere & " And [EmpNo] >=" & txtFindEmpNo1.Text
        End If
        If txtFindEmpNo2.Text <> "" Then
            strWhere = strWhere & " And [EmpNo] <=" & txtFindEmpNo2.Text
        End If
        If txtFindEmpName1.Text <> "" Then
            strWhere = strWhere & " And [EmpName] >='" & txtFindEmpName1.Text & "'"
        End If
        If txtFindEmpName2.Text <> "" Then
            strWhere = strWhere & " And [EmpName] <='" & txtFindEmpName2.Text & "'"
        End If
        If txtFindEntryDate1.Text <> "" Then
            strWhere = strWhere & " And [EntryDate] >=#" & txtFindEntryDate1.Text & "#"
        End If
        If txtFindEntryDate2.Text <> "" Then
            strWhere = strWhere & " And [EntryDate] <=#" & txtFindEntryDate2.Text & "#"
        End If
        If txtFindAddress.Text <> "" Then
            strWhere = strWhere & " And [Address] like '%" & txtFindAddress.Text & "%'"
        End If
        If txtFindNote.Text <> "" Then
            strWhere = strWhere & " And [Note] like '%" & txtFindNote.Text & "%'"
        End If
        If strWhere <> "" Then strWhere = Mid(strWhere, 5)
        Call OpenData(strWhere)
    Exit Sub
ChkErr:
    ErrHandle
End Sub

....

完整程式碼請參考... http://blog.blueshop.com.tw/zeasychen/archive/2006/11/09/44747.aspx

posted @ 1:47 PM | Feedback (1)

Friday, December 01, 2006 #

    Private Function DynCallClass(ByVal strClassname As String, ByVal strNamespace As String) As Object
        Dim o As Object = Activator.CreateInstance(Type.GetType(strNamespace & "." & strClassname))
        Return o
    End Function

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Dim o As Object = DynCallClass("Form6", "TEST")
        o.show()
    End Sub

posted @ 2:26 PM | Feedback (1)

'先設定ComboBox1.DrawMode = DrawMode.OwnerDrawVariable
    Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
        Select Case e.Index
            Case 0, 2
                e.Graphics.DrawString(sender.Items(e.Index), e.Font, Brushes.Brown, New PointF(e.Bounds.X, e.Bounds.Y))
            Case Else
                e.Graphics.DrawString(sender.Items(e.Index), e.Font, New System.Drawing.SolidBrush(e.ForeColor), New PointF(e.Bounds.X, e.Bounds.Y))
        End Select

    End Sub

posted @ 2:04 PM | Feedback (0)

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False")
        Dim cmd As New Data.OleDb.OleDbCommand
        With cmd
            cn.Open()
            .CommandText = "Update test1 set t2=?,t3=? where t1=?"
            .Connection = cn
            .Parameters.Add("t1", OleDb.OleDbType.Decimal)
            .Parameters.Add("t2", OleDb.OleDbType.BSTR)
            .Parameters.Add("t3", OleDb.OleDbType.DBDate)

            .Parameters.Item(0).Value = TextBox1.Text
            .Parameters.Item(1).Value = TextBox2.Text
            .Parameters.Item(2).Value = Convert.ToDateTime(TextBox3.Text)
            .ExecuteNonQuery()
            cn.Close()
        End With
    End Sub

posted @ 1:38 PM | Feedback (1)

Thursday, November 30, 2006 #

Sub test()
    Dim cn As Object
    Dim rs As Object
    Dim rs2 As Object
    Dim i As Long
    Dim iCount As Long
    Set cn = CreateObject("adodb.connection")
    Set rs = CreateObject("adodb.recordset")
    Set rs2 = CreateObject("adodb.recordset")
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False"
    rs.cursorlocation = 3
    rs.Open "Select * From NewData", cn, 1, 3
    For i = 1 To 65535
        iCount = 0
        If Range("A" & i).Text <> "" Then
            If rs2.State = 1 Then rs2.Close
            rs2.cursorlocation = 3
            rs2.Open "Select * From NewData where [編號]=" & Range("A" & i).Text, cn, 0, 1        '數字要這樣
            'rs2.Open "Select * From NewData where 編號='" & Range("A" & i).Text & "'", cn, 0, 1 '文字改這樣
            iCount = rs2.RecordCount
        End If
        If iCount = 0 Then
            rs.addnew
            rs("編號") = IIf(Range("A" & i).Text = "", Null, Range("A" & i).Text)
        End If
        rs("名稱") = IIf(Range("B" & i).Text = "", Null, Range("B" & i).Text)
        rs("數量") = IIf(Range("C" & i).Text = "", Null, Range("C" & i).Text)
        If rs("編號") & "" = "" And rs("名稱") & "" = "" And rs("數量") & "" = "" Then
            rs.cancelupdate
            Exit For
        End If
        rs.Update
    Next
End Sub

posted @ 10:01 AM | Feedback (1)

Sunday, November 26, 2006 #

'2006/12/05 增加查詢功能
Public Class SampleForm2
    Enum uEditMode  '列舉值
        Insert = 0
        Edit = 1
        View = 2
        Delete = 3
    End Enum

    Dim cn As New Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False")
    Dim da As New OleDb.OleDbDataAdapter
    Dim cb As New OleDb.OleDbCommandBuilder
    Dim dt As New Data.DataTable("Demo")
    Dim lngEditMode As uEditMode
    Dim strCaption() As String
    Dim WithEvents myBindingManagerBase As BindingManagerBase

    Private Sub BindingManagerBase_PositionChanged(ByVal sender As Object, ByVal e As EventArgs) Handles myBindingManagerBase.PositionChanged
        RcdToScr()
    End Sub

    'Private Sub MoveNext()
    '    myBindingManagerBase.Position += 1
    'End Sub

    'Private Sub MovePrevious()
    '    myBindingManagerBase.Position -= 1
    'End Sub

    'Private Sub MoveFirst()
    '    myBindingManagerBase.Position = 0
    'End Sub

    'Private Sub MoveLast()
    '    myBindingManagerBase.Position = myBindingManagerBase.Count - 1
    'End Sub


    Private Sub SampleForm2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        InitComm()
        DataBind()
    End Sub

    Private Sub SetCaption()
        Try
            strCaption = Split("員工編號,員工姓名,到職日期,地址,備註", ",")
            lblEmpNo.Text = strCaption(0)            '設定Label 的Caption
            lblEmpName.Text = strCaption(1)
            lblEntryDate.Text = strCaption(2)
            lblAddress.Text = strCaption(3)
            lblNote.Text = strCaption(4)

            lblFindEmpNo.Text = strCaption(0)            '設定Label 的Caption
            lblFindEmpName.Text = strCaption(1)
            lblFindEntryDate.Text = strCaption(2)
            lblFindAddress.Text = strCaption(3)
            lblFindNote.Text = strCaption(4)

            For i As Int32 = 0 To UBound(strCaption)       '設定DataGrid 的Caption
                dgdData.Columns(i + 1).HeaderText = strCaption(i)
            Next
        Catch ex As Exception
            ErrHandle(ex)
        End Try
    End Sub

    '加入錯誤處理
    Private Sub ErrHandle(ByVal ex As Exception)
        MsgBox("[程式錯誤]-錯誤原因:" & ex.Message, vbCritical, "提示")
    End Sub

    Private Sub InitComm()
        ChangeMode(uEditMode.View)
    End Sub

    '清空資料
    Private Sub NewRcd()
        Try
            txtEmpNo.Clear()
            txtEmpName.Clear()
            txtEntryDate.Clear()
            txtAddress.Clear()
            txtNote.Clear()
            txtEmpNo.Focus()
        Catch ex As Exception
            ErrHandle(ex)
        End Try
    End Sub

    Private Sub RcdToScr()
        Try
            With dt
                If myBindingManagerBase.Position < 0 Then Exit Try
                txtEmpNo.Text = .Rows(myBindingManagerBase.Position).Item("EmpNo").ToString
                txtEmpName.Text = .Rows(myBindingManagerBase.Position).Item("EmpName").ToString
                txtEntryDate.Text = .Rows(myBindingManagerBase.Position).Item("EntryDate").ToString
                txtAddress.Text = .Rows(myBindingManagerBase.Position).Item("Address").ToString
                txtNote.Text = .Rows(myBindingManagerBase.Position).Item("Note").ToString
            End With

        Catch ex As Exception
            ErrHandle(ex)

        End Try
    End Sub

    Private Sub ScrToRcd()
        Try
            Dim objRow As DataRow = Nothing
            If lngEditMode = uEditMode.Insert Then
                objRow = dt.NewRow '如果為新增模式則新增一筆資料
            Else
                objRow = dt.Rows(myBindingManagerBase.Position)
            End If
            With objRow
                .Item("EmpNo") = GetValue(txtEmpNo.Text)
                .Item("EmpName") = GetValue(txtEmpName.Text)
                .Item("EntryDate") = GetValue(txtEntryDate.Text)
                .Item("Address") = GetValue(txtAddress.Text)
                .Item("Note") = GetValue(txtNote.Text)
            End With
            dt.Rows.Add(objRow)
            da.Update(dt)
        Catch ex As Exception
            ErrHandle(ex)
        End Try
    End Sub

    Private Function GetValue(ByVal Value As Object) As System.Object
        Dim tmpValue As Object = Nothing
        If Value.ToString.Length = 0 Then
            tmpValue = Convert.DBNull
        Else
            tmpValue = Value
        End If
        Return tmpValue
    End Function

    Private Sub DataBind()                  '繫結資料
        Try
            Dim strWhere As String = ""
            OpenData()
            cb = New Data.OleDb.OleDbCommandBuilder(da)
            cb.QuotePrefix = "["
            cb.QuoteSuffix = "]"

            dt.Clear()
            da.Fill(dt)
            myBindingManagerBase = Me.BindingContext(dt)
            Me.dgdData.DataSource = dt
            Me.dgdData.Refresh()

            If dt.Columns.Count > 0 Then dt.Columns("KeyNo").ReadOnly = True
            If dgdData.Columns.Count > 0 Then dgdData.Columns("KeyNo").Visible = False
            SetCaption()

        Catch ex As Exception
            ErrHandle(ex)
        End Try

        BindingManagerBase_PositionChanged(Me, System.EventArgs.Empty)

    End Sub

    Private Sub OpenData()
        da = New Data.OleDb.OleDbDataAdapter
        Dim cmd As New OleDb.OleDbCommand

        Dim strWhere As String = ""
        If Me.txtFindEmpNo1.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.Decimal).Value = txtFindEmpNo1.Text
            strWhere &= " And [EmpNo] >= ?"
        End If
        If Me.txtFindEmpNo2.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.Decimal).Value = txtFindEmpNo2.Text
            strWhere &= " And [EmpNo] <= ?"
        End If
        If Me.txtFindEmpName1.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.BSTR, 10).Value = txtFindEmpName1.Text
            strWhere &= " And [EmpName] >= ?"
        End If
        If Me.txtFindEmpName2.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.BSTR, 10).Value = txtFindEmpName2.Text
            strWhere &= " And [EmpName] <= ?"
        End If
        If Me.txtFindEntryDate1.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.Date).Value = txtFindEntryDate1.Text
            strWhere &= " And [EntryDate] >= ?"
        End If
        If Me.txtFindEntryDate2.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.Date).Value = txtFindEntryDate2.Text
            strWhere &= " And [EntryDate] <= ?"
        End If
        If Me.txtFindNote.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.BSTR, 10).Value = txtFindNote.Text
            strWhere &= " And [Note] like '%' + ? + '%'"
        End If
        If Me.txtFindAddress.Text.Length > 0 Then
            cmd.Parameters.Add("EmpNo1", OleDb.OleDbType.BSTR, 10).Value = txtFindAddress.Text
            strWhere &= " And [Address] like '%' + ? + '%'"
        End If

        cmd.CommandText = "Select [KeyNo],[EmpNo],[EmpName],[EntryDate],[Address],[Note] From [Demo] "
        If strWhere.Length > 0 Then cmd.CommandText &= " Where " & strWhere.Substring(4)
        cmd.Connection = cn
        da.SelectCommand = cmd
    End Sub

    Private Sub dtnUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
        If Not IsDataOk() Then Exit Sub
        ScrToRcd()
        If lngEditMode = uEditMode.Insert Then
            btnAdd_Click(Me, System.EventArgs.Empty)
        Else
            ChangeMode(uEditMode.View)
        End If
    End Sub

    Private Function IsDataOk() As Boolean  '撰寫檢查的條件
        Try

        Catch ex As Exception

        End Try
        Return True
    End Function

    Private Sub cmdCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.Click
        If lngEditMode = uEditMode.View Then
            Me.Dispose()
        Else
            DataBind()
        End If
    End Sub

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
        Me.Dispose()
    End Sub

    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        Call ChangeMode(uEditMode.Insert)
        NewRcd()

    End Sub

    Private Sub ChangeMode(ByVal lngMode As uEditMode)
        Try
            Dim blnFlag As Boolean
            lngEditMode = lngMode
            Select Case lngMode
                Case uEditMode.Insert   '新增
                    blnFlag = True
                    btnExit.Text = "取消(&X)"
                Case uEditMode.Edit   '修改
                    blnFlag = True
                    btnExit.Text = "取消(&X)"
                Case uEditMode.View   '顯示
                    blnFlag = False
                    btnExit.Text = "結束(&X)"
            End Select
            gbxData.Enabled = blnFlag
            dgdData.Enabled = Not blnFlag
            btnAdd.Enabled = Not blnFlag
            btnEdit.Enabled = Not blnFlag
            btnSave.Enabled = blnFlag
            btnDelete.Enabled = Not blnFlag
            btnPrint.Enabled = Not blnFlag

        Catch ex As Exception
            ErrHandle(ex)

        End Try
    End Sub

    Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
        Call ChangeMode(uEditMode.Edit)

    End Sub

    Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
        If MessageBox.Show("確定要刪除??", "提示!!", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
            dt.Rows(myBindingManagerBase.Position).Delete()
            da.Update(dt)
            BindingManagerBase_PositionChanged(Me, System.EventArgs.Empty)
        End If
    End Sub

    Private Sub lblEmpNo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblEmpNo.Click

    End Sub

    Private Sub btnFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFind.Click
        DataBind()
    End Sub
End Class

執行後效果

posted @ 3:32 AM | Feedback (6)