-
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?
link : http://www.databasejournal.com/features/...rdsets.htmMã: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
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
- 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
-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 -
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
-"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ô 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
Ý 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 -
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
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ạnMã 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", 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 -
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.Number, Err.Description, frmDSKH, "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
À, ý 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
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