• Tại sao Ado recordset inner join readonly
  • RE: Tại sao Ado recordset inner join readonly

    tt1212 > 27-10-15, 10:57 PM

    Bạn chỉ mới hiểu được khoảng 10 % của Ado thối
    Theo mô hình lập trinh Ado ở đây bạn mới chi dùng đến
    Adodb.recordset
    adodb.connection

    bạn chưa sử dụng adodb.command........
    Thì làm sao bạn nắm giữ được dữ liệu và phân phối dữ liệu
    Nếu viết theo ADo đúng nghĩa thì sẽ loại bỏ được xung đôt dữ liệu và dữ liệu được phân cấp nhiều giai đoạn
  • RE: Tại sao Ado recordset inner join readonly

    thucgia > 28-10-15, 01:51 PM

    (27-10-15, 10:57 PM)tt1212 Đã viết: Bạn chỉ mới hiểu được khoảng 10 % của Ado thối
    Theo mô hình lập trinh Ado ở đây bạn mới chi dùng đến
    Adodb.recordset
    adodb.connection

    bạn chưa sử dụng adodb.command........
    Thì làm sao bạn nắm giữ được dữ liệu và phân phối dữ liệu
    Nếu viết theo ADo đúng nghĩa thì sẽ loại bỏ được xung đôt dữ liệu và dữ liệu được phân cấp nhiều giai đoạn

    Theo mình hiểu thì đối tượng command chi làm trong sáng, an toàn (tránh sql injection nhưng cái này thì tụi web mới cần) them cú pháp thao tác dữ liệu thôi, còn lại như

    Mã:
    Private Const tbl As String = "tblusers"
    Private Const f1 As String = "UserID"
    Private Const f2 As String = "UserName"
    Private Const f3 As String = "Password"
    Private Const f4 As String = "Role"
    Function Them(ByRef nv As UserDto) As Long
       On Error GoTo ErrorHandler
       Dim cmd As ADODB.Command
       Dim rst As ADODB.Recordset
       Dim Param As ADODB.Parameter
       Set cmd = New ADODB.Command
       With cmd
          .ActiveConnection = CurrentProject.Connection
          .CommandText = "INSERT INTO  " & tbl & " ([" & f2 & "],[" & f3 & "],[" & f4 & "]) values(? , ? , ? )"
       End With
       Set Param = cmd.CreateParameter("x", adVarChar, adParamInput, 20)
       Param.Value = nv.UserName
       cmd.Parameters.Append Param
       Set Param = cmd.CreateParameter("y", adVarChar, adParamInput, 20)
       Param.Value = nv.Password
       cmd.Parameters.Append Param
       Set Param = cmd.CreateParameter("z", adVarChar, adParamInput, 20)
       Param.Value = nv.Role
       cmd.Parameters.Append Param
       
       cmd.Execute
       Set rst = New ADODB.Recordset
       rst.Open "select @@identity as NewID from tblusers", CurrentProject.Connection
       'MsgBox rst!NewID
       Them = 0
    ExitSub:
           'Clear
           Set cmd = Nothing
           Set rst = Nothing
           Set Param = Nothing
           Exit Function
    ErrorHandler:
           MsgBox "sfsf" & Err.Number & " - " & Err.Description
           Resume ExitSub
    End Function
    Public Sub Xoa(id As Long)
           On Error GoTo ErrorHandler
           Dim cmd As ADODB.Command
           Dim rst As ADODB.Recordset
           Dim Param As ADODB.Parameter
           Set cmd = New ADODB.Command
           With cmd
             .ActiveConnection = CurrentProject.Connection
             .CommandText = "delete from " & tbl & " where UserID=?"
           End With
           Set Param = cmd.CreateParameter("@UserID", adInteger, adParamInput)
           Param.Value = id
           cmd.Parameters.Append Param
           cmd.Execute
    ExitSub:
           'Clear
           Set rst = Nothing
           Set cmd = Nothing
           Set Param = Nothing
           Exit Sub
    ErrorHandler:
           MsgBox "sfsf" & Err.Number & " - " & Err.Description
           Resume ExitSub
    End Sub

    giữa code trên và code dạng

    rs.addnew
    ....
    rs.update

    or

    rs.edit
    ....
    rs.update


    thì tương đương, Việc xung đột là do trình độ của người viết chương trình chưa tới nơi thôi.
  • RE: Tại sao Ado recordset inner join readonly

    MTNQ > 29-10-15, 06:58 PM

    (27-10-15, 02:03 PM)thucgia Đã viết: -1,Nhưng còn vấn đề table có primary key hoặc autonumber thì chắc là phức tạp hở bạn.

    -2,Nếu ADO ngon rồi thì tại sao Microsoft ra cái thằng ADO.net để làm gì!!!!
    -3, Bạn có nghiên cứu cái này chưa?

    Mã:
    Dim rstADO As ADODB.Recordset
    Dim fld As ADODB.Field

    Set rstADO = New ADODB.Recordset
    With rstADO
       .Fields.Append "EmployeeID", adInteger, , adFldKeyColumn
       .Fields.Append "FirstName", adVarChar, 10, adFldMayBeNull
       .Fields.Append "LastName", adVarChar, 20, adFldMayBeNull
       .Fields.Append "Email", adVarChar, 64, adFldMayBeNull
       .Fields.Append "Include", adInteger, , adFldMayBeNull
       .Fields.Append "Selected", adBoolean, , adFldMayBeNull

       .CursorType = adOpenKeyset
       .CursorLocation = adUseClient
       .LockType = adLockPessimistic
       .Open
    End With
    link : http://www.databasejournal.com/features/...rdsets.htm

    Mình thắc mắc là tại sao nó không cho add dữ liệu ? thk.

    - ps định phân trang giống web luôn hả?

    -1,Nhưng còn vấn đề table có primary key hoặc autonumber thì chắc là phức tạp hở bạn.
    -  autonumber thì auto rùi đâu cần làm thêm gì nữa  014
    - primary key thì đúng là phức tạp khi viết hàm tạo mã số

    -2,Nếu ADO ngon rồi thì tại sao Microsoft ra cái thằng ADO.net để làm gì!!!!
    Câu này quá khó, mong được học hỏi từ người có kinh nghiệm lập trình như bác 015

    -3, Bạn có nghiên cứu cái này chưa?
    MTNQ test thấy OK mà:

    Mã:
    Sub test()
       Dim rstADO As New ADODB.Recordset
       Dim fld As ADODB.Field
       Set rstADO = New ADODB.Recordset
       With rstADO
           .Fields.Append "EmployeeID", adInteger, , adFldKeyColumn
           .Fields.Append "FirstName", adVarChar, 10, adFldMayBeNull
           .Fields.Append "LastName", adVarChar, 20, adFldMayBeNull
           .Fields.Append "Email", adVarChar, 64, adFldMayBeNull
           .Fields.Append "Include", adInteger, , adFldMayBeNull
           .Fields.Append "Selected", adBoolean, , adFldMayBeNull
           .CursorType = adOpenKeyset
           .CursorLocation = adUseClient
           .LockType = adLockPessimistic
           .Open
           
       End With
       
       Dim FieldsArray As Variant, ValuesArray As Variant
       FieldsArray = Array("EmployeeID", "FirstName", "LastName", "Email", "Include", "Selected")
       ValuesArray = Array(1, "F", "L", "E", 1, 0)
       rstADO.AddNew FieldsArray, ValuesArray
       For Each fld In rstADO.Fields
           Debug.Print fld.Name & "=" & fld.Value
       Next
       rstADO.Close
       Set rstADO = Nothing
    End Sub


    - ps định phân trang giống web luôn hả?
    Câu này chưa hiểu  016
  • RE: Tại sao Ado recordset inner join readonly

    MTNQ > 29-10-15, 07:14 PM

    (27-10-15, 10:57 PM)tt1212 Đã viết: Bạn chỉ mới hiểu được khoảng 10 % của Ado thối
    Theo mô hình lập trinh Ado ở đây bạn mới chi dùng đến
    Adodb.recordset
    adodb.connection

    bạn chưa sử dụng adodb.command........
    Thì làm sao bạn nắm giữ được dữ liệu và phân phối dữ liệu
    Nếu viết theo ADo đúng nghĩa thì sẽ loại bỏ được xung đôt dữ liệu và dữ liệu được phân cấp nhiều giai đoạn
    -"Nếu viết theo ADo đúng nghĩa thì sẽ loại bỏ được xung đôt dữ liệu và dữ liệu được phân cấp nhiều giai đoạn"
     Ý của MTNQ là cần tính đến khả năng xung đột dữ liệu khi dùng UpdateBatch, bác có kinh nghiệm về phương thức này thì chia sẻ cùng MTNQ và mọi nghười nhé.

    -"Bạn chỉ mới hiểu được khoảng 10 % của Ado thối..."
    MTNQ chỉ làm ví dụ về UpdateBatch
    Kiến thức của MTNQ còn nông cạn, mong bác chỉ giáo thêm 015
  • RE: Tại sao Ado recordset inner join readonly

    tt1212 > 29-10-15, 11:33 PM

    xung dot du lieu la do trung khoa chinh, vi vay khi tao khoa chinh nen lay them ma may hoac ma men thi chac chan se kong bao gio bị trung khoa,
  • RE: Tại sao Ado recordset inner join readonly

    tt1212 > 29-10-15, 11:52 PM

    Mình đang vướng mắc ở một vấn đề mọi người xem sao
    Trong subform mình muốn tạo conterniufỏm để tạo nhiều dóng
    Trong đó mình lấy dữ liệu từ tbnhom có trướng mã nhóm và tên nhóm
    Bảng này mính lấy từ csdl
    Mình thiết kế một fom trên đó minh tạo một text box và mình muốn gán recoset cho fom thông qua thu luc kết nối dữ liệu
    Khó ở vấn đề là sound của text box mà mình đặt control source = manhom thì lại không gõ vào  dữ liệu mới
    Còn nếu để trống thì sửa được nhưng nhiều dọng lại có dữ liệu giống nhau và chỉ hiện thi có một đòng trong bảng dữ liệu vậy phải giải quyết làm sao đây
  • RE: Tại sao Ado recordset inner join readonly

    tt1212 > 29-10-15, 11:55 PM

    Mã PHP:
    Private Const tbl As String "tblusers"
    Private Const f1 As String "UserID"
    Private Const f2 As String "UserName"
    Private Const f3 As String "Password"
    Private Const f4 As String "Role"
    Function Them(ByRef nv As UserDto) As Long
      On Error 
    GoTo ErrorHandler
      Dim cmd 
    As ADODB.Command
      Dim rst 
    As ADODB.Recordset
      Dim Param 
    As ADODB.Parameter
      Set cmd 
    = New ADODB.Command
      With cmd
         
    .ActiveConnection CurrentProject.Connection
         
    .CommandText "INSERT INTO  " tbl " ([" f2 "],[" f3 "],[" f4 "]) values(? , ? , ? )"
      End With
      Set Param 
    cmd.CreateParameter("x"adVarCharadParamInput20)
      Param.Value nv.UserName
      cmd
    .Parameters.Append Param
      Set Param 
    cmd.CreateParameter("y"adVarCharadParamInput20)
      Param.Value nv.Password
      cmd
    .Parameters.Append Param
      Set Param 
    cmd.CreateParameter("z"adVarCharadParamInput20)
      Param.Value nv.Role
      cmd
    .Parameters.Append Param
      
      cmd
    .Execute
      Set rst 
    = New ADODB.Recordset
      rst
    .Open "select @@identity as NewID from tblusers"CurrentProject.Connection
      
    'MsgBox rst!NewID
      Them = 0
    ExitSub:
          '
    Clear
          Set cmd 
    Nothing
          Set rst 
    Nothing
          Set Param 
    Nothing
          
    Exit Function
    ErrorHandler:
          MsgBox "sfsf" Err.Number " - " Err.Description
          Resume ExitSub
    End 
    Function
    Public 
    Sub Xoa(id As Long)
          On Error GoTo ErrorHandler
          Dim cmd 
    As ADODB.Command
          Dim rst 
    As ADODB.Recordset
          Dim Param 
    As ADODB.Parameter
          Set cmd 
    = New ADODB.Command
          With cmd
            
    .ActiveConnection CurrentProject.Connection
            
    .CommandText "delete from " tbl " where UserID=?"
          End With
          Set Param 
    cmd.CreateParameter("@UserID"adIntegeradParamInput)
          Param.Value id
          cmd
    .Parameters.Append Param
          cmd
    .Execute
    ExitSub
    :
          'Clear
          Set rst = Nothing
          Set cmd = Nothing
          Set Param = Nothing
          Exit Sub
    ErrorHandler:
          MsgBox "sfsf" & Err.Number & " - " & Err.Description
          Resume ExitSub
    End Sub 
    cái này hiển thị dữ liệu lên subform như thế nào bạn nhỉ? mình đang vướng khi hiển thi dữ liệu, control source có đặt tên không hay là để trống vậy bạn
  • RE: Tại sao Ado recordset inner join readonly

    tt1212 > 30-10-15, 07:16 AM

    Xin hỏi  mattroinguquen đoạn code này mình muốn lưu   subform thì làm sao bạn?
    Mã PHP:
    Private Sub cmdLuu_Click()

    On Error Resume Next
       On Error 
    GoTo HandleError
       
       DoCmd
    .RunCommand acCmdSaveRecord
       Call OpenMyConnect
          Set rstData
    .ActiveConnection cnn
           rstData
    .UpdateBatch adAffectAll
           
    Err_Exit
    :
           rstData.Requery
           Set rstClone 
    CloneRST(rstData)
           Set rstData.ActiveConnection Nothing
           Set Me
    .Recordset rstClone
              
           Call loadDatalistfrmxuat
       Call CloseMyConnect
       
       Exit Sub
    HandleError
    :
       GeneralErrorHandler Err.NumberErr.DescriptionfrmDSKH"Form_Open"
       Resume Err_Exit
      
    End Sub 

    Đây là nút lưu trên fom chính vậy muốn nhấn mút lưu trên fom chinh ma subfom lưu thi làm sao bạn? nhờ bạn chỉ mình mới
  • RE: Tại sao Ado recordset inner join readonly

    MTNQ > 30-10-15, 09:36 PM

    (29-10-15, 06:58 PM)MatTroiNguQuen Đã viết: - ps định phân trang giống web luôn hả?
    Câu này chưa hiểu  016

    À, ý bác nói về cái vụ "SELECT top 10 ...". Thực ra thì chẳng ai lại dại vác cả cái table "bự chà bá" từ server về client  014
    mình chỉ đưa lên để thử xem cái phương thức UpdateBatch  nó chạy kiểu nào, nhanh hay chậm...
  • RE: Tại sao Ado recordset inner join readonly

    MTNQ > 31-10-15, 08:27 AM

    (29-10-15, 11:52 PM)tt1212 Đã viết: Mình đang vướng mắc ở một vấn đề mọi người xem sao
    Trong subform mình muốn tạo conterniufỏm để tạo nhiều dóng
    Trong đó mình lấy dữ liệu từ tbnhom có trướng mã nhóm và tên nhóm
    Bảng này mính lấy từ csdl
    Mình thiết kế một fom trên đó minh tạo một text box và mình muốn gán recoset cho fom thông qua thu luc kết nối dữ liệu
    Khó ở vấn đề là sound của text box mà mình đặt control source = manhom thì lại không gõ vào  dữ liệu mới
    Còn nếu để trống thì sửa được nhưng nhiều dọng lại có dữ liệu giống nhau và chỉ hiện thi có một đòng trong bảng dữ liệu vậy phải giải quyết làm sao đây

    Bác đưa cái form lên nha, nói chay làm biếng lắm  015