• [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN
  • RE: [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN

    hieuvn > 17-01-18, 05:02 PM

    Đồng bộ qua mạng Lan thì hơi chuối, thực ra form_timer chỉ làm nhiệm vụ Refresh thôi. nếu là tôi thì sẽ xử lý như sau: tạo 1 nút bấm: chấm điểm: khi ông giám khảo nhập điểm vào textbox và bấm vào nút chấm điểm thì nó sẽ làm 2 nhiệm vụ:
    1, lưu điểm lên vào be
    2, refresh lại function lấy câu hỏi.
    không cần phải dùng timer, vì sao? vì khi giám khảo chấm điểm xong mới sang câu khác chứ, nếu một trong những giám khảo chưa chấm điểm thì ông ngồi máy chính cũng chuyển câu hỏi luôn sao?
    chắc gạo hơn thì thiết kế thêm 1 nút refresh.
  • RE: [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN

    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).
    Để 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  021 . 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> 015  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.
  • RE: [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN

    ongke0711 > 21-01-18, 12:23 PM

    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.
  • RE: [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN

    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  021 . 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> 015  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.

    Anh áp dụng WithEvents xem
    * Mở form máy chủ trước,rồi mở form máy con.
    * Áp dụng RaiseEvent ThaydoiThongbao("Noi dung thon bao") để cho giámk khảo biết là có câu hỏi mơới để giámkhảo tự nhấn nút chuyển câu hỏi, tránh tình trạng, máy chủ chuyển câu hỏi mà giámkhảo chưa chấm bài thì không hay.

    * Về load câu hỏi mới, nên dùng ADO để load ID câu hỏi về bằng các hàm sau:
    1. Kết nối .

    Mã PHP:
    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;"

    '---------------------------------------------------------------------------------------
    ProcedureTen thu tuc KetnoiCnn
    ' Tao tren may tinh User : DAN_WIN10PRO
    AuthorNguoi 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 chaySet .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

    '---------------------------------------------------------------------------------------
    ProcedureTen thu tuc TatKetnoiRst
    ' Tao tren may tinh User : DAN_WIN10PRO
    AuthorNguoi 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 StringOptional 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 

    2. Load ID câu hỏi cho máy con nên dùng Class load
    * Lý do:
    + Load ID về;
    + Giám khảo chấm xong, dùng class này để lưu
    + Lấy được dữ liệu là ngắt kêết nối ngay, để cho nhiêều máy truy xuất nhanh.


    * Code:
    1. Dưa vao code kết nối trên Tạo hàm xem máy chủ đang mở ID mấy
    2. Load ID đó về máy con

    Mã PHP:
    Function HienThiLenFormChamdiem(Tenform As FormIDCanHienThi As String
    Set Tenform.Recordset KetnoiADORst("SELECT * FROM tblBangdiem WHERE SoTT=" Val(IDCanHienThi)) 'Hien Thi de ThemXoaSua
    End Function 

    3. Sự kiện nhấn nút lưu của máy con khi đã chấm xong.


    * Rât nhiêều công việc để làm... em chỉ xin đến đây thôi.
  • RE: [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN

    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  007
  • RE: [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN

    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
  • RE: [S.O.S] Điều khiển hiển thị record trên form qua mạng LAN

    tranthanhan1962 > 21-01-18, 05:31 PM

    Đã xử lý xong. Hóa ra vấn đề trục trặc kỹ thuật không phải do phần mềm mà là do phần cứng. Đổi wifi router mới chạy OK. Cám ơn các bạn đã hỗ trợ.