Ðề: Kết nối SQL server với Access
Không phải thì chặt đầu tui đi.
Cãi với chú phát mệt.
Đại khái là trong Word, Excel hay Access,Foxpro có thể gọi 1 application ở 1 kênh (chanel) riêng và truyền tham số vào cho application đó.
Thường thì tham số truyền xuống là các lệnh (method) mà ứng dụng đó hiểu và thực hiện được.
Điều đó nghĩa là phải truyền lệnh giống như ta mở ứng dụng đó lên và gõ trực tiếp vậy.
Vậy nếu application là Excel thì phải truyền lệnh Excel, đúng cú pháp, object mà Excel hiểu.
Ví dụ CopyFromRecordset là method của đối tượng Range trong Excel.
CopyFromRecordset Method
Copies the contents of an ADO or DAO Recordset object onto a worksheet, beginning at the upper-left corner of the specified range. If the Recordset object contains fields with OLE objects in them, this method fails.
expression.CopyFromRecordset(Data, MaxRows, MaxColumns)
expression Required. An expression that returns a Range object.
Data Required Variant. The Recordset object to copy into the range.
MaxRows Optional Variant. The maximum number of records to copy onto the worksheet. If this argument is omitted, all the records in the Recordset object are copied.
MaxColumns Optional Variant. The maximum number of fields to copy onto the worksheet. If this argument is omitted, all the fields in the Recordset object are copied.
Remarks
Copying begins at the current row of the Recordset object. After copying is completed, the EOF property of the Recordset object is True.
Example
This example copies the field names from a DAO Recordset object into the first row of a worksheet and formats the names as bold. The example then copies the recordset onto the worksheet, beginning at cell A2.
For iCols = 0 to rs.Fields.Count - 1
ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
ws.Range(ws.Cells(1, 1), _
ws.Cells(1, rs.Fields.Count)).Font.Bold = True
ws.Range("A2").CopyFromRecordset rs
--------
Vấn đề là nếu vẫn nắm giữ recordset của DAO thì connection vẫn phải mở.
Vẫn phải lấy từ đó chứ không phải lấy từ form.
Câu hỏi ban đầu của bạn là:
Private Sub Form_Load()
set me.form.recordset = MyRecordset("select * from table1")
End Sub
Private Sub ExportExcel_Click()
==> 'Xuất ra excell và lấy recordset giống cái phần load của form
End Sub
Lúc này
MyRecordset("select * from table1") đã đóng lại hay chưa?
Ặc ặc, nó đâu phải của excel. Nó chỉ thao tác đối với đối tượng excel thôi
Bác có thấy nó đâu cần tạo ra 1 table hoặc query nào đâu.
Thì đây nè:
...
Set xlWorkbook = xlApp.Workbooks.Open(CurrentProject.Path & "\
book1.xls")
....
Set xlSheet = xlWorkbook.
Sheets(1)
....
.
Range("A1").CopyFromRecordset ketnoi(sql)
....
Có phải là mở book1.xls có sẵn trên dĩa, vào sheet đầu tiên rồi vào Range("A1") không?
Gọi CopyFromRecordset mà không gắn nó vào Range thì làm sao Excel hiểu?
Gọi application nào thì phải am hiểu về application đó thì mới thực hiện được.
Cũng như gọi:
MyRecordset("select * from table1") thì cái trong ngoặc kép phải đúng cú pháp SQL thì SQL mới hiểu. Bỏ vài hàm của Access vào trong ngoặc kép đó thì làm sao mà SQL hiểu được.