Tải bản đầy đủ (.doc) (26 trang)

Tập hợp các thao tác trên file mbm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (184.07 KB, 26 trang )

Tập hợp các thao tác trên file *MDB đã viết trên CLB
VB
Mục lục
Ghi chú: các link sau không tự động vì mỗi bài viết chỉ cho 10 link
1- Mở tập tin XXX.mdb không mật khẩu
2- Mở tập tin Tinhluong.mdb có mật khẩu
3- Các hằng cần khai trước khi duyệt tables
4- Duyệt các Tables
/>Bài sửa của anh HoangThu1974
/>5 AddNew và Update
/>6- Đường dẫn tương đối của file *.mdb
/>7- Mở cùng lúc nhiều tables
/>8- Cách lấy CSDL Access có password từ máy khác
/>9- Cấu trúc vòng lặp: Do While . . . loop trong duyệt recordset
/>10- Nối dữ liệu từ nhiều bảng trong Access2000?
/>11- Nhanh hơn trong truy xuất CSDL
/>

12- Tạo file MDB bằng code
/>13- Tạo một field mới trong table đang tồn tại
/>14- Các thông số cho định dạng field được tạo
/>15- Tạo Table mới kèm fields
/>16- Xóa field
/>17- Lưu ý Reference Object
/>18- Xóa toàn bộ các Records, Table chỉ còn các fields trống rỗng:
/>19- Xóa luôn Table, Dùng Access
19- Xóa luôn Table, Dùng ADODB
/>20- Lệnh Find trong ADODB
/>21- Làm sao khi ADODB.Recordset không cho mở giá trị NULL?



/>22- 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)
/>23- Bài tập Tính điểm chênh lệch giữa các ngày
/>24- Tìm trong Database với mệnh đề WHERE
/>25- Làm sao để kết nối đến cơ sở dữ liệu Server.
/>26- Datagird có để đặt Setfocus cho 1 ô bất kỳ ?
/>27- Export dữ liệu từ excell vào access bằng VB6
a- Chuyển file dữ liệu Excel sang file Access
b- Access qua Excel
/>28- Truy xuất bản ghi thứ 20 trong database
/>29- Câu lệnh SQL trong vb
/>30- Datagrid dùng các câu lệnh kết nối
/>31- Lỗi kết nối CSDL Access
/>32- Xử lý lỗi
/>

33- Lỗi gọi hàm trong thư viện
/>34- Hỏi cách xem cấu trúc của database SQL trong VB
/>Bài viết anh HoangThu1974 về Add ActiveX
/>35- Hỏi cách đọc CSDL master trong SQL
/>36- Dùng lệnh Find với nhiều điều kiện
/>37- Kỹ thuật truy xuất nhanh CSDL
/>38- Hiển thị nhanh 5 dòng đầu của table ngay khi kết nối
/>39- Điều chỉnh độ rộng cột dữ liệu trong MsFlexGrid và tạo màu khác nhau
cho các dòng dữ liệu
/>40- Giải thích dùm câu báo lỗi này trong VB: Parameters Xephang has no
default valid.
/>41- Thu nhỏ tập tin MDB
/>42- Lỗi Update CSDL. Xem thêm để rút kinh nghiệm

/>43- TextBox thể hiện giá trị record khi click vào 1 hàng của dataGrid
/>44- Chọn n bản ghi cuối Danh sách không sắp xếp!
/>

45- Tự động thêm, xoá dòng trong CSDL
/>46- Phân tích câu lệnh trong kết nối và truy xuất dữ liệu
/>47- Bắc buộc dùng sau câu truy vấn "SELECT...": Do While not
Recordset.EOF?
/>48- Tài liệu học tập bằng tiếng Việt: Đối tượng dữ liệu ActiveX
/>49- Cách lưu dấu (') trong sql server từ VB6
50- Định dạng khổ giấy của Report nằm ngang?
/>51- Truy vấn biến đổi Field
/>52- cách sử dụng câu truy vấn "select" khi chọn 1 date bất kỳ ?
53- "Runtime 3021: error Either EOF and BOF is true,or current record has
been deleted
/>54- Truy vấn nhiều Table
/>55- Adodc1.Recordset.Filter không làm việc được
/>56- DataGrid báo lỗi: Run-time error '7004' The Rowset is not
bookmarkable
/>57- Tạo một Table tạm thời
/>58- Đánh số thứ tự trong DataReport


/>59- Hiệu chỉnh các Records trong một Field
/>60- Kết nối CSDL chỉ dùng Recordset, không dùng Connection!
/>Bài viết xuanquy_th Set Control.DataSource
/>Bài viết thuytrang2542000 giải thích bài trên
/>61-Link các textbox với Recordset bằng code
/>Bài viết của TTD hướng dẫn lập trình CSDL
/>62- Xác định field nào là autonumber và field nào là (primary) key

/>63- Sắp xếp cột ASC hay DESC và chọn TOP
/>Bài viết xuanquy_th về Xác định field nào là autonumber và field nào là
(primary) key
/> />63b- Function toàn vẹn tìm Primary Key và ID Autonumber
/>64- SQL Tutorial (Tiếng Anh)
/> /> />f=7&t=3942&start=100#p27604


/>f=7&t=3942&start=100#p27935
/>f=7&t=3942&start=100#p28177
chuyển tác ( Transactions)
/>f=7&t=3942&start=100#p27832
65- Thiết kế Report
/>f=7&t=3942&start=100#p28425
66- Lỗi Update
/>f=7&t=3942&start=100#p28426
67- Xếp hạng khi đồng điểm trong vb
/>f=7&t=3942&start=100#p28427
68- Lệnh tìm kiếm trong SQL: Like
/>f=7&t=3942&start=100#p28428
69- code tính điểm trung bình trong vb
/>f=7&t=3942&start=100#p28429
70- Trị RecordCount liên quan các hằng con trỏ
/>f=7&t=3942&start=100#p28433
Bài viết của manhtung mở kết nối trong c# và trả về tất cả các bảng trong
file access
/>f=7&t=3942&start=100#p28436
Bài viết của manhtung hàm export data to excel trong C#
/>


f=7&t=3942&start=100#p28437
72- Liệt kê dữ liệu khi trùng khóa chính trong vb6.
/>f=7&t=3942&start=120#p28439
73- Tạo Datareport lọc dữ liệu từ nhiều bảng
/>f=7&t=3942&start=120#p28441
Bài viết về nhầm ngày
/>f=7&t=3942&start=120#p28453
74- Làm thế nào để lấy những record bị trùng ?
/>f=7&t=3942&start=120#p28468
75- file CSDL nào thích hợp VB6?
/>f=7&t=3942&start=120#p28472
Tránh nhầm ngày tháng
/>f=7&t=3942&start=120#p28482
project về STT trong DataReport
/>76- Kết nối đến CSDL trên Internet
/>f=7&t=3942&start=120#p28773
77- DataReport không cập nhật
/>f=7&t=3942&start=120#p28775
78- Nhập Dữ liệu không trùng
/>f=7&t=3942&start=120#p28776


79- Lổi khi truy xuất Table có dạng các ký tự đặc biệt
/>f=7&t=3942&start=120#p28777
80- lỗi syntax error của lẹnh update. Không đặt tên Field với chữ 'NO'
/>f=7&t=3942&start=140#p28955
Bài viết thuytrang2542000 hướng dẫn cài đặt SQL 2000
/>f=7&t=3942&start=140#p29065
81- ADO Field Object Type Property
/>f=7&t=3942&start=140#p29302

82- xác định Field Type
/>f=7&t=3942&start=140#p29387
83- Vài điều nhắc khi lập CSDL
/>f=7&t=3942&start=140#p29402
84- Thắc mắc tạo Relationship khi thiết kế Database
/>f=7&t=3942&start=140#p29404
85- các bài tập về Date
/>f=7&t=3942&start=140#p29452
86- Khai báo, mở và đóng các kết nối
/>f=7&t=3942&start=140#p29509
87- Lỗi Run-time error '3021' Either BOF or EOF is true
/>f=7&t=3942&start=160#p29866


88- Chức năng tìm kiếm của Data1
/>f=7&t=3942&start=160#p29939
89- Thắc Mắc Về Vòng Lặp For ....
/>f=7&t=3942&start=160#p29940
90- VB6.0 có thể kiểm tra 1 Table Access đang đóng hay mở ?
/>f=7&t=3942&start=160#p29974
91- Xuất dữ liệu từ datagrid ra excel
/>f=7&t=3942&start=160#p29977
92- câu lệnh Select case với mẫu tin có giá trị Null
/>f=7&t=3942&start=160#p29978
93- Vị trí dòng thú i trong datagrid ?
/>f=7&t=3942&start=160#p29979
94- hỏi về lưới datagrid
/>f=7&t=3942&start=160#p29986
95- Kỹ thuật ghi hình vào file MDB và load hình từ MDB ra Picture1
/>f=7&t=3942&start=160#p29988

96- Giới thiệu Function Coalesce
/>f=7&t=3942&start=160#p30116
Project minh họa ghi hình vào file MDB
/>

97- Nói thêm về kiểm tra trùng record
/>f=7&t=3942&start=180#p30574
98- Lỗi an out-of-range datetime value
/>f=7&t=3942&start=180#p30575
Ứng dụng Client1.exe và Server.exe
/>99- Cách dùng BOF và EOF
/>f=7&t=3942&start=180#p30955
100- Lệnh Find phải được dùng nhiều hơn
/>f=7&t=3942&start=180#p30956
101- Xử lý cột excel sang dòng của access
/>f=7&t=3942&start=180#p30977
102- Ký tự thay thế của Like
/>f=7&t=3942&start=180#p30978
103- Cách phân trang trong datareport
/>f=7&t=3942&start=180#p31022
104- Tính tổng theo điều kiện
/>f=7&t=3942&start=180#p31136
105- Hỏi về cách chuyển nội dung 1 bảng sang bảng mới
/>f=7&t=3942&start=180#p31254
106- Đưa dữ liệu lên gridview với SQL 2000


/>f=7&t=3942&start=180#p31517
107- Chỉ hiện lên Datagrid vài trường
/>f=7&t=3942&start=180#p31518

108- Tối ưu các trường (định dạng Field)
/>f=7&t=3942&start=180#p32224
109- Project mẫu dùng ADODC
/>110- Project mẫu dùng ADODB
/>Kiểm tra trùng record trong field khóa chính
/>Giới hạn Update của Recordset
/>Bài viết về lệnh chạy Query
/>f=7&t=3942&start=200#p32405
xuanquy_th bổ sung
/>f=7&t=3942&start=200#p32410
1- Mở tập tin XXX.mdb không mật khẩu
Mã: Chọn tất cả
Set objConnection = CreateObject("ADODB.Connection") 'Kho'i tao một kêt
nôiobjConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source = XXX.mdb"

2- Mở tập tin Tinhluong.mdb có mật khẩu
Mã: Chọn tất cả
Set objConnection = CreateObject("ADODB.Connection") 'Kho'i tao một kêt
nôiobjConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source =" & App.Path


& "\Tinhluong.mdb;" & _
"Persist Security Info=False;" & _
OLEDB:Database Password =thuytrang"

"Jet

Dùng Data1:
gửi bởi xuanquy_th vào ngày Thứ 6 21/12/2007 7:36 am
Mã: Chọn tất cả

Global DLieu As DatabaseSet DLieu = OpenDatabase("C:\QLBN.mdb", False, False,
";PWD=PassWord")Set Data1.RecordSet=DLieu.OpenRecordSet("Select * From tblName")

gửi bởi thuat vào ngày Chủ nhật 24/02/2008 6:52 pm
Mã: Chọn tất cả
With Data1.DatabaseName = App.Path & "\Data.mdb".RecordSource = "TB_Ho".Connect =
";Pwd=thuat;".RefreshEnd With

3- Các hằng cần khai trước khi duyệt tables: dần dần sẽ hiểu!
CursorTypeEnum Values:
Mã: Chọn tất cả
Const adOpenUnspecified = -1Const adOpenForwardOnly = 0Const adOpenKeyset = 1Const
adOpenDynamic = 2Const adOpenStatic = 3

LockTypeEnum Values:
Mã: Chọn tất cả
Const adLockUnspecified = -1Const adLockReadOnly = 1Const adLockPessimistic = 2Const
adLockOptimistic = 3Const adLockBatchOptimistic = 4

CommandTypeEnum Values:
Mã: Chọn tất cả
Const adCmdUnspecified = -1Const adCmdText = 1Const adCmdTable = 2Const
adCmdStoredProc = 4Const adCmdUnknown = 8Const adCmdFile = 256Const
adCmdTableDirect = 512

ExecuteOptionEnum Values:
Mã: Chọn tất cả
Const adOptionUnspecified = -1Const adAsyncExecute = 16Const adAsyncFetch = 32Const
adAsyncFetchNonBlocking = 64Const adExecuteNoRecords = 128Const adExecuteStream =
256Const adExecuteRecord = 512


EventStatusEnum Values:
Mã: Chọn tất cả
Const adStatusOK = 1Const adStatusErrorsOccurred = 2Const adStatusCantDeny = 3Const
adStatusCancel = 4Const adStatusUnwantedEvent = 5


4- Duyệt các Tables: Duyệt TableYYY
Mã: Chọn tất cả
Set objRecordSet = CreateObject("ADODB.RecordSet") 'Kho'i tao môt bô duyêt các Records' chú
y khai 2 ha`ng sô sau adOpenStatic, adLockOptimisticobjRecordSet.Open "SELECT * FROM
TableYYY", objConnection, adOpenStatic, adLockOptimistic'Duyêt qua Recorset: Goi hàng 1 và
di chuyên Ðên hàng cuôi cùngobjRecordSet.MoveFirst'Ngang Ðây, ta có thê biet sô luong
record:MsgBox objRecordSet.RecordCount'Bat Ðâu duyêt recordDo Until objRecordSet.EOF'. . .
Làm viêc gì o' Ðây trong khi duyêt Recorset: Ví du: MsgBox Item("ComputerName")MsgBox
objRecordSet.Fields.Item("ComputerName")'Nêu muôn, xóa record,
updateobjRecordSet.Delete'objRecordSet.Update '<-- Ðu`ng nên Ðê o Ðây, mà Ðê ngoai vòng
lap'. . .objRecordSet.MoveNextLoopobjRecordSet.Update'Ðóng các kêt
nôiobjRecordSet.CloseobjConnection.Close

Duyệt các Tables: Duyệt TableYYY
Set objRecordSet = CreateObject("ADODB.RecordSet") 'Kho'i tao môt bô
duyêt các Records
' chú y khai 2 ha`ng sô sau adOpenStatic, adLockOptimistic
objRecordSet.Open "SELECT * FROM TableYYY", objConnection,
adOpenStatic, adLockOptimistic
'Duyêt qua Recorset: Goi hàng 1 và di chuyên Ðên hàng cuôi cùng
objRecordSet.MoveFirst
'Ngang Ðây, ta có thê biet sô luong record:
MsgBox objRecordSet.RecordCount

'Bat Ðâu duyêt record
Do Until objRecordSet.EOF
'. . . Làm viêc gì o' Ðây trong khi duyêt Recorset: Ví du: MsgBox
Item("ComputerName")
MsgBox objRecordSet.Fields.Item("ComputerName")
'Nêu muôn, xóa record, update
objRecordSet.Delete
'objRecordSet.Update '<-- Ðu`ng nên Ðê o Ðây, mà Ðê ngoai vòng lap
'. . .
objRecordSet.MoveNext
Loop
objRecordSet.Update
'Ðóng các kêt nôi
objRecordSet.Close
objConnection.Close
1.
2.

Set objRecordSet = CreateObject("ADODB.RecordSet") 'Kho'i tao môt bô duyêt các
Records
' chú y khai 2 ha`ng sô sau adOpenStatic, adLockOptimistic


3.
4.
5.
6.
7.
8.
9.

10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.

objRecordSet.Open "SELECT * FROM TableYYY", objConnection, adOpenStatic,
adLockOptimistic
'Duyêt qua Recorset: Goi hàng 1 và di chuyên Ðên hàng cuôi cùng
'objRecordSet.MoveFirst <-- Chỗ này đổi là
If Not objRecordSet.BOF And objRecordSet.RecordCount > 0 Then
objRecordSet.MoveFirst
'Để tránh trường hợp Recordset rỗng, nó báo lỗi
'Ngang Ðây, ta có thê biet sô luong record:
MsgBox objRecordSet.RecordCount
'Bat Ðâu duyêt record
Do Until objRecordSet.EOF 'Tương tự như Do While Not objRecordSet.EOF
'nhưng nếu duyệt hết Recordset, nên dùng vòng lặp While.. Wend để tăng tốc độ xử lý

DoEvents '<-- Thêm cái này để chống treo chương trình nếu nhiều record quá.
'. . . Làm viêc gì o' Ðây trong khi duyêt Recorset: Ví du: MsgBox
Item("ComputerName")
MsgBox objRecordSet.Fields.Item("ComputerName")
'Nêu muôn, xóa record, update
objRecordSet.Delete
'objRecordSet.Update '<-- Ðu`ng nên Ðê o Ðây, mà Ðê ngoai vòng lap
'. . .
objRecordSet.MoveNext
Loop
objRecordSet.Update
'Ðóng các kêt nôi
objRecordSet.Close
objConnection.Close

5 AddNew và Update
Mã: Chọn tất cả
1.

objRecordSet.Open "SELECT * FROM TableYYY", objConnection, adOpenStatic,
adLockOptimistic
2. ' Ðã khai báo o' trên, viêt tiêp ..
3. 'Goi phuong thu'c AddNew
4. objRecordSet.AddNew
5. 'Câu trúc: objRecordSet("Field Name") = "Field Value"
6. ' nghia là tai field "Category" ghi thêm record "Quán Net"
7. objRecordSet("Category") = "Quán Net"
8. objRecordSet("ComputerName") = "Máy A1"
9. 'tuong tu' nhu' trên . . .
10. objRecordSet("RecordNumber") = "12"

11. objRecordSet("TimeWritten") = "12:30"
12. objRecordSet("UserName") = "Khách"
13.
14. 'Goi phuong thu'c Update
15. objRecordSet.Update

o0o--truongphu--o0o
.........
Ghé thăm:
Chuyện Linh Tinh


truongphu
VIP
Bài viết: 4692
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 11 lần
Được cảm ơn: 431 lần
Đầu trang




Re: Các câu hỏi và trả lời liên quan đến file *.MDB
gửi bởi truongphu » Thứ 5 30/10/2008 6:44 pm

6- Đường dẫn tương đối của file *.mdb
đường dẫn tương đối, nghĩa là đường dẫn tính từ project. Ví dụ:
Mã: Chọn tất cả

1.
2.
3.
4.

cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0 ;" & _
"Data Source =" & App.Path & "\Tinhluong.mdb;" & _
"Persist Security Info=False;" & _
"Jet OLEDB:Database Password =thuytrang"

Cụ thể trong code code trên, đường dẫn là App.Path & "\Tinhluong.mdb
App.Path là vị trí bất kỳ, "tương đối" là thế. Rất tiện phải không?
a- Câu trên có thể viết gọn một chút:
Mã: Chọn tất cả
1.
2.
3.
4.

cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0 ;" & _
"Data Source = Tinhluong.mdb;" & _
"Persist Security Info=False;" & _
"Jet OLEDB:Database Password =thuytrang"


b- Trong một số trường hợp, khi chương trình nằm trực tiếp trên ổ đĩa mà
không ở trong Folder, câu "Data Source =" & App.Path &
"\Tinhluong.mdb;" sẽ bị sai đường dẫn.
Để tổng quát hóa các trường hợp nêu trên, ta phải ghi hơi dài một chút:
Mã: Chọn tất cả

1.
2.
3.
4.
5.
6.

Dim Path$:
Path=App.Path
If Right(Path, 1) <> "\" Then Path = Path & "\"
cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0 ;" & _
"Data Source =" & Path & "Tinhluong.mdb;" & _
"Persist Security Info=False;" & _
"Jet OLEDB:Database Password =thuytrang"

c- Nói thêm cho rõ:
* Nếu DataSource nằm cùng folder với chương trình, ta ghi:
-->
Mã: Chọn tất cả
1.

"Data Source = Tinhluong.mdb;"

* Nếu DataSource nằm trong một folder, mà Folder ấy mới nằm cùng
chương trình, ta ghi:
--->
Mã: Chọn tất cả
1.
2.
3.


Dim Path$:
Path=App.Path
If Right(Path, 1) <> "\" Then Path = Path & "\"
"Data Source =" & Path & "Tên Folder\Tinhluong.mdb;"

7- Mở cùng lúc nhiều tables
Mã: Chọn tất cả
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

Const adOpenStatic = 3
Const adLockOptimistic = 3
'Tâp tin db1.mdb có 3 Table1, Table2, table3 có ít du liêu trong môi Table
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
Set objRecordSet2 = CreateObject("ADODB.Recordset")
Set objRecordSet3 = CreateObject("ADODB.Recordset")
objConnection.Open "Provider= Microsoft.Jet.OLEDB.4.0; " & "Data Source=db1.mdb"

objRecordSet.Open "SELECT * FROM Table1", objConnection, adOpenStatic,

adLockOptimistic
12. objRecordSet.MoveFirst
13.


9- Cấu trúc vòng lặp: Do While . . . loop trong duyệt recordset
gửi bởi longtep vào ngày Thứ 7 25/10/2008 8:30 pm
Mã: Chọn tất cả
1.
2.
3.
4.

Do While Not rs.EOF
A(n) = rs.Fields("HOVATEN")
n=n+1
Loop

10- Nối dữ liệu từ nhiều bảng trong Access2000?
gửi bởi thanhlv vào ngày Thứ 7 25/08/2007 12:22 am
đây là cách nối DL cũng khá cơ bản,nguồn pcworld.com.vn
Nếu lập trình bằng VB 6.0, bạn có thể dùng các đối tượng ADO để truy xuất
database cho dễ dàng và độ tin cậy cao. Các đối tượng ADO thường dùng là
Connection, Recordset, Command. Sau đây là qui trình điển hình để xây
dựng 1 ứng dụng VB copy dữ liệu từ table của database này sang database
khác:
1. Để đoạn code VB độc lập với công nghệ database mà nó truy xuất, bạn
hãy định nghĩa 2 DSN (Data Source Name) kết hợp với 2 database cần truy
xuất: database chứa table nguồn và database chứa table đích. Để định nghĩa
1 DSN kết hợp với 1 database, từ Windows, bạn hãy vào Control

Panel.Administrative Tools.Datasource (ODBC).
2. Chạy VB, tạo project quản lý ứng dụng dạng "Standard EXE". Sau khi
Form trống được tạo ra, bạn hãy thiết kế trực quan form có dạng như sau:
Hãy đặt tên cho 3 textbox lần lượt là txtTable, txtDSN1, txtDSN2. Đặt tên
cho Button là btnStart. Nhấn kép chuột vào button Start để tạo thủ tục xử lý
sự kiện Click cho nó, cửa sổ soạn code sẽ hiển thị.
3. Chọn menu Projects.References, duyệt tìm và chọn mục "Microsoft
ActiveX Data Objects 2.x Library" rồi nhấn button Ok để "add" thư viện
chứa các đối tượng ADO vào Project ứng dụng.
4. Viết thủ tục xử lý Click chuột cho button Start như sau:
Mã: Chọn tất cả
1.
2.
3.

'Thủ tục xử lý Click chuột vào button Start
Private Sub btnStart_Click()
'Khai báo các biến cần dùng


4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.

44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.

Dim Connection1 As ADODB.Connection
Dim Connection2 As ADODB.Connection
Dim Command1 As ADODB.Command
Dim Command2 As ADODB.Command
Dim RecordSet1 As ADODB.Recordset
Dim RecordSet2 As ADODB.Recordset
Dim strSQL As String
Dim strBuf As String
'Tạo connection tới database nguồn
Set Connection1 = New ADODB.Connection
Connection1.Open "DSN=" & txtDSN1.Text
'Tạo recordset chứa các data của table nguồn
Set RecordSet1 = New ADODB.Recordset
RecordSet1.Open txtTable.Text, Connection1, adOpenStatic, adLockReadOnly,

adCmdTable
'Tạo connection tới database đích
Set Connection2 = New ADODB.Connection
Connection2.Open "DSN=" & txtDSN2.Text
'Tạo command làm việc với database đích
Set Command2 = New ADODB.Command
Command2.ActiveConnection = Connection2
'xây dựng SQL tạo Table đích
strSQL = "CREATE TABLE " & txtTable.Text & "("
'duyệt tìm từng field của table nguồn
fStart = 1
For Each fld In RecordSet1.Fields
'tìm tên và kiểu của field
Select Case fld.Type
Case 2
strBuf = "Integer"
Case 3
strBuf = "Long"
Case 5
strBuf = "Currency"
Case 6
strBuf = "Double"
Case 11
strBuf = "Logical"
Case 202
strBuf = "Text"
Case 135
strBuf = "Date"
Case Else
MsgBox "Type với mã " & fld.Type & "chưa được xử lý!!!"

End Select
If fStart Then
strSQL = strSQL & fld.Name & " " & strBuf
fStart = 0
Else
strSQL = strSQL & ", " & fld.Name & " " & strBuf
End If
Next fld
strSQL = strSQL & ")"
'Tạo table trên database đích có cùng cấu trúc như table nguồn
Command2.CommandText = strSQL


59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.

76.
77.
78.
79.
80.

Command2.Execute
'Tạo recordset quản lý dữ liệu của table đích
Set RecordSet2 = New ADODB.Recordset
RecordSet2.Open txtTable.Text, Connection2, adOpenKeyset, adLockOptimistic,
adCmdTable
'duyệt copy từng record từ nguồn sang đích
While Not RecordSet1.EOF
'tạo record mới trên table đích
RecordSet2.AddNew
For i = 0 To RecordSet1.Fields.Count - 1
'copy nội dung của field
RecordSet2.Fields(i).Value = RecordSet1.Fields(i).Value
Next i
RecordSet2.Update
'di chuyển đến record kế
RecordSet1.MoveNext
Wend
'đóng các đối tượng đã dùng lại
RecordSet1.Close
Connection1.Close
Connection2.Close
End Sub

5. Chọn menu Run.Start để chạy thử ứng dụng. Khi Form hiển thị, bạn hãy

thử nhập tên của table cần copy, tên của DSN miêu tả database chứa table
nguồn, tên của DSN miêu tả database đích rồi nhấn button Start.
Lưu ý nếu 2 database nguồn và đích được tạo ra bởi 2 hệ quản trị database
khác nhau (Foxpro, Access, SQL Server, MySQL, Oracle...) thì có thể xuất
hiện vấn đề không tương thích về kiểu dữ liệu của các field dữ liệu. Một lưu
ý khác là đoạn code VB do chúng tôi viết chỉ chứa những hoạt động thiết
yếu, chứ chưa đầy đủ, còn thiếu những đoạn code xử lý lỗi cho từng hoạt
động truy xuất database. Để có được ứng dụng hoàn chỉnh, bạn cần bổ sung
thêm những hoạt động xử lý lỗi còn thiếu.

11- Nhanh hơn trong truy xuất CSDL
Khi mở một new project, bạn chỉ cần chép code sau là chạy
Mã: Chọn tất cả
1.
2.

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.RecordSet")

Tuy nhiên tốc độ thực thi sẽ chậm, chỉ thích hợp cho dữ liệu nhỏ


Với code sau, chạy sẽ báo lỗi:
Mã: Chọn tất cả
1.
2.

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset


Khắc phục bằng cách: Project \ References \ chọn Microsoft ActiveX Data
Objects 2.8 library
Trường hợp nầy tốc độ thực thi sẽ nhanh hơn nhiều, thích hợp dữ liệu lớn.
Khi viết code được nhắc
gửi bởi hoangthu1974 vào ngày 30/10/2008 3:53 pm
Tương tự như Do While Not objRecordSet.EOF . . . Loop
nhưng nếu duyệt hết Recordset, nên dùng vòng lặp While.. Wend để tăng
tốc độ xử lý
DoEvents '<-- Thêm cái này để chống treo chương trình nếu nhiều record
quá.
Tạo file MDB bằng code
Mã: Chọn tất cả
1. Dim cat As New ADOX.Catalog
2.

MDB có mật khẩu:
Mã: Chọn tất cả
1.

cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dir$ &
"\filename.mdb" & ";Jet OLEDB:Database Password=" & strPwd & ";"

MDB không mật khẩu:
Mã: Chọn tất cả
1.

cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dir$ &
"\filename.mdb" & ";"

Tạo Table trong file MDB

Mã: Chọn tất cả
1.
2.
3.
4.
5.

Dim rsTable New ADOX.Table
With rsTable
.Name = "TableName"
.Columns.Append "ID", adInteger
.Columns.Append "Field1", FieldType, FieldWidth


6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.

.Columns.Append "Field2", adVarWChar, 50
.Columns.Append "Field3", adBoolean

.Columns.Append "Field4", adDouble
.Columns("Field2").Attributes = adColNullable 'Cho phép Null
.Columns("Field4").Properties("Default").Value = 0 'Giá trị mặc định là 0
With .Columns("ID")
Set .ParentCatalog = cat 'Very important
.Properties("AutoIncrement") = True 'Tự động tăng số
.Properties("Seed") = n 'Mỗi lần tự động tăng n
End With
End With
cat.Tables.Append rsTable

- Giải pháp tính tiền cho mọi người!

hoangthu1974
Guru
Bài viết: 810
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





Đầu trang





Re: Các câu hỏi và trả lời liên quan đến file *.MDB
gửi bởi truongphu » Thứ 6 31/10/2008 10:02 am


13- Tạo một field mới trong table đang tồn tại
Code sau đây tạo field "qqq" text 50 ký tự trong table1 có sẵn của file
db1.mdb
Mã: Chọn tất cả
1.
2.
3.
4.

Private Sub CreateField(AccessPath$, TableName$)
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" &
AccessPath
objConnection.Execute "alter table Table1 ADD COLUMN qqq Text(50)" '<- thêm
côt qqq trong table
objConnection.Close ' Câu trên, thay tên table và tên Field thích ho'p
End Sub

5.
6.
7.
8. Private Sub Form_Load()
9. Call CreateField("C:\db1.mdb", "Table1")
10. End Sub

Hay không?

o0o--truongphu--o0o
.........
Ghé thăm:
Chuyện Linh Tinh

truongphu
VIP
Bài viết: 4692
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Đã cảm ơn: 11 lần
Được cảm ơn: 431 lần
Đầu trang




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


gửi bởi truongphu » Thứ 6 31/10/2008 2:23 pm

14- Các thông số cho định dạng field được tạo
Mã: Chọn tất cả
1.

objConnection.Execute "alter table Table1 ADD COLUMN qqq Text(50)"

qqq TEXT(50) định dạng TEXT 50 ký tự, mặc định cho phép 255 ký tự
qqq TEXT cho phép 255 ký tự

qqq COUNTER định dạng AutoNumber
qqq INTEGER
qqq DATETIME
qqq MEMO cho phép trên 255 ký tự

5- Tạo Table mới kèm fields, viết bằng VBA như trên
Mã: Chọn tất cả
1.
2.
3.
4.
5.

Private Sub CreateField2(AccessPath$)
'Tao table mo'i "Table2" kèm fields "ID" và "qqq"
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" &
AccessPath
objConnection.Execute "CREATE TABLE Table2(" & "ID COUNTER ," & "qqq
MEMO)"
objConnection.Close ' Câu trên, thay tên table và tên Field thích ho'p
End Sub

6.
7.
8.
9. Private Sub Form_Load()
10. Call CreateField2("C:\db1.mdb")
11. End Sub
12.


16- Xóa field
Mã: Chọn tất cả
1.
2.
3.
4.
5.
6.

Private Sub DelField(AccessPath$)
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" &
AccessPath
objConnection.Execute "alter table Table1 drop column qqq " '<- huy côt qqq trong
table
objConnection.Close ' Câu trên, thay tên table và tên Field thích ho'p
End Sub


7.
8. Private Sub Command1_Click()
9. Call DelField("C:\db1.mdb")
10. End Sub
11.

17- Lưu ý Reference Object
hoangthu1974 đã viết:Các bạn mới làm code chú ý, đừng sử dụng lệnh
CreateObject để tạo các Reference Object vì:
1. Cách này ít gây lỗi nhưng sẽ khó đóng gói vì chương trình đóng gói

không truy vấn được các Reference Object.
2. Các bạn không biến trong Object có các Property hay Event nào để sử
dụng.
Ví dụ:
Số dòng Bật/Tắt | Mở rộng/Thu gọn | Chọn tất cả
Dim Bien
Set Bien = CreateObject("scripting.FileSystemObject")
Thay bằng:
Số dòng Bật/Tắt | Mở rộng/Thu gọn | Chọn tất cả
Dim Bien As New Scripting.FileSystemObject
Khi nào thành Expert rồi hay dùng CreateObject.
Để viết:
Mã: Chọn tất cả
1.
2.

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

-> Project \ References \ chọn Microsoft ActiveX Data Objects 2.8 library
Để viết:
Mã: Chọn tất cả
1.
2.

Dim cat As New ADOX.Catalog
Dim rsTable New ADOX.Table

--> Project \ References \ chọn Microsoft ADO Ext 2.8 for DDL and
Security

Để viết:


×