ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 2653|ตอบกลับ: 0

[VB6] แจกโค้ดการใช้งานตารางกริด SharpGrid Bound Data Control ในแบบ Run Time

[คัดลอกลิงก์]

252

กระทู้

370

โพสต์

3088

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3088



SharpGrid ActiveX Grid Control จัดเป็น Data Grid ที่ทรงประสิทธิภาพมาก สำหรับเหล่าบรรดา Developer ในกลุ่มของ Visual Studio 98 ทั้งนี้เราต้องใช้ทั้ง Design Time และการลงโค้ดตอน Run Time ผสมผสานกัน ถึงจะดึงขีดความสามารถของ ActiveX ตัวนี้ออกมาใช้งานได้อย่างเต็มที่ ...

ฟรีโค้ดของจริงนี้จะเป็นการนำเสนอ การใช้งาน
SharpGrid ในลักษณะของ Bound Data Control หรือการผูกแหล่งข้อมูลเข้ากับตัวตารางกริด โดยการทำ Query เพื่อสร้าง DataSource ให้กับ SharpGrid แต่เป็นลักษณะของการเขียนโค้ดในแบบ Run-Time (สั่งรันจึงจะเห็นผล) โดยไม่ได้ใช้วิธีการที่จับลากมาวางแปะๆเหมือนตามตำรา ซึ่งแอดมินเชื่อว่าหลายๆคน อาจจะไม่ค่อยคุ้นเคยกันมากนักกับวิธีการแบบนี้ แต่เชื่อเถอะครับด้วยวิธีการออกแบบ และเขียนโค้ดในลักษณะนี้ มันจะมีความยืดหยุ่นที่สูงมากกว่า ยิ่งหากเราต้องทำงานในหลายๆโปรเจค ก็เรียกได้ว่าแค่ก็อปไปวางแปะได้เลย (หากเข้าใจแจ่มแจ้งนะขอรับ) ... หลักการทำงานของมัน เราสามารถนำไปเรียนรู้และใช้งานกับ VB.Net อย่างต่อเนื่องได้เลยทันที เพราะใช้หลักการเดียวกันครับผม (แค่คำที่เรียกใช้งานแตกต่างกัน) ...

มารู้จักกับคำว่า Bound Data และ UnBound Data Control
- Bound Data Control คือ การผูก (Bound) ตารางข้อมูล (RecordSet) เข้ากับพวก Component หรือ Control ต่างๆ ผ่านทาง DataSource กรณีที่นำมาใช้แสดงผลลงในตารางกริด มันจะอ่านค่าฟิลด์ต่างๆ เพื่อแสดงผลในแต่ละหลัก เรียงตามลำดับจากการ Query ที่เราเขียนไว้ และ ต้องแสดงทุกๆฟิลด์ออกมาทั้งหมด (หากไม่ต้องการแสดงผล จะต้องทำการซ่อนหลักของตัวกริดเอง) มีข้อดี คือ ทำงานได้เร็ว มักนำไปแสดงผลข้อมูลอย่างเดียว ซึ่งแอดมินจะใช้ในบทความนี้ทั้งหมดครับ

- UnBound Data Control ก็จะไม่มีการผูก (Unbound) ตารางข้อมูลใดๆเข้ากับ Component หรือ Control การนำไปใช้ในตารางกริด ไม่จำเป็นต้องแสดงผลออกมาทุกฟิลด์ และ จะเอาตัวไหนมาแสดงในหลักใดๆก่อนหลังก็ได้ มีข้อดี คือ ยืดหยุ่นมากกว่า และ มักใช้กับการแก้ไขข้อมูลของตารางกริดในแต่ละ Cell ได้นั่นเอง (อันนี้เดี๋ยวเป็นภาค 2 ต่อจากตอนนี้ครับ)

Download SharpGrid ActiveX/COM Grid Control (เฉพาะสมาชิกเท่านั้น)

หน้าตาของการออกแบบฟอร์ม (Design Time) ... ไม่ต้องปรับแต่งค่าคุณสมบัติ (Properties) ใดๆในตัว SharpGrid


ก่อนที่จะทำการลงมือเขียนโปรแกรม จะต้องทำการ Reference หรืออ้างอิงการติดต่อกับฐานข้อมูลก่อน

จากเมนู Project --> References ...

เรียกใช้งาน SharpGrid ActiveX Control ... เพื่อให้ SharpGrid มาปรากฏอยู่ใน ToolBox

จากเมนู Project --> Components ... เลือกแบบ Unicode เพื่อรองรับภาษาไทยได้

มาดูโค้ดกันเถอะ ... ในส่วนของฟอร์มหลัก
  1. ' / -----------------------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : [email protected]
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand only)
  6. ' / Facebook: https://www.facebook.com/commonindy (World Wide)
  7. ' /
  8. ' / Purpose : Sample to use SharpGrid ActiveX for Bound Data Control.
  9. ' / Microsoft Visual Basic 6.0 Service Pack 6 + MS Access 2003
  10. ' / -----------------------------------------------------------------------------------------------
  11. Option Explicit

  12. ' / -----------------------------------------------------------------------------------------------
  13. Private Sub Form_Load()
  14. ' / -----------------------------------------------------------------------------------------------
  15. '/ Trap Error
  16. On Error GoTo ErrorHandler
  17.     '// การตั้งฟอร์มไว้กึ่งกลางจอภาพในแบบ Run Time
  18.     Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
  19.     '// ทำการติดต่อกับฐานข้อมูลก่อน (modDataBase.bas)
  20.     Call OpenDataBase
  21.     '// เคลียร์ค่า TextBox
  22.     txtSearch.Text = ""
  23.    
  24.     '// ตั้งค่าการแสดงผล SharpGrid
  25.     Call InitSGGrid
  26.     '// ส่งค่า False เพื่อแจ้งโปรแกรมย่อยว่าแสดงผลข้อมูลออกมาทั้งหมด
  27.     Call SGGridEmployeeBound(False)
  28.    
  29. ExitProc:
  30.     Exit Sub
  31.    
  32. ErrorHandler:
  33.     MsgBox "Error : " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbExclamation, "รายงานความผิดพลาด"
  34.     Resume ExitProc
  35.     '
  36. End Sub

  37. ' / -----------------------------------------------------------------------------------------------
  38. Sub InitSGGrid()
  39. ' / -----------------------------------------------------------------------------------------------
  40.     ' Initialize grid properties
  41.     With SGGridEmployee
  42.         '/ ++++++++++++++++++++++++++++++++++++++++
  43.         '/ กำหนดการแสดงผล GroupHeader หรือไม่
  44.         '/ False คือ ไม่ต้องแสดงผล
  45.         .GroupByBoxVisible = False
  46.         '/ True จะแสดงผล GroupHeader ซึ่งจะทำให้ผู้ใช้งานลาก Column ไปจัดกลุ่มได้
  47.         '/ ++++++++++++++++++++++++++++++++++++++++
  48.         
  49.         .FitLastColumn = True
  50.         .Appearance = sg3D
  51.         .SpecialMode = sgModeListBox
  52.         .CellsBorderVisible = True
  53.         .AutoResize = sgAutoResizeColumns
  54.         .GroupIndentation = 225
  55.         
  56.         .DefaultRowHeight = 390
  57.         .RowHeightMin = 390
  58.         .HeadingColCount = 1
  59.         
  60.         .HeadingGridLinesColor = vbBlack
  61.         .HeadingGridLines = sgGridLineFlat
  62.         
  63.         '/ สลับสีแถว
  64.         .EvenOddStyle = sgEvenOddRows
  65.         .ColorOdd = &HEFEFE0
  66.         
  67.         .CellTips = sgCellTipsFloat
  68.         .CellTipsDelay = 400
  69.         .ScrollBarTips = sgScrollTipsVertical
  70.         
  71.         .CacheAllRecords = True
  72.         .ColumnClickSort = True
  73.         
  74.         '/ การแสดงผลปกติทั่วไป
  75.         With .Styles("Normal")
  76.             .BkgStyle = sgCellBkgSolid
  77.             .Font.Name = "Tahoma"
  78.             .Font.Size = 8
  79.             .Padding = 18
  80.         End With
  81.       
  82.       '/ ส่วนหัวของ Header กรณีการแสดงผลทั่วไป
  83.         With .Styles("Heading")
  84.             .BackColor = RGB(0, 153, 255)
  85.             .ForeColor = vbWhite
  86.             .Font.Name = "Tahoma"
  87.             .Font.Size = 9
  88.             .Font.Bold = True
  89.             .Padding = 75
  90.         End With
  91.         
  92.         '/ ส่วนหัวของ GroupHeader กรณีมีการจัดกลุ่ม
  93.         With .Styles("GroupHeader")
  94.             .Font.Size = 9
  95.             .Font.Bold = True
  96.             .BackColor = RGB(241, 239, 226)
  97.             .BkgStyle = sgCellBkgSolid
  98.             .Padding = 30
  99.             .BorderColor = RGB(241, 207, 0)
  100.             .Borders = sgCellBorderBottom
  101.             .BorderSize = 1
  102.         End With
  103.       
  104.         '/ ส่วนของ GroupFooter กรณีมีการจัดกลุ่ม
  105.         With .Styles("GroupFooter")
  106.             .Font.Size = 9
  107.             .Font.Name = "Tahoma"
  108.             .ForeColor = vbBlue
  109.             .BackColor = RGB(255, 255, 224)
  110.             .BkgStyle = sgCellBkgSolid
  111.             .Padding = 75
  112.             .BorderColor = RGB(255, 207, 0)
  113.             .Borders = sgCellBorderBottom
  114.             .BorderSize = 50
  115.             .TextAlignment = sgAlignLeftCenter
  116.         End With
  117.       
  118.         With .Styles("Tip")
  119.             .Font.Size = 10
  120.             .Padding = 40
  121.         End With
  122.       
  123.        '/ กำหนดสีให้แถบแสงที่เราเลือกแถว
  124.         With .Styles("Selection")
  125.             .BackColor = RGB(0, 170, 0)
  126.             .ForeColor = vbWhite
  127.             .BkgStyle = sgCellBkgSolid
  128.         End With
  129.       
  130.       '/ กำหนดสีให้แถบแสง กรณีที่เราไม่ได้เลือกแถวนั้น
  131.         With .Styles("InactiveSelection")
  132.             .BackColor = RGB(0, 170, 0)
  133.             .ForeColor = vbWhite
  134.             .BkgStyle = sgCellBkgSolid
  135.         End With
  136.     End With

  137. End Sub

  138. ' / -----------------------------------------------------------------------------------------------
  139. ' / อ่านค่า Primary Key จากหลัก 0 ที่ถูกซ่อนเอาไว้ เพื่อนำไปใช้งานอย่างอื่นต่อไป
  140. Private Sub SGGridEmployee_DblClick()
  141. ' / -----------------------------------------------------------------------------------------------
  142.     '/ กำหนดให้อยู่ที่หลัก 0 ก่อน
  143.     SGGridEmployee.Col = 0
  144.     ' / อ่านค่าจากหลัก 0 และจากแถวที่เลือก (โดยไม่ต้องระบุแถวเลย)
  145.     MsgBox "EmployeePK = " & Val(SGGridEmployee.Text)
  146. End Sub

  147. ' / -----------------------------------------------------------------------------------------------
  148. ' / ตัวแปร blnSearch เป็นออพชั่น หากไม่มีการส่งค่ามา ให้ถือว่ามันมีค่าเป็น FALSE
  149. ' / หาก blnSearch = False เป็นการแสดงผลข้อมูลทั้งหมด โดยไม่ต้องทำการค้นหา
  150. ' / หาก blnSearch = True เป็นการค้นหาข้อมูล ตามเงื่อนไขที่อยู่ใน TextBox
  151. Sub SGGridEmployeeBound(Optional blnSearch As Boolean = False)
  152. ' / -----------------------------------------------------------------------------------------------
  153.     With SGGridEmployee
  154.         '.Columns.RemoveAll False
  155.         .DataRowCount = 0
  156.         ' / หลัก 0 นี่คือหลักที่แสดงหมายเลขแถวครับ
  157.         .Rows.At(0).Height = 420
  158.         .ColumnClickSort = True
  159.         .Columns(0).Width = 400
  160.         .Columns(0).AllowSizing = False
  161.         .Columns(0).Hidden = True
  162.         .RowNumbering = False
  163.     End With
  164.    
  165.     '/ สร้าง Instance ขึ้นมาใหม่ พร้อมตัดการเชื่อมต่อเดิมทิ้ง (หากลืม)
  166.     Set RS = New ADODB.Recordset
  167.    '/ blnSearch = True คือการค้นหาข้อมูล
  168.     If blnSearch Then
  169.         '// Bound Data จะแสดงผลโดยจัดเรียงข้อมูลตามฟิลด์ ที่อยู่ใน Query
  170.         '// หากฟิลด์ใดที่เราไม่ต้องการให้แสดงผล ต้องไปตั้งค่าหลักนั้นใน SharpGrid ให้ Hidden = True
  171.         Statement = _
  172.             " SELECT tblEmployee.EmployeePK, tblEmployee.EmployeeID, tblEmployee.EmployeeName, tblPosition.PositionName, " & _
  173.             " tblDepartment.DepartmentName, tblEmployee.DateStart, tblEmployee.Salary " & _
  174.             " FROM (tblEmployee INNER JOIN tblDepartment ON tblEmployee.DepartmentFK = tblDepartment.DepartmentPK) INNER JOIN " & _
  175.             " tblPosition ON tblEmployee.PositionFK = tblPosition.PositionPK " & _
  176.             " WHERE " & _
  177.             " ([EmployeeID] " & " Like '%" & Trim(txtSearch.Text) & "%'" & " OR " & _
  178.             " [EmployeeName] " & " Like '%" & Trim(txtSearch.Text) & "%'" & " OR " & _
  179.             " [PositionName] " & " Like '%" & Trim(txtSearch.Text) & "%'" & " OR " & _
  180.             " [DepartmentName] " & " Like '%" & Trim(txtSearch.Text) & "%'" & ")" & _
  181.             " ORDER BY EmployeeID, EmployeeName "
  182.    
  183.     '// blnSearch = False คือ แสดงผลทั้งหมด
  184.     Else
  185.         Statement = _
  186.             " SELECT tblEmployee.EmployeePK, tblEmployee.EmployeeID, tblEmployee.EmployeeName, tblPosition.PositionName, " & _
  187.             " tblDepartment.DepartmentName, tblEmployee.DateStart, tblEmployee.Salary " & _
  188.             " FROM (tblEmployee INNER JOIN tblDepartment ON tblEmployee.DepartmentFK = tblDepartment.DepartmentPK) INNER JOIN " & _
  189.             " tblPosition ON tblEmployee.PositionFK = tblPosition.PositionPK " & _
  190.             " ORDER BY DepartmentName, EmployeeID "
  191.     End If
  192.    
  193.     ' ============ IMPORTANT ==========
  194.     ' / ระบุให้ทำงานในโหมด BOUND DATA
  195.     SGGridEmployee.DataMode = sgBound
  196.     ' ==================================
  197.     RS.CursorLocation = adUseClient
  198.     '// adOpenForwardOnly และ adLockReadOnly เป็นการอ่านข้อมูลเดินหน้าอย่างเดียว จะมีความเร็วในการนำข้อมูลมาแสดงผล
  199.     RS.Open Statement, ConnDB, adOpenForwardOnly, adLockReadOnly, adCmdText
  200.    
  201.     '/ =============== ผูกเข้ากับตาราง RecordSet ================
  202.     '/ เหมือนการกำหนด DataSource ใน VB.NET
  203.     Set SGGridEmployee.DataSource = RS
  204.     '/ ====================================================
  205.    
  206.     '/ แสดงจำนวนรายการ
  207.     SGGridEmployee.DataRowCount = RS.RecordCount
  208.     If RS.RecordCount >= 0 Then
  209.         lblSearch.Caption = "[จำนวน : " & RS.RecordCount & " รายการ.]"
  210.     Else
  211.         lblSearch.Caption = "[จำนวน : 0" & " รายการ.]"
  212.     End If
  213.     '// จัดรูปแบบหลักใหม่
  214.     Call SetupSGGrid
  215.     ' / Always must be disconnect RecordSet
  216.     RS.Close:   Set RS = Nothing
  217. End Sub

  218. ' / -----------------------------------------------------------------------------------------------
  219. ' / การตั้งค่าหลักต่างๆ ต้องให้ตรงกันกับฟิลด์ข้อมูลในการ Query จากโปรแกรมย่อย SGGridEmployeeBound
  220. Private Sub SetupSGGrid()
  221. ' / -----------------------------------------------------------------------------------------------
  222.     '/ การกำหนดโหมด Bound Data ทำให้เกิดการนับจำนวนหลักเอาไว้ให้เรียบร้อย
  223.     ' ================ Setup SGGrid ====================
  224.     With SGGridEmployee
  225.         '// Start Columns 1 โดยใช้ค่า Index ที่เรียงมาจาก Query
  226.         With .Columns(1)
  227.             '/ แสดงผลหัวข้อหลัก
  228.             .Caption = "EmployeePK"
  229.             '/ ความกว้างเป็น 0
  230.             .Width = 0
  231.             '/ ไม่ยอมให้ปรับขนาดความกว้างของหลัก
  232.             .AllowSizing = False
  233.             '/ เอาไปซ่อนจากสายตาผู้ใช้ไปเลย กรณีที่เราไม่ต้องการให้หลักนี้มีการแสดงผลให้ผู้ใช้งานเห็น
  234.             .Hidden = True
  235.         End With
  236.         ' 2
  237.         With .Columns(2)
  238.             .Caption = "รหัสพนักงาน"
  239.             '/ ตั้งค่าการแสดงตำแหน่งของข้อมูล
  240.             .Style.TextAlignment = sgAlignLeftCenter
  241.             .HeadingStyle.TextAlignment = sgAlignLeftCenter
  242.             .AllowSizing = True
  243.         End With
  244.         ' 3
  245.         With .Columns(3)
  246.             .Caption = "ชื่อ - นามสกุล"
  247.             .Style.TextAlignment = sgAlignLeftCenter
  248.             .HeadingStyle.TextAlignment = sgAlignLeftCenter
  249.             .AllowSizing = True
  250.         End With
  251.         ' 4
  252.         With .Columns(4)
  253.             .Caption = "ตำแหน่ง"
  254.             .Style.TextAlignment = sgAlignLeftCenter
  255.             .HeadingStyle.TextAlignment = sgAlignLeftCenter
  256.             .AllowSizing = True
  257.         End With
  258.         ' 5
  259.         With .Columns(5)
  260.             .Caption = "แผนก"
  261.             .Style.TextAlignment = sgAlignLeftCenter
  262.             .HeadingStyle.TextAlignment = sgAlignLeftCenter
  263.             .AllowSizing = True
  264.         End With
  265.         ' 6
  266.         With .Columns(6)
  267.             .Caption = "วันที่เริ่มทำงาน"
  268.             .Style.TextAlignment = sgAlignRightCenter
  269.             .HeadingStyle.TextAlignment = sgAlignRightCenter
  270.             .Style.Format = "dd/mm/yyyy"
  271.             .AllowSizing = True
  272.         End With
  273.         ' ใช้ชื่อฟิลด์ข้อมูลแทนหมายเลข Index แทนก็ได้
  274.         With .Columns("Salary")
  275.             .Caption = "เงินเดือน"
  276.             .Style.TextAlignment = sgAlignRightCenter
  277.             .HeadingStyle.TextAlignment = sgAlignRightCenter
  278.             .DataType = sgtCurrency
  279.             .Style.Format = "#,##0.00"
  280.             .AllowSizing = False
  281.         End With
  282.         '
  283.     End With
  284. End Sub

  285. ' / -----------------------------------------------------------------------------------------------
  286. ' / กดปุ่ม Refresh เพื่อทำการแสดงผลข้อมูลทั้งหมด
  287. Private Sub cmdRefresh_Click()
  288. ' / -----------------------------------------------------------------------------------------------
  289.     Call SGGridEmployeeBound(False)
  290.     With SGGridEmployee
  291.         .LeftCol = 0
  292.         .SetFocus
  293.         Sendkeys "{RIGHT}"
  294.     End With
  295.     txtSearch.Text = ""
  296. End Sub

  297. ' / -----------------------------------------------------------------------------------------------
  298. ' / เมื่อคลิ๊กที่ปุ่มค้นหา
  299. Private Sub cmdSearch_Click()
  300. ' / -----------------------------------------------------------------------------------------------
  301.    
  302.     ' / ตัดคำสงวน (Reserved Word) ที่มีปัญหากับฐานข้อมูลออกไป
  303.     txtSearch.Text = Replace(txtSearch.Text, "'", "")
  304.     txtSearch.Text = Replace(txtSearch.Text, "%", "")
  305.     txtSearch.Text = Replace(txtSearch.Text, "*", "")
  306.     If Trim(txtSearch.Text) = "" Or Len(txtSearch.Text) = 0 Then Exit Sub
  307.    
  308.     '/ ทำการค้นหาข้อมูล
  309.     Call SGGridEmployeeBound(True)
  310.    
  311. End Sub

  312. Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
  313.     If KeyCode = vbKeyDown Then Sendkeys "{TAB}"
  314.     If KeyCode = vbKeyUp Then Sendkeys "+{TAB}"
  315. End Sub

  316. Private Sub txtSearch_KeyPress(KeyAscii As Integer)
  317.     '// เกิดการกด Enter (ASCII Code มีค่าเท่ากับ 13 ฐาน 10)
  318.     If KeyAscii = 13 Then
  319.         Call cmdSearch_Click
  320.         '// ปิดเสียงด้วยการกำหนดให้ KeyAscii = 0 หรือไม่มีการกดคีย์ใดๆ
  321.         KeyAscii = 0
  322.     End If
  323. End Sub

  324. Private Sub cmdRefresh_KeyDown(KeyCode As Integer, Shift As Integer)
  325.     If KeyCode = vbKeyDown Or KeyCode = vbKeyRight Then Sendkeys "{TAB}"
  326.     If KeyCode = vbKeyUp Or KeyCode = vbKeyLeft Then Sendkeys "+{TAB}"
  327. End Sub

  328. Private Sub Form_Resize()
  329.     If Me.ScaleWidth < 120 Or Me.ScaleHeight < 120 Then Exit Sub
  330.     fraData.Height = Me.ScaleHeight - 60
  331.     fraData.Move 15, 0, Me.ScaleWidth - 15
  332.     SGGridEmployee.Move 15, 615, fraData.Width - (SGGridEmployee.Left) - 15, fraData.Height - 690
  333. End Sub

  334. Private Sub Form_Unload(Cancel As Integer)
  335. On Error Resume Next
  336.     If Dir$(App.Path & "\*.tmp") <> "" Then Kill App.Path & "\*.tmp"
  337.     '/ ปิดการเชื่อมต่อกับฐานข้อมูล
  338.     Call CloseDataBase
  339.     End
  340. End Sub
คัดลอกไปที่คลิปบอร์ด

มาดูโค้ดในส่วนของโมดูลหลักที่เชื่อมต่อกับฐานข้อมูล ... (modDataBase.bas หรือ โมดูลหากิน)
  1. ' / -----------------------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : [email protected]
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand only)
  6. ' / Facebook: https://www.facebook.com/commonindy (World Wide)
  7. ' /
  8. ' / Purpose : Function to connect the MS Access DataBase.
  9. ' / Microsoft Visual Basic 6.0 Service Pack 6 + MS Access 2003
  10. ' / -----------------------------------------------------------------------------------------------
  11. Option Explicit

  12. '// ก่อนใช้งานต้องเลือก MDAC 2.8 มาจาก Project --> Refernces ก่อน
  13. Global ConnDB As New ADODB.Connection
  14. Global RS As New ADODB.Recordset    ' / RecordSet หลัก
  15. Global DS As New ADODB.Recordset    ' / RecordSet สำรอง
  16. Global RstData As New ADODB.Recordset   ' / ใช้ในการพิมพ์รายงาน
  17. Global Statement As String
  18. Global SQLStmt As String

  19. ' / -----------------------------------------------------------------------------------------------
  20. Public Sub OpenDataBase()
  21. On Error GoTo Err_Handler
  22.     Dim DB_File As String
  23.     DB_File = App.Path
  24.     If Right$(DB_File, 1) <> "" Then DB_File = DB_File & ""
  25.     DB_File = DB_File & "DataBase.MDB"
  26.     ' Open a connection.
  27.     Set ConnDB = New ADODB.Connection
  28.     ConnDB.ConnectionString = _
  29.         "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  30.         "Data Source=" & DB_File & ";" & _
  31.         "Persist Security Info=False"
  32.         '" Jet OLEDB:Database Password=" & "password" & ";" '& _
  33.         '" Engine Type=5;"
  34.     ConnDB.Open
  35.     Exit Sub
  36. Err_Handler:
  37.     MsgBox "Open Database Error : " & vbCrLf & Err.Number & " " & Err.Description
  38.     End
  39. End Sub

  40. Public Sub CloseDataBase()
  41.     ' ตรวจสอบว่ามีการเชื่อมโยง - Connect ข้อมูลหรือไม่
  42.     If ConnDB.State = adStateOpen Then
  43.         ConnDB.Close
  44.         Set ConnDB = Nothing
  45.     End If
  46. End Sub

  47. ' / -----------------------------------------------------------------------------------------------
  48. ' / ฟังค์ชั่นแก้ไขในการ SendKeys ซึ่งใน Windows 8+ 64 บิท จะมีปัญหา
  49. Public Sub Sendkeys(Text As String, Optional Wait As Boolean = False)
  50.     Dim WshShell As Object
  51.     Set WshShell = CreateObject("Wscript.shell")
  52.     WshShell.Sendkeys Text, Wait
  53.     Set WshShell = Nothing
  54. End Sub
คัดลอกไปที่คลิปบอร์ด

Conslusion: อย่าเพียงแต่ลอกโค้ดแล้วไปสั่งรันให้ผ่านเท่านั้นนะครับ ต้องพยายามทำความเข้าใจในแต่ละชุดแถวคำสั่งที่สำคัญเอาไว้ให้ดีด้วย ซึ่งแอดมินได้พยายามเขียนคอมเมนท์ อธิบายในส่วนที่สำคัญๆเอาไว้ให้ได้อ่านกัน การใช้ Debugger เข้ามาช่วย จะทำให้เราสามารถเรียนรู้และเข้าใจหลักการทำงานต่างๆของโค้ดได้อย่างไม่ยากเย็น ... ขอให้โชคดี

Download SharpGrid ActiveX/COM Grid Control (เฉพาะสมาชิกเท่านั้น)
ดาวน์โหลดโค้ดต้นฉบับ VB6 ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

52

โพสต์

233

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
233
โพสต์ 2020-7-16 09:05:43 | ดูโพสต์ทั้งหมด

        With .Styles("InactiveSelection")
            .BackColor = RGB(0, 170, 0)
            .ForeColor = vbWhite
            .BkgStyle = sgCellBkgSolid
        End With

กำลังหา InactiveSelection ตัวนี้อยู่ ขอบคุณมากครับผม
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2020-9-28 20:38 , Processed in 0.252561 second(s), 4 queries , File On.

Powered by Discuz! X3.3 R20170401, Rev.54

© 2001-2017 Comsenz Inc.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้