-
RE: Tại sao Ado recordset inner join readonly
MTNQ > 31-10-15, 08:32 AM
(30-10-15, 07:16 AM)tt1212 Đã viết: 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()
...
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
1- Bác thay Private Sub bằng Public Sub (Public Sub cmdLuu_Click())
2- Trên form chính gọi: Call Me.frmDanhsachkhachhang.Form.cmdLuu_Click là OK -
RE: Tại sao Ado recordset inner join readonly
Minh Tiên > 31-10-15, 01:09 PM
Chào tt1212 & MTNG !
1. Cái vụ giải quyết xung đột dữ liệu, theo mình nghỉ nên dùng Unbound trên Main, tạo table Tạm gắn và Sub khi lưu đỗ dữ liệu vào Data lưu là ồn (Ai lưu trước cấp mã trước, ai lưu sau cấp sau).
2. Mình chưa hiểu ý bạn lắm. Có phải bạn muốn dự liệu subform (hiển thị dạng Continuous) và hiển thị theo text box trên Mainform không ?
Nếu đúng thế: Sao không thay textbox bằng combobox. Khi Open Form nạp dự liệu cho Cbo. Khi thay đổi cbo thì load lại Subform theo điều kiện của Cbo.
Thân./. -
RE: Tại sao Ado recordset inner join readonly
tt1212 > 31-10-15, 09:04 PM
1. Cái vụ giải quyết xung đột dữ liệu, theo mình nghỉ nên dùng Unbound trên Main, tạo table Tạm gắn và Sub khi lưu đỗ dữ liệu vào Data lưu là ồn (Ai lưu trước cấp mã trước, ai lưu sau cấp sau).
2. Mình chưa hiểu ý bạn lắm. Có phải bạn muốn dự liệu subform (hiển thị dạng Continuous) và hiển thị theo text box trên Mainform không ?
Nếu đúng thế: Sao không thay textbox bằng combobox. Khi Open Form nạp dự liệu cho Cbo. Khi thay đổi cbo thì load lại Subform theo điều kiện của Cbo.
Nói
Vấn đề vướng mắc là thế này:
Tạo form chi tiết bán hàng cdang conterniufom để hiển thị nhiều dòng
Trong đố có hai ô textbox mã hàng, tên hàng chẳng hạn tại thuộc tính Name mình để [mahang], [tenhang] nhưng thuộc tinh source nếu để [mahang], [tenhang] thì sẽ hiển thị các hàng dữ liệu như trong bảng là đúng,
Nhưng nếu thuộc tính source để trống có nghĩa là Unbound thi khi gõ vào 1 dóng là tất cả các dóng đều giống nhau! Vậy giải quyết thế nào để nhập các dòng cho đúng -
RE: Tại sao Ado recordset inner join readonly
thucgia > 01-11-15, 02:05 AM
(31-10-15, 09:04 PM)tt1212 Đã viết: 1. Cái vụ giải quyết xung đột dữ liệu, theo mình nghỉ nên dùng Unbound trên Main, tạo table Tạm gắn và Sub khi lưu đỗ dữ liệu vào Data lưu là ồn (Ai lưu trước cấp mã trước, ai lưu sau cấp sau).
2. Mình chưa hiểu ý bạn lắm. Có phải bạn muốn dự liệu subform (hiển thị dạng Continuous) và hiển thị theo text box trên Mainform không ?
Nếu đúng thế: Sao không thay textbox bằng combobox. Khi Open Form nạp dự liệu cho Cbo. Khi thay đổi cbo thì load lại Subform theo điều kiện của Cbo.
Nói
Vấn đề vướng mắc là thế này:
Tạo form chi tiết bán hàng cdang conterniufom để hiển thị nhiều dòng
Trong đố có hai ô textbox mã hàng, tên hàng chẳng hạn tại thuộc tính Name mình để [mahang], [tenhang] nhưng thuộc tinh source nếu để [mahang], [tenhang] thì sẽ hiển thị các hàng dữ liệu như trong bảng là đúng,
Nhưng nếu thuộc tính source để trống có nghĩa là Unbound thi khi gõ vào 1 dóng là tất cả các dóng đều giống nhau! Vậy giải quyết thế nào để nhập các dòng cho đúng
Đừng để source các field trống cứ giữ nguyên hiện trạng (Bởi vì nếu bạn xóa bạn phải tốn công viết lại nó trong sự kiện open frm), chỉ xóa cái source của form thôi
Bước 1 : Bạn cứ thiết kế như trước giờ vẫn làm,(auto frm... thoải mái đi), xem tới xem lui cho vừa ý đi.
Bước 2 : trong sự kiện open form : load cái danh sach ADO vào me.recordset
Bước 3 : Trong sự kiện close form : set nothing cái me.recordset
Xong, save 1 cái, mở form thì cái list mới ADO được load lên thôi... Đây gọi là Bình cũ nhưng rượu mới, rất tiết kiêm công sức...
Làm bằng ADo bạn phải quan niệm thế này
- Các table khi relink chỉ là tạm bợ, vì khi làm xong tất cả bạn sẽ delete nó đi, chỉ còn cái chuỗi kết nối nằm trong code thôi.
- Tên field đặt trùng tên với tên source cũng là rất hay, cứ tận dụng luôn (lừa gió bẻ măng)
- Thậm chí các combo box bạn cũng phải cắt cái nguồn table của nó đi, cũng load nó bằng ADO luôn, chuyển sang dạng value list
Bạn cứ làm cách này, mình nghĩ là đơn giản nhất, các ngôn ngữ khác nó làm cũng chuối lắm, nào là load danh sách nào là gán source từa lưa luôn....Bản thân cái thằng visual studio C# bạn muốn đưa cái combo multi column như access không phải là chuyện đơn giản... -
RE: Tại sao Ado recordset inner join readonly
tt1212 > 01-11-15, 02:23 AM
Đang bitrong subfỏm giup mình với khong hieu sao no chăng tính choMã PHP:=sum(thanhtien)
-
RE: Tại sao Ado recordset inner join readonly
thucgia > 01-11-15, 02:45 AM
(01-11-15, 02:23 AM)tt1212 Đã viết: Đang bi
trong subfỏm giup mình với khong hieu sao no chăng tính choMã PHP:=sum(thanhtien)
Đúng, nó không cho và bạn phải viết lại hàm sum
Để mình lấy cái ví dụ cho bạn.
1, bạn đã có một ds recorset, vậy viết hàm tính tổng cho nó
Mã:Function sum_field(rs As ADODB.Recordset, fld As String) As Double
Dim kq As Double
Dim f As ADODB.Field
kq = 0
If rs.RecordCount <= 0 Then
sum_field = 0
Exit Function
End If
rs.MoveFirst
Do While Not rs.EOF
For Each f In rs.Fields
If f.name = fld Then
kq = kq + CDbl(f.value)
End If
Next f
rs.MoveNext
Loop
sum_field = kq
End Function
2, Bạn sẽ gọi nó ở đâu
Mã:Private Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
Me.RibbonName = Me.OpenArgs
End If
Set Me.Recordset = ado2_view.Lay_nhatky_xuatnhap
Call ado2_view.load_listbox_dongia_bq(Me.list_dgbq)
Call ado2_view.load_listbox_td_nx_tc(Me.list_td_nx_tc)
Call ado2_view.load_listbox_hang(Me.list_hang)
Me.txt_ton.value = ado2_view.sum_field(Me.Recordset, "tc")
End Sub
Đây là cách mình làm và cũng có thể "chuối lắm" nhưng xài được, aem có cách nào hay hơn xin góp ý
Và khi làm với ADO bạn sẽ phải chuẩn bị tinh thần bỏ một số tiện nghi của truyền thống... -
RE: Tại sao Ado recordset inner join readonly
Minh Tiên > 02-11-15, 11:36 AM
Nếu dùng Record Source trực tiếp thì bạn dùng Sum([Thanhtien]) Ok.
Nhưng nếu dùng ADO load Record thì bạn dùng ADO để tính và Update thành tiền. Ngoài cách của "thucgia" bạn cũng có thể dùng Code ADO:
Mã:Dim rs As New ADODB.Recordset, sql As String
sql = "SELECT sum(Thanhtien) as CongThanhtien "
sql = sql & "FROM tableName Where ..."
Set rs = fGetRecordset(sql)
If rs.RecordCount > 0 Then
myForm.txtThanhtien.Value = rs!CongThanhtien
Else
myForm.txtThanhtien.Value.Value = 0
End If
Set rs=Nothing
Thân./. -
RE: Tại sao Ado recordset inner join readonly
thucgia > 02-11-15, 12:38 PM
(02-11-15, 11:36 AM)Minh Tiên Đã viết: Nếu dùng Record Source trực tiếp thì bạn dùng Sum([Thanhtien]) Ok.
Nhưng nếu dùng ADO load Record thì bạn dùng ADO để tính và Update thành tiền. Ngoài cách của "thucgia" bạn cũng có thể dùng Code ADO:
Mã:Dim rs As New ADODB.Recordset, sql As String
sql = "SELECT sum(Thanhtien) as CongThanhtien "
sql = sql & "FROM tableName Where ..."
Set rs = fGetRecordset(sql)
If rs.RecordCount > 0 Then
myForm.txtThanhtien.Value = rs!CongThanhtien
Else
myForm.txtThanhtien.Value.Value = 0
End If
Set rs=Nothing
Thân./.
thk, quả nhiên làm ADO vất vả thật rồi, phải bỏ rất nhiều tiện nghi so với truyền thống... -
RE: Tại sao Ado recordset inner join readonly
tt1212 > 03-11-15, 04:00 PM
Cuối cùng mình cũng đã thành công Ado và có thể kết nối Access với tất cả các loại dữ liêu -
RE: Tại sao Ado recordset inner join readonly
tt1212 > 04-11-15, 09:49 AM
Cuối cùng mình cũng đã thành công về ADO và có thể kết nối Acces với tất cả các loại data