hieuvn > 17-01-18, 05:02 PM
tranthanhan1962 > 20-01-18, 11:28 PM
(17-01-18, 04:08 PM)ongke0711 Đã viết: Không biết anh lưu thông số ID1 -> ID2 vào biến hay vào table nhưng em nghĩ lưu vào table sẽ ổn định hơn biến. Biến có nhiều rủi ro mất khi bộ nhớ máy bị trục trặc gì dó. Lưu vào table và máy con chạy timer check cái trường ID này để đồng bộ.Thế này nhé. Trên table chính ngoài field ID còn có field IDhienhanh (ID hiện hành). Trên form chính có record source table chính tạo code cho Form_Current. Khi form chính của máy chính thay đổi record sẽ update giá trị tất cả các record của field IDhienhanh = giá trị field ID (có nghĩa dù trên form chính của máy con đang nằm trên record nào thì thì khi refresh giá trị của field IDhienhanh vẫn là giá trị của form ID trên form chính của máy chính).
ongke0711 > 21-01-18, 12:23 PM
maidinhdan > 21-01-18, 02:10 PM
(20-01-18, 11:28 PM)tranthanhan1962 Đã viết: Thế này nhé. Trên table chính ngoài field ID còn có field IDhienhanh (ID hiện hành). Trên form chính có record source table chính tạo code cho Form_Current. Khi form chính của máy chính thay đổi record sẽ update giá trị tất cả các record của field IDhienhanh = giá trị field ID (có nghĩa dù trên form chính của máy con đang nằm trên record nào thì thì khi refresh giá trị của field IDhienhanh vẫn là giá trị của form ID trên form chính của máy chính).
Để refresh cho form chính của máy con máy con sử dụng một subform có Timer Interval, Nhiệm vụ Form_Timer của subform này là chạy code Table chínnh.FindFirst của field ID theo field IDhienhanh. Sử dụng Form_Timer trên subform vì nếu để Form_Timer trên form chính của máy con thì form sẽ bị gật giám khảo không chấm điểm được.
Lý thuyết như vậy là đúng và thực tế nó cũng xử lý được việc này. Nhưng vấn đề là có lúc nó chuyển được theo form chính có lúc lại nằm ỳ ra không chịu chuyển, giám khảo này chấm được còn giám khảo kia thì ngồi chờ rụng râu mà nó vẫn chưa chịu chuyển đến record hiện hành. Chấm thi trước bàn dân thiên hạ mà như thế này thì cùi bắp quá đi . Hiện giờ tôi phải cho máy con thêm dàn nút navigation. Nếu nó không tự chuyển thì giám khảo chuyển nên phần mềm có biệt danh là <phần mềm cùi bắp> Nói chung thì ngoài giám khảo, tôi và ban tổ chức thì không ai biết vụ này vì máy chiếu chỉ hiện thị form chính của máy chính chứ không hiển thị form chính của máy con. Nhưng mà vẫn thấy quê quê vì không xử lý được.
Option Compare Database
Option Explicit
' Khai bao bien Toan cuc
Public Cnn As ADODB.Connection 'hoac Global cnn As ADODB.Connection
Public Rst As ADODB.Recordset 'hoac Global Rst As ADODB.Recordset
' Viet den 22/11/2017
Private Const PassData As String = ";Jet OLEDB:Database Password=111444;"
'---------------------------------------------------------------------------------------
' Procedure/ Ten thu tuc : KetnoiCnn
' Tao tren may tinh User : DAN_WIN10PRO
' Author/ Nguoi khoi tao : maidinhdan@gmail.com
' Date/Ngay tao : 18/11/2017
' Purpos/Mo ta :
'---------------------------------------------------------------------------------------
Function KetnoiCnn() As Boolean
On Error GoTo Loi
Set Cnn = New ADODB.Connection
Dim LinkFileData As String
LinkFileData = CurrentProject.path & "\Danh_muc_ho_so\Data\DataTest.mdb"
Dim ChuoiKetNoi As String
Dim Link As String: Link = LinkFileData & PassData
'ChuoiKetNoi dung cho Access co pass
ChuoiKetNoi = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Link
'On Error Resume Next Su dung cai nay neu khong dung On Error Goto Loi
Cnn.ConnectionString = ChuoiKetNoi
Cnn.CursorLocation = adUseClient ' Khong khai bao cai nay thi khi chay: Set .ActiveConnection = Nothing se loi
Cnn.Open
' Thuoc tinh cnn.State: 1 Doi tuong mo
Do While Cnn.State <> 1
DoEvents
If Cnn.State = 0 Then Exit Function
Loop
' Debug.Print "___Ket noi thanh cong_____________________________"
KetnoiCnn = True
Exit_Loi:
Exit Function
Loi:
MsgBox "Ket noi that bai, Vui long kiem tra Server va thong tin ket noi", vbInformation, "Thong bao"
KetnoiCnn = False
Set Cnn = Nothing
Call DemSoLoiDeThoat
Resume Exit_Loi
End Function
'---------------------------------------------------------------------------------------
' Procedure : TatKetnoiCnn
' Author : Hen Dan
' Date : 18/04/2017
' Purpose : Dung cho SQL Server/Access
'---------------------------------------------------------------------------------------
'
Sub TatKetnoiCnn()
On Error Resume Next
Set Cnn = Nothing
' Debug.Print "_________________________Dong ket noi Connect_____________"
End Sub
'---------------------------------------------------------------------------------------
' Procedure/ Ten thu tuc : TatKetnoiRst
' Tao tren may tinh User : DAN_WIN10PRO
' Author/ Nguoi khoi tao : maidinhdan@gmail.com
' Date/Ngay tao : 18/11/2017
' Purpos/Mo ta :
'---------------------------------------------------------------------------------------
Sub TatKetnoiRst()
On Error Resume Next
Rst.Close
Set Rst = Nothing
' Debug.Print "_________________________Dong ket noi Rst_____________"
End Sub
Function KetnoiADORst(ChuoiSQL As String, Optional ChiXem As Boolean = True) As ADODB.Recordset
On Error GoTo Loi
If KetnoiCnn = True Then
Set Rst = New ADODB.Recordset
With Rst
Set .ActiveConnection = Cnn
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.Source = ChuoiSQL 'Voi ADODB, Like '*abc*' phai la '%abc%'
.Open
' Trien khai ham Them/Sua/Xoa khong the dung Set .ActiveConnection = Nothing
If ChiXem = True Then
Set .ActiveConnection = Nothing 'Luu y: Bo dong nay neu la ThemXoaSua. Neu them dong nay chay loi thi trong Ham KetNoiSerVer phai them cnn.CursorLocation = adUseClient
End If
End With
Set KetnoiADORst = Rst
End If
Exit_Loi:
TatKetnoiCnn
Exit Function
Loi:
DoCmd.RunMacro "mcthongbao.15" 'MsgBox "Ket noi RST that bai, Vui long kiem tra String SQL", vbInformation, "Thong bao"
Resume Exit_Loi
End Function
Function HienThiLenFormChamdiem(Tenform As Form, IDCanHienThi As String)
Set Tenform.Recordset = KetnoiADORst("SELECT * FROM tblBangdiem WHERE SoTT=" & Val(IDCanHienThi)) 'Hien Thi de ThemXoaSua
End Function
tranthanhan1962 > 21-01-18, 03:18 PM
(21-01-18, 02:10 PM)maidinhdan Đã viết: Anh áp dụng WithEvents xem...Thank maidinhdan. Giám khảo ngồi đối diện với màn hình máy chiếu nên khi máy chính đổi record chấm thi thì giám khảo cũng biết chuyển đến record nào nên cũng không cần phải thông báo. Trên form máy chính có lệnh refresh liên tục đến khi nào tất cả các ô điểm của GK xuất hiện điểm đầy đủ mới chuyển record mới nên vấn đề làm thủ công thì rất OK. Vấn đề là mình muốn xử lý Automatic
tranthanhan1962 > 21-01-18, 03:23 PM
(21-01-18, 12:23 PM)ongke0711 Đã viết: Nếu vậy có thể vấn đề nằm ở FindFirst. Anh có thử đổi qua DLookup chưa? Tốc độ DLookup cũng nhanh hơn recordset.DLookup chỉ lấy giá trị để hiển thị lên máy con. Còn FindFirst thì máy con chuyển đến đúng record trên máy chính (máy chiếu). Khi GK chấm điểm sẽ refresh vào table, máy chính refresh sẽ hiện thị điểm từ table lên form trên máy chiếu
tranthanhan1962 > 21-01-18, 05:31 PM