Thông tin
  • Đánh dấu xác nhận câu hỏi đã được giải quyết để giúp diễn đàn nâng cao chất lượng [cách sử dụng]
  • Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết [nội qui]
  • Tìm kiếm trước khi đặt câu hỏi

ADODB với Access, DataGrid, DataReport, DE, DAO  Chủ đề đã được giải quyết

Chuyên mục thảo luận các vấn đề liên quan đến ứng dụng quản lý và cơ sở dữ liệu

Điều hành viên: Điều hành

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 6 31/10/2008 9:05 pm

20- Lệnh Find trong ADODB
gửi bởi nguyentrinhthu vào ngày 31/10/2008 1:33 pm

Mình có dòng lệnh như sau:
Mã: Chọn tất cả
  1. dim hs as adodb.recordset
  2. set hs=new adodb.recordset
  3. sql="select mahocsinh,tenhocsinh from bangma"
  4. hs.open sql,connec,3,2


Bây giờ mình muốn tìm trong con trỏ hs cột tenhocsinh xem có ai có tên là "Nguyễn Văn A" không thì tìm như thế nào? Bạn nào biết cách sử dụng Hs.Find thì chỉ cho mình với.

Mã: Chọn tất cả
  1. Private Sub Form_Load()
  2. Const adOpenStatic = 3: Const adLockOptimistic = 3
  3. Dim cn As New ADODB.Connection
  4. Dim hs As New ADODB.Recordset
  5.  cn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source = db1.mdb"
  6. hs.Open "SELECT * FROM bangma", cn, adOpenStatic, adLockOptimistic
  7. hs.MoveFirst
  8. hs.Find "tenhocsinh='nguyen van a'"
  9. If Not hs.EOF Then
  10. MsgBox hs.Fields.Item("mahocsinh") & vbTab & hs.Fields.Item("tenhocsinh")
  11. Else
  12. MsgBox "Không tìm thây"
  13. End If
  14. End Sub

Xong! Nhẹ bụng :D
Sửa lần cuối bởi truongphu vào ngày Thứ 7 01/11/2008 3:48 pm với 1 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi longtep » Thứ 6 31/10/2008 9:12 pm

hì, cho em hỏi lỡ xóa luôn table thì có thể tạo lại bằng lệnh vb6 được hôn a?
longtep
Thành viên tích cực
Thành viên tích cực
 
Bài viết: 140
Ngày tham gia: Chủ nhật 08/06/2008 9:45 pm
Đã cảm ơn: 8 lần
Được cảm ơn: 1 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 6 31/10/2008 9:17 pm

longtep đã viết:hì, cho em hỏi lỡ xóa luôn table thì có thể tạo lại bằng lệnh vb6 được hôn a?

Chú em longtep thiếu cẩn thận
Đọc mục 12 và mục 15
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 6 31/10/2008 9:37 pm

21- Làm sao khi ADODB.Recordset không cho mở giá trị NULL?
gửi bởi boy1234 vào ngày Thứ 2 20/10/2008 7:05 pm

Khi em kết nối VB 6.0 với CSDL Access bằng ADODB.Recordset có 1 trường mang giá trị Null thì không cho mở trường đó. Nếu không sử dụng trường đó thì mở record được bình thường xin chỉ giúp

gửi bởi vietteiv vào ngày Thứ 2 20/10/2008 8:35 pm
khi truy xuất csdl bị lỗi thì bác truongphu ko nên dùng bẫy lỗi resume next, vì có thể mình sẽ bỏ sót 1 số lỗi khác ngoài ý muốn. cho nên trong trường hợp này mình sẽ bẫy lỗi bằng câu lệnh kiểm tra recordset trước khi cho load lên datagrid. ví dụ:
Mã: Chọn tất cả
  1. 'thực hiện việc kết nối database
  2. ....
  3. 'kết nối đến table cần truy xuất
  4. rs.Open "Select * from table1", CN, adOpenStatic, adLockOptimistic
  5. if rs.recordcount > 0 then
  6.  for i=1 to rs.recordcount
  7.    if not IsNull(rs.Field("tên field cần lấy dữ liệu")) then
  8.      'load dữ liệu lên control
  9.       grid.column(0).text=rs.Field("tên field cần lấy dữ liệu")
  10.    else
  11.       grid.column(0).text=""
  12.    end if
  13.    rs.movenext
  14.  next i
  15. else
  16.  msgbox "không có mẫu tin nào"
  17. end if
  18.  


gửi bởi hoangthu1974 vào ngày Thứ 4 22/10/2008 4:02 pm
Nhưng để chương trình xử lý nhanh hơn, bạn thử cái While Not rs.EOF... Wend xem sao. Cái này nó cắm đầu chạy không cho ngưng nên sẽ xử lý nhanh hơn nhiều.
Khi dùng While... Wend có nghĩa là nó sẽ ngưng khi gặp điều kiện.
Ngoài ra, nhớ thêm DoEvents cho nó không bị treo máy.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi vietteiv » Thứ 7 01/11/2008 11:20 am

tạo khóa chính (primary key hoặc index key), thường sử dụng cái này khi bạn muốn tạo csdl, table =code (xem thêm bài viết tạo table của hoangthu1974)

Mã: Chọn tất cả
  1. ' ref voi ADO Ext 2.8 (msadox.dll)
  2.  
  3. Private CAT As ADOX.Catalog
  4.  
  5. Private Sub CreateIndexes()
  6.  
  7.    On Error GoTo ErrTrap
  8.   Dim IDX As ADOX.Index
  9.  
  10.    ' ===[Create Index 'PrimaryKey']===
  11.    Set IDX = New ADOX.Index
  12.  
  13.    With IDX
  14.       .Name = "PrimaryKey"
  15.       .Columns.Append "Key"
  16.       .PrimaryKey = True
  17.       .Unique = True
  18.       .Clustered = False
  19.       .IndexNulls = adIndexNullsDisallow
  20.    End With
  21.  
  22.    CAT.Tables("TestScores").Indexes.Append IDX
  23.  
  24.    ' ===[Create Index 'Key']===
  25.    Set IDX = New ADOX.Index
  26.  
  27.    With IDX
  28.       .Name = "Key"
  29.       .Columns.Append "Key"
  30.       .PrimaryKey = False
  31.       .Unique = False
  32.       .Clustered = False
  33.       .IndexNulls = adIndexNullsAllow
  34.    End With
  35.  
  36.    CAT.Tables("TestScores").Indexes.Append IDX
  37.  
  38.    Set IDX = Nothing
  39.  
  40.    Exit Sub
  41.  
  42. ErrTrap:
  43.    'MsgBox Err.Number & " / " & Err.Description,,"Error In CreateIndexes"
  44.    'Exit Sub
  45.    'Resume
  46.  
  47. End Sub
Phần mềm Quản lý thông tin dự án (PMS), Quản lý doanh nghiệp (EMS)
http://www.dong-tay.com
Hình đại diện của thành viên
vietteiv
Quản trị
Quản trị
 
Bài viết: 1289
Ngày tham gia: Thứ 7 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Đã cảm ơn: 6 lần
Được cảm ơn: 59 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi longtep » Thứ 7 01/11/2008 2:29 pm

ohh, bác TRUONGpHU quả là siêu nhiên, rất hay và rất nhiều ...nên em chưa kịp đọc hết nữa...hôm nào em sẽ làm thử xem sao , chắc là sẽ không chạy vÀ sẽ hỏi tiếp nữa thì may ra mới chạy được (vì em rất là vụn về...hic hic hic, gõ code hong bao gio nó chạy trơn tru hết á)_
longtep
Thành viên tích cực
Thành viên tích cực
 
Bài viết: 140
Ngày tham gia: Chủ nhật 08/06/2008 9:45 pm
Đã cảm ơn: 8 lần
Được cảm ơn: 1 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 7 01/11/2008 3:45 pm

23- Bài tập Tính điểm chênh lệch giữa các ngày
gửi bởi dcongphuc vào ngày Chủ nhật 27/01/2008 10:16 am
Access em có 1 table gồm các trường: Shd (khóa chính), ngay, diem. Em muốn tạo 1 Query tính chênh lệch điễm giữa các ngày với nhau ví dụ như:
Shd ngay diem chenhlech
1 01/01/08 100 0
2 02/01/08 120 20
3 03/01/08 130 10
4 04/01/08 90 40
5 05/01/08 90 0
Vậy phải làm sao?
Em cám ơn các bác nhiều

gửi bởi pcvinh vào ngày Thứ 2 28/01/2008 11:03 am và gửi bởi HangXom
ChenhLech: Abs([Diem]-(Select top 1 Diem From BANG as B Where B.SHD < A.SHD Order By SHD DESC))


---------------
Dùng Recorset chạy như sau:
Mã: Chọn tất cả
  1. Private Sub Form_Load()
  2. Const adOpenStatic = 3: Const adLockOptimistic = 3
  3. Dim a%, b%
  4. Set objConnection = CreateObject("ADODB.Connection")
  5. Set objRecordSet = CreateObject("ADODB.Recordset")
  6. objConnection.Open "Provider= Microsoft.Jet.OLEDB.4.0; " & "Data Source=Bai tap.mdb"
  7.  
  8. objRecordSet.Open "SELECT Diem From BANG", objConnection, adOpenStatic, adLockOptimistic
  9. objRecordSet.MoveFirst
  10. Do While Not objRecordSet.EOF
  11. a = objRecordSet.fields("diem").Value
  12. If b > 0 Then MsgBox Abs(b - a) Else MsgBox "chua có du liêu'"
  13. objRecordSet.MoveNext
  14. b = a
  15. Loop
  16.  
  17. End Sub
Sửa lần cuối bởi truongphu vào ngày Thứ 5 06/11/2008 8:24 am với 1 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Chủ nhật 02/11/2008 8:20 am

24- Tìm trong Database với mệnh đề WHERE
Tại mục 20 đã bàn về việc bạn nguyentrinhthu hỏi lệnh Find (Sub find thì đúng hơn)
Sau đây là code tìm đơn giản không bẫy lỗi: Tìm trong file db1.mdb cùng folder tại table Table1, field "ggg" có record là "gh"
Mã: Chọn tất cả
  1. Private Sub Form_Load()
  2. Const adOpenStatic = 3: Const adLockOptimistic = 3
  3. Set objConnection = CreateObject("ADODB.Connection")
  4. Set objRecordSet = CreateObject("ADODB.Recordset")
  5. objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source = db1.mdb"
  6. objRecordSet.Open "SELECT * FROM Table1 " & "WHERE qqq = 'gh'", objConnection, adOpenStatic, adLockOptimistic
  7.  
  8. MsgBox "Sô record Ðuoc Ðêm là: " & objRecordSet.RecordCount & _
  9. vbCr '& "ID cua record cuôi là: " & objRecordSet.fields("id").Value
  10.  
  11. objRecordSet.Close: Set objRecordSet = Nothing
  12. objConnection.Close: Set objRecordSet = Nothing
  13. End Sub


ghi chú code trên:
1- vì không có cấu trúc
Mã: Chọn tất cả
  1. objRecordSet.MoveFirst
  2. Do While Not objRecordSet.EOF
  3. ...
  4. objRecordSet.MoveNext
  5. Loop

nên nếu có record được ghi nhận thì tốt, còn không sẽ sinh lỗi
Code trên sẽ chạy êm vì đã gạt dòng gây lỗi nếu không tìm thấy record yêu cầu: & "ID cua record cuôi là: " & objRecordSet.fields("id").Value
2- Đương nhiên bạn có thể viết với cấu trúc Do...EOF ... Loop nói trên, trong trường hợp nầy bạn có thể truy xuất nhiều giá trị record của các field trong Table1 để có thông tin rõ ràng.
3- Set objRecordSet = Nothing là xóa hẵn objRecordSet, kết thúc làm việc và giải phóng bộ nhớ. Sau lệnh gán Nothing nầy, bạn không có quyền gọi objRecordSet.open lại nữa. Muốn thì xin khai báo như từ đầu.
Ngược lại, nếu chỉ viết objRecordSet.Close thì bạn lại có quyền gọi objRecordSet.open nhẹ nhàng;
Mã: Chọn tất cả
  1. objRecordSet.Close
  2. objRecordSet.open
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Chủ nhật 02/11/2008 3:31 pm

25- Làm sao để kết nối đến cơ sở dữ liệu Server.
gửi bởi hongtho vào ngày Thứ 7 02/08/2008 1:11 pm

Thực hiện theo hình sau:
untitled.JPG


Sau đây là code dùng DNS để mở database tên Northwind, truy xuất table Customers
Mã: Chọn tất cả
  1. Const adOpenStatic = 3: Const adLockOptimistic = 3
  2. Set objConnection = CreateObject("ADODB.Connection")
  3. Set objRecordSet = CreateObject("ADODB.Recordset")
  4.  
  5. objConnection.Open _
  6.     "Northwind;fabrikam\kenmyer;34ghfn&!j"
  7. ' câu trúc: "Tên file; User ID; Mât khâu"
  8. objRecordSet.Open "SELECT * FROM Customers", _
  9.         objConnection, adOpenStatic, adLockOptimistic
  10.  
  11. objRecordSet.MoveFirst
  12.  
  13. MsgBox objRecordSet.RecordCount


gửi bởi sirdmit vào ngày Thứ 3 28/10/2008 2:31 pm
Mã: Chọn tất cả
  1. '. . . .
  2. db.Open "DSN=data;User ID=minh ;Password=sirdmit"
  3. '. . .

ban vao trong Administrative Tools-> ODBC roi chon tab System DNS roi add database vao la ok ngay.
Nguyen Ngoc Minh - minhnguyen6717@yahoo.com

gửi bởi hoangthu1974 vào ngày Thứ 4 05/11/2008 11:50 am
Mã: Chọn tất cả
  1. 'Kết nối bằng quyền hệ thống
  2. ConnectionString = "Provider=SQLOLEDB; Data Source=" & HostName & _
  3.                 "; Integrated Security=SSPI; Persist Security Info=False" & _
  4.                 "; Initial Catalog=DatabaseName" & _
  5.                 "; Driver={SQL Server}; DSN=''"
  6. 'Kết nối bằng quyền của SQL
  7.             ConnectionString = "Provider=SQLOLEDB; Persist Security Info=False; Data Source=" & HostName & _
  8.                 "; Initial Catalog=DatabaseName" & _
  9.                 "; User ID=" & LoginName & _
  10.                 "; Password=" & Password & _
  11.                 "; Driver={SQL Server}; DSN=''"

Trong đó:
+ HostName là tên máy chủ
+ DatabaseName là tên database
+ LoginName là tên đăng nhập SQL
+ Password là mật khẩu đăng nhập SQL
Bạn không được cấp phép để xem tập tin đính kèm trong bài viết này.
Sửa lần cuối bởi truongphu vào ngày Chủ nhật 09/11/2008 5:40 am với 1 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 3 04/11/2008 7:40 am

26- Datagird có để đặt Setfocus cho 1 ô bất kỳ ?
gửi bởi dong vào ngày Thứ 5 22/05/2008 10:07 am
http://caulacbovb.com/forum/viewtopic.php?f=7&t=1466#p8629

Đưa Recorset đến vị trí mong muốn:
Mã: Chọn tất cả
  1. Private Sub Form_Load()
  2. Adodc1.Recordset.Move (5) 'dòng thu' 6
  3. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 4 05/11/2008 8:10 am

27- Export dữ liệu từ excell vào access bằng VB6
gửi bởi smile251284 vào ngày Thứ 2 27/10/2008 10:52 am
...form VB6 cho phep chọn 1 file excell để import dữ liệu vào một bảng sẵn có của csdl bằng access của chương trình?...

gửi bởi hoangthu1974 vào ngày Thứ 3 28/10/2008 8:44 am
viewtopic.php?f=52&t=3 <- Import dữ liệu excel vào access hoàn chỉnh

Sau đây là 2 đoạn code đơn giản thực hiện cùng chức năng:
a- Chuyển file dữ liệu Excel sang file Access

Mã: Chọn tất cả
Private Sub ExceltoAccess(ExcelPath$, AccessPath$)Const acImport = 0: Const acSpreadsheetTypeExcel9 = 8Set objAccess = CreateObject("Access.Application")objAccess.NewCurrentDatabase AccessPath$objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Test", ExcelPath$, TrueEnd Sub


Ghi chú: muốn chuyển Sheet nào thì thêm tên Sheet ấy vào sau câu code cuối, vd: chuyển Sheet2
Mã: Chọn tất cả
objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Test", ExcelPath$, True,"Sheet2!"

Chuyển Sheet có tên "TôngHop"
Mã: Chọn tất cả
objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Test", ExcelPath$, True,"TôngHop!"



Sử dụng:
Mã: Chọn tất cả
Private Sub Form_Load()Call ExceltoAccess("E:\win\desktop\Book1.xls", "E:\win\desktop\New.mdb")End Sub

Đương nhiên Tập tin Excel trong đường dẫn phải có, còn đường dẫn Access KHÔNG CÓ TẬP TIN để function tạo MỚI!

Bổ sung hàm, ngày 12/3/2003
có thêm tên table, tên sheet
Syntax: [ Download ] [ Hide ]
Using Visual Basic Syntax Highlighting
  1. Private Sub ExceltoAccess(ExcelPath$, AccessPath$, TableName$, Optional ByVal SheetName$ = "Sheet1!")
  2. Const acImport = 0: Const acSpreadsheetTypeExcel9 = 8
  3. Set objAccess = CreateObject("Access.Application")
  4. objAccess.NewCurrentDatabase AccessPath$
  5. objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, TableName$, ExcelPath$, True, SheetName$
  6. End Sub
  7.  
Parsed in 0.000 seconds, using GeSHi 1.0.8.11



gửi bởi TTD vào ngày Thứ 2 27/10/2008 1:34 pm
@truongphu: code của bác là đổ bảng excel vào một MDB mới tinh, còn cần lấy excel vào một table có sẵn của 1 file MDB có rồi thì làm sao?

Mã: Chọn tất cả
Private Sub ExceltoAccess2(ExcelPath$, AccessPath$)Const acImport = 0: Const acSpreadsheetTypeExcel9 = 8Set objAccess = CreateObject("Access.Application")objAccess.OpenCurrentDatabase AccessPath$objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Table1", ExcelPath$, TrueEnd Sub

ngoài field ID (autonumber), trên mdb có sẵn phải có các field tương đồng với Book1.xls trong một table cần import, vd Table1 khai ở trên.

gửi bởi Karlee_VN vào ngày 8/11/2008 9:31 pm
Nếu em chỉ muốn lấy 1 mảng dữ liệu chứ ko lấy hết sheet thì sao ạ ?

Mã: Chọn tất cả
objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Table1", ExcelPath$, True, "A1:C14"


Khi chạy nó báo ko có field F1 trong table. Mặc dù em chẳng đặt field nào là field F1 trong table lẫn Excel.
Tiện thể cho em hỏi, làm sao đặt được tên Field trong excel ạ


Quy định của Access thì trong Table phải có tên các field để truy vấn.
Tôi có viết hướng dẫn ở dưới phần code: "ngoài field ID (autonumber), trên mdb có sẵn phải có các field tương đồng với Book1.xls trong một table cần import, vd Table1 khai ở trên."
Khi bạn xuất từ Excel, chọn vùng ví dụ "A1: D22" sang Access, biên dịch sẽ xem mặc định cột A có tên là F1... tương tự cột D có tên field là F4
Vậy bạn phải tạo trên table1 các field F1 -> F4 để tương đồng với BooK1
Để khai tên field trong Excel, đó là vị trí của Row1. Ví dụ A1 = "STT", B1 = "Họ và Tên", C1 = "Tuổi", D1 = "Ngày sinh" ...

b- Access qua Excel

Mã: Chọn tất cả
Private Sub Access2Excel2(AccessPath$, ExcelPath$)Const acExport = 1: Const acSpreadsheetTypeExcel9 = 8Set objAccess = CreateObject("Access.Application")objAccess.OpenCurrentDatabase AccessPath$  ' Câu sau có Test là tên TableobjAccess.DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Test", ExcelPath$, TrueEnd Sub

Sử dụng:
Mã: Chọn tất cả
Private Sub Form_Load()Call Access2Excel2("E:\win\desktop\new.mdb", "E:\win\desktop\new.xls")End Sub

Đương nhiên Tập tin Access trong đường dẫn phải có, còn đường dẫn Excel KHÔNG CÓ TẬP TIN để function tạo MỚI!

gửi bởi NoBi vào ngày Thứ 2 09/06/2008 4:41 pm
đối với file excel có nhiều sheet thì làm sao chọn được sheet cần export nhỉ?.

Mã: Chọn tất cả
objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Test", ExcelPath$, True, "Sheet2!"


gửi bởi dungcld75 vào ngày 8/11/2008 9:29 pm
không rõ là mật khẩu khai báo như thế nào

Mã: Chọn tất cả
objAccess.OpenCurrentDatabase AccessPath$, True, "dungcld75"

mà "dungcld75" là password
Sửa lần cuối bởi truongphu vào ngày Thứ 6 12/03/2010 9:11 am với 7 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 4 05/11/2008 9:34 am

28- Truy xuất bản ghi thứ 20 trong database
gửi bởi quangpt vào ngày Chủ nhật 15/06/2008 4:49 pm
http://caulacbovb.com/forum/viewtopic.php?f=7&t=2084#p12626

Mình muốn truy xuất bản ghi thứ 20 trong database ra các đối tượng trong form thì mình phải làm như thế nào? Các bạn giúp mình với!Cảm ơn các bạn rất nhiều!!!

gửi bởi thuannv vào ngày Chủ nhật 15/06/2008 10:54 pm

Muốn làm việc này thì cách thông dụng nhất là bạn duyệt từ đầu đến bản ghi thứ 20 rùi lấy nó ra.
Việc duyệt CSDL thì chắc bạn làm được. Bạn chỉ cần cho cái biến đếm cứ sau cái RS.MoveNext thì bạn lại tăng biến đếm. Khi biến đếm của bạn bằng 20 thì bạn chỉ việc select nó ra thôi, vì hiện giờ con trỏ CSDL đã trỏ tới bản ghi thứ 20 rùi.
Chúc vui!

------------
Nhanh nhất là dùng lệnh Recorset.Move
Mã: Chọn tất cả
  1. Private Sub Form_Load()
  2. Const adOpenStatic = 3: Const adLockOptimistic = 3
  3. Set objConnection = CreateObject("ADODB.Connection")
  4. Set objRecordset = CreateObject("ADODB.Recordset")
  5. objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source = db1.mdb"
  6. objRecordset.Open "SELECT * FROM table1", objConnection, adOpenStatic, adLockOptimistic
  7.  
  8.     objRecordset.Move (0) ' cong thêm 0 dòng, tính tu` First -> dòng 1
  9.     MsgBox objRecordset.fields("qqq")
  10.     objRecordset.Move (1) ' cong thêm 1 dòng, tính tu` trên -> dòng 2
  11.     MsgBox objRecordset.fields("qqq")
  12.     objRecordset.Move (5) '  cong thêm 5 dòng, tính tu` trên -> dòng 7
  13.     MsgBox objRecordset.fields("qqq")
  14.     objRecordset.Move (2) '  cong thêm 2 dòng, tính tu` trên -> dòng 9
  15.     MsgBox objRecordset.fields("qqq")
  16.     objRecordset.Move (-3) '  tru` Ði 3 dòng, tính tu` trên -> dòng 6
  17.     MsgBox objRecordset.fields("qqq") & vbTab & objRecordset.fields("www")
  18. End Sub
Sửa lần cuối bởi truongphu vào ngày Thứ 5 06/11/2008 8:23 am với 1 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 5 06/11/2008 8:22 am

29- Câu lệnh SQL trong vb
gửi bởi tinhlanhuthe vào ngày Thứ 6 13/06/2008 5:34 pm
http://caulacbovb.com/forum/viewtopic.php?f=7&t=2050&start=0&st=0&sk=t&sd=a

Còn chèn thêm đk Where thì chạy sai:

Mã: Chọn tất cả
  1. Set rc = dc.Execute("select SACH.TEN_SACH from SACH where SACH.SO_LUONG=0")
  2. Set Adodc1.Recordset = rc
  3. DataGrid1.Refresh


gửi bởi hoangthu1974 vào ngày Thứ 6 13/06/2008 10:40 pm
Sửa lại một chút là:
Mã: Chọn tất cả
  1. Set rc = dc.Execute("select SACH.TEN_SACH, SACH.SO_LUONG from SACH where SACH.SO_LUONG=0")
  2. Set Adodc1.Recordset = rc
  3. DataGrid1.Refresh


Chú ý: Câu lệnh điều kiện WHERE... phải được select.
--------
Hoặc viết, nếu database đơn giản:
Mã: Chọn tất cả
  1. Set rc = dc.Execute("select * from SACH where SACH.SO_LUONG=0")
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 5 06/11/2008 8:44 am

30- Datagrid dùng các câu lệnh kết nối
gửi bởi chaocanha vào ngày 5/11/2008 1:58 pm
xin hỏi các bạn 1 câu, mình muốn dùng datagrid để hiển thị dữ liệu nhưng không dùng ADODC mà dùng các câu lệnh để hiển thị sao cho khi thêm ,sửa xóa thì dữ liệu đều được cập nhật vào datagrid.xin hỏi cách làm.

Vấn đề Kết nối DataGrid1 với ADODB có nhiều câu trả lời trên các trang web chưa tường minh
A- Kết nối DataGrid1
a- Khai báo các kết nối:
Mã: Chọn tất cả
  1. Dim objConnection As New ADODB.Connection
  2. Dim objRecordSet As New ADODB.Recordset

b- Mở tập tin mdb
Mã: Chọn tất cả
  1. objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source = db1.mdb"

c- Khai báo các hằng. Quan trọng à nha, không có thì Datagrid1 không hiển thị
Mã: Chọn tất cả
  1. Const adLockOptimistic = 3: Const adOpenDynamic = 2: Const adUseClient = 3
  2. objRecordSet.CursorLocation = adUseClient

d- Truy xuất bảng tin
Mã: Chọn tất cả
  1. objRecordSet.Open "SELECT * FROM table1", objConnection, adOpenDynamic, adLockOptimistic

e- Nối dataGrid1
Mã: Chọn tất cả
  1. Set DataGrid1.DataSource = objRecordSet

B- Xóa record tại vị trí con trỏ trên DataGrid1
Mã: Chọn tất cả
  1. objRecordSet.Delete
  2. objRecordSet.MoveNext

C- Thêm record cuối recorset
Mã: Chọn tất cả
  1. objRecordSet.AddNew
  2. objRecordSet("qqq") = 25
  3. objRecordSet("www") = 218
  4. objRecordSet.Update

D- Sửa record tại vị trí con trỏ
Mã: Chọn tất cả
  1. objRecordSet("qqq") = 25
  2. objRecordSet("www") = 218
  3. objRecordSet.Update
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 5 06/11/2008 8:51 am

31- Lỗi kết nối CSDL Access
gửi bởi ngochungb462 vào ngày Thứ 3 10/06/2008 6:09 pm

Mã: Chọn tất cả
  1. gConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;" & _
  2. "DataSource=" & App.Path & "\Data\data.mdb; " & _
  3. "Persist Security Info=False"

nhưng khi chạy thông báo lỗi là "Could not find installable ISAM"

gửi bởi anhtuyenbk vào ngày Thứ 3 10/06/2008 7:44 pm
Mình đọc sơ qua thì thấy sai chỗ này Data Source phải viết tách rời nhau ra, ko được viết dính liền.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 6 07/11/2008 6:45 am

32- Xử lý lỗi
gửi bởi vancuong180286 vào ngày Thứ 6 20/06/2008 10:36 am
Mã: Chọn tất cả
  1. '------Ket Noi CSDL-------
  2. Public Sub OpenDB(str As String)
  3. On Error GoTo loi
  4. '. . . . . .
  5. cn.Open
  6. loi:
  7. MsgBox "KÕt Nèi DL Sai!" & vbCrLf & "H·y KiÓm Tra L¹i"
  8. End Sub


gửi bởi thuat vào ngày Thứ 2 23/06/2008 5:54 am
Viết như bạn thì Msgbox luôn xuất hiện mặc dù không có lỗi phát sinh.
Bạn sửa lại như sau:
Mã: Chọn tất cả
  1. '------Ket Noi CSDL-------
  2. Public Sub OpenDB(str As String)
  3. On Error GoTo loi
  4. ' . . . . . .
  5. cn.Open
  6. loi:
  7. If Err Then
  8. MsgBox "KÕt Nèi DL Sai!" & vbCrLf & "H·y KiÓm Tra L¹i"
  9. Err.clear
  10. End If
  11. End Sub


- - - -
Hoặc gọn hơn:
Mã: Chọn tất cả
  1. '------Ket Noi CSDL-------
  2. Public Sub OpenDB(str As String)
  3. On Error GoTo loi
  4. ' . . . . . .
  5. cn.Open
  6. Exit Sub '<--Phai thoát ra nêu không lôi
  7. loi:
  8. MsgBox "KÕt Nèi DL Sai!" & vbCrLf & "H·y KiÓm Tra L¹i"
  9. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 6 07/11/2008 7:44 am

33- Lỗi gọi hàm trong thư viện
gửi bởi vancuong180286 vào ngày Thứ 2 23/06/2008 12:12 am
http://www.caulacbovb.com/forum/viewtopic.php?f=7&t=1812#p13593
Giả sử như có kết nối kiểu này
Mã: Chọn tất cả
  1. Public Sub OpenDB(Querry_String As String)
  2.  Dim fname As String
  3.     fname = GetAppPath & "\Database\QLVT.mdb"
  4.     Set Cn = fCreateObject("ADODB.Connection")
  5.     Set Rs = fCreateObject("ADODB.Recordset")
  6.     ' . . . . .
  7. End Sub

Theo kiểu kết nối này thì em gọi thủ tục dũ liệu là :openDB"select *from..."
nhưng đến khi thực hiện addnew thì vẫn báo lỗi.
- - - - -

Các biến, ta có thể đặt tên tùy thích, (tốt nhất là gợi nhớ) ví dụ trong code trên:
Mã: Chọn tất cả
  1. Dim fname As String

Nhưng gọi hàm trong thư viện thì tên hàm phải chính xác. Với câu:
Mã: Chọn tất cả
  1. Set Cn = fCreateObject("ADODB.Connection")

Khi chạy đã báo lỗi: Sub or Function not defined
vì khi compile, không thể tìm trong các thư viện có hàm fCreateObject (hoặc là bạn chưa định nghĩa chúng)
. . . thì làm sao mà VB6 biên dịch được để ... "nhưng đến khi thực hiện addnew thì vẫn báo lỗi." ?
Hàm CreateObject là một hàm thông dụng của VBA mà nhiều người cứ ngỡ là VBS nên ngại dùng..
Cú pháp: CreateObject(class as string,[Server name as string])
nếu viết: Set Rs = CreateObject("ADODB.Recordset") là hoàn toàn đúng với ADODB là thư viện, Recordset là lớp. Riêng Server name bỏ qua
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 6 07/11/2008 7:56 am

34- Hỏi cách xem cấu trúc của database SQL trong VB
gửi bởi Caramen vào ngày Thứ 3 24/06/2008 10:58 pm
Các huynh cho đệ hỏi muốn viết 1 chương trình xem cấu trúc của 1 database bất kì trong SQL server thì làm thế nào. Cụ thể là muốn xem trong database đó có bao nhiêu bảng, môi bảng có những trường gì ?
http://www.caulacbovb.com/forum/viewtopic.php?f=7&t=2250#p13747

Thủ thuật: Liệt kê tên Tables và tên Fields trong file Access
Mã: Chọn tất cả
  1. Private Sub Form_Load()
  2. ' Hai hang sô thông kê tên Table và tên Column
  3. Const adSchemaTables = 20: Const adSchemaColumns = 4: Dim a$, i%
  4. Dim objConnection As New ADODB.Connection: Dim objRecordset As New ADODB.Recordset
  5.  
  6. objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & App.Path & "\db1.mdb"
  7.  
  8. Set objRecordset = objConnection.OpenSchema(adSchemaTables)
  9. i = 1
  10. Do Until objRecordset.EOF
  11.     strTableName = objRecordset("Table_Name")
  12.     Set objFieldSchema = objConnection.OpenSchema(adSchemaColumns, Array(Null, Null, strTableName))
  13.         If i > 6 Then  '<-- Gat bo temp tables
  14.             a = a & vbCr & "Table: " & UCase(objRecordset("Table_Name")) & vbCr
  15.                 Do While Not objFieldSchema.EOF
  16.                     a = a & objFieldSchema("Column_Name") & ", " & objFieldSchema("Data_Type") & vbCr
  17.                     objFieldSchema.MoveNext
  18.                 Loop
  19.         End If
  20.     objRecordset.MoveNext
  21.     i = i + 1
  22. Loop
  23. MsgBox a
  24. End Sub
Sửa lần cuối bởi truongphu vào ngày Thứ 4 12/11/2008 8:44 pm với 1 lần sửa trong tổng số.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi hoangthu1974 » Thứ 6 07/11/2008 9:32 am

truongphu đã viết:Khi chạy đã báo lỗi: Sub or Function not defined
vì khi compile, không thể tìm trong các thư viện có hàm fCreateObject (hoặc là bạn chưa định nghĩa chúng)
. . . thì làm sao mà VB6 biên dịch được để ... "nhưng đến khi thực hiện addnew thì vẫn báo lỗi." ?
Hàm CreateObject là một hàm thông dụng của VBA mà nhiều người cứ ngỡ là VBS nên ngại dùng..
Cú pháp: CreateObject(class as string,[Server name as string])
nếu viết: Set Rs = CreateObject("ADODB.Recordset") là hoàn toàn đúng với ADODB là thư viện, Recordset là lớp. Riêng Server name bỏ qua

Sử dụng CreateObject đồng nghĩa với việc phải khai báo lại một loạt các tham biến của ADODB.
Nếu sử dụng cái này viết quen trên ADODB 2.5 thì 2.8 vẫn chạy được. Nhưng nếu viết trên 2.8 mà đem qua máy chỉ có ADODB 2.5 thì một số chức năng sẽ chạy không như ý của bạn.
Việc sử dụng CreateObject khiến cho việc đem qua máy khách sử dụng được dễ dàng hơn, nhưng chương trình đóng gói sẽ không tìm thấy ADODB mà người lập trình đã sử dụng.
Tốt nhất nên Reference cho nó và khai báo tường minh: Dim cn as ADODB.Connection, bạn sẽ có được các tham chiếu của ADODB.Connection hoặc ADODB.Recordset. Cách khai báo này dễ dùng hơn khi thao tác lập trình với code.
Sau khi chạy ổn, có thể dùng lệnh Replace All để thay thế hết các khai báo này.
Hình đại diện của thành viên
hoangthu1974
Guru
Guru
 
Bài viết: 812
Ngày tham gia: Thứ 5 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Đã cảm ơn: 0 lần
Được cảm ơn: 9 lần

Re: Các câu hỏi và trả lời liên quan đến file *.MDB

Gửi bàigửi bởi truongphu » Thứ 6 07/11/2008 2:35 pm

hoangthu1974 đã viết:Tốt nhất nên Reference cho nó và khai báo tường minh:
Mã: Chọn tất cả
  1. Dim cn as ADODB.Connection

bạn sẽ có được các tham chiếu của ADODB.Connection hoặc ADODB.Recordset. Cách khai báo này dễ dùng hơn khi thao tác lập trình với code.


Tôn trọng ý kiến anh hoangthu1974, từ bài viết nầy trở đi, giới thiệu các bạn quen với khai báo của tôi:
Mã: Chọn tất cả
  1. Dim Con As New ADODB.Connection
  2. Dim Rec As New ADODB.Recordset


35- Hỏi cách đọc CSDL master trong SQL
gửi bởi Caramen vào ngày Thứ 7 28/06/2008 12:12 am
http://www.caulacbovb.com/forum/viewtopic.php?f=7&t=2323#p14313
Mình muốn hỏi cách đọc CSDL master trong SQL server để có thể hiện lên tên của tất cả các co so du liệu. AI biết vui lòng chỉ giùm..! thank!

Mã: Chọn tất cả
  1. Dim Con As New ADODB.Connection
  2. Dim Rec As New ADODB.Recordset
  3. 'strComputer = "TênMáyChu" hoac
  4. strComputer = "."
  5. Con.Open "Provider=SQLOLEDB;Data Source=" & strComputer & ";" & _
  6.         "Trusted_Connection=Yes;Initial Catalog=Master"
  7.  
  8. Set Rec = Con.Execute("Select Name From SysDatabases")
  9.  
  10. If Rec.RecordCount = 0 Then
  11.     MsgBox "No databases could be found."
  12. Else
  13.     Do Until Rec.EOF
  14.         a = a & Rec.Fields("Name") & vbCr
  15.         Rec.MoveNext
  16.     Loop
  17. End If
  18. MsgBox a


Lưu ý: Đoạn code trên không biết hiệu quả thế nào vì bạn Caramen không có ý kiến phản hồi.
Riêng trên máy của tôi: không có CSDL máy chủ, nhận được:
Run-time error '-2147467259 (80004005)':
[DBNETLIB][ConnectionOpen (Connect().]SQL Server does not exist or access denied.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
 
Bài viết: 4721
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 13 lần
Được cảm ơn: 470 lần

Trang trướcTrang kế tiếp

Quay về Ứng dụng Quản lý và Cơ sở dữ liệu

Ai đang trực tuyến?

Đang xem chuyên mục này: Không có thành viên nào đang trực tuyến1 khách