最近將之前的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
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
程式碼欄位
沒有留言:
張貼留言