Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Tại sao Ado recordset inner join readonly
#11
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
Chữ ký của tt1212 Present Nhận viết phần mềm, hỗ trợ viết phần mềm, hợp tác viết phần mềm trên nên Microsoft Access mọi phiên bản Liên hệ: Mr Đức -989276236. Email: Tantriviet.vnn@gmail.com website:http://www.tantrivietsoft.com/
Reply
Những người đã cảm ơn maidinhdan , Noname
#12
(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.
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , Noname , Minh Tiên , tt1212
#13
(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
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn
#14
(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
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn
#15
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,
Chữ ký của tt1212 Present Nhận viết phần mềm, hỗ trợ viết phần mềm, hợp tác viết phần mềm trên nên Microsoft Access mọi phiên bản Liên hệ: Mr Đức -989276236. Email: Tantriviet.vnn@gmail.com website:http://www.tantrivietsoft.com/
Reply
Những người đã cảm ơn
#16
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
Chữ ký của tt1212 Present Nhận viết phần mềm, hỗ trợ viết phần mềm, hợp tác viết phần mềm trên nên Microsoft Access mọi phiên bản Liên hệ: Mr Đức -989276236. Email: Tantriviet.vnn@gmail.com website:http://www.tantrivietsoft.com/
Reply
Những người đã cảm ơn
#17
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
Chữ ký của tt1212 Present Nhận viết phần mềm, hỗ trợ viết phần mềm, hợp tác viết phần mềm trên nên Microsoft Access mọi phiên bản Liên hệ: Mr Đức -989276236. Email: Tantriviet.vnn@gmail.com website:http://www.tantrivietsoft.com/
Reply
Những người đã cảm ơn
#18
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
Reply
Những người đã cảm ơn
#19
(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...
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn thucgia
#20
(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
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Tại sao ado recordset không cho sửa thucgia 5 635 15-10-15, 11:46 PM
Bài mới nhất: thucgia

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ