79- Lổi khi truy xuất Table có dạng các ký tự đặc biệt... Để 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.. "Data Source = Tinhluong.mdb;" * Nếu
Trang 1Tậ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
Trang 212- Tạo file MDB bằng code
19- Xóa luôn Table, Dùng Access
19- Xóa luôn Table, Dùng ADODB
Trang 327- 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
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=20#p24770
28- Truy xuất bản ghi thứ 20 trong database
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=20#p2477329- Câu lệnh SQL trong vb
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=20#p25068
Trang 433- Lỗi gọi hàm trong thư viện
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=40#p25381
Trang 545- Tự động thêm, xoá dòng trong CSDL
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?
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=60#p25683
51- Truy vấn biến đổi Field
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=60#p25751
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
Trang 663b- Function toàn vẹn tìm Primary Key và ID Autonumber
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=80#p27333
64- SQL Tutorial (Tiếng Anh)
http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=80#p27491http://caulacbovb.com/forum/viewtopic.php?f=7&t=3942&start=80#p27546http://caulacbovb.com/forum/viewtopic.php?
f=7&t=3942&start=100#p27604
Trang 979- Lổi khi truy xuất Table có dạng các ký tự đặc biệt
Trang 1088- Chức năng tìm kiếm của Data1
Trang 1197- Nói thêm về kiểm tra trùng record
Trang 12Set 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
Trang 13& "\Tinhluong.mdb;" & _ "Persist Security Info=False;" & _ "Jet OLEDB:Database Password =thuytrang"
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
Const adCmdUnspecified = -1Const adCmdText = 1Const adCmdTable = 2Const
adCmdStoredProc = 4Const adCmdUnknown = 8Const adCmdFile = 256Const
EventStatusEnum Values:
Mã: Chọn tất cả
Const adStatusOK = 1Const adStatusErrorsOccurred = 2Const adStatusCantDeny = 3Const adStatusCancel = 4Const adStatusUnwantedEvent = 5
Trang 144- 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,
Trang 153 objRecordSet.Open "SELECT * FROM TableYYY" , objConnection, adOpenStatic, adLockOptimistic
4 'Duyêt qua Recorset: Goi hàng 1 và di chuyên Ðên hàng cuôi cùng
5 'objRecordSet.MoveFirst < Chỗ này đổi là
6 If Not objRecordSet.BOF And objRecordSet.RecordCount > 0 Then
objRecordSet.MoveFirst
7 'Để tránh trường hợp Recordset rỗng, nó báo lỗi
8 'Ngang Ðây, ta có thê biet sô luong record:
9 MsgBox objRecordSet.RecordCount
10 'Bat Ðâu duyêt record
11 Do Until objRecordSet.EOF 'Tương tự như Do While Not objRecordSet.EOF
12 '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ý
13 DoEvents '< Thêm cái này để chống treo chương trình nếu nhiều record quá.
14 ' Làm viêc gì o' Ðây trong khi duyêt Recorset: Ví du: MsgBox
Item("ComputerName")
15 MsgBox objRecordSet.Fields.Item( "ComputerName" )
16 'Nêu muôn, xóa record, update
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
Trang 16Re: 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 cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0 ;" & _
2 "Data Source =" & App.Path & "\Tinhluong.mdb;" & _
3 "Persist Security Info=False;" & _
4 "Jet OLEDB:Database Password =thuytrang"
Cụ thể trong code code trên, đường dẫn là App.Path & "\Tinhluong.mdbApp.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 cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0 ;" & _
2 "Data Source = Tinhluong.mdb;" & _
3 "Persist Security Info=False;" & _
4 "Jet OLEDB:Database Password =thuytrang"
Trang 17b- 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 Dim Path$: Path=App.Path
2 If Right(Path, 1) <> "\" Then Path = Path & "\"
3 cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0 ;" & _
4 "Data Source =" & Path & "Tinhluong.mdb;" & _
5 "Persist Security Info=False;" & _
6 "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 Dim Path$: Path=App.Path
2 If Right(Path, 1) <> "\" Then Path = Path & "\"
3 "Data Source =" & Path & "Tên Folder\Tinhluong.mdb;"
7- Mở cùng lúc nhiều tables
Mã: Chọn tất cả
1 Const adOpenStatic = 3
2 Const adLockOptimistic = 3
3 'Tâp tin db1.mdb có 3 Table1, Table2, table3 có ít du liêu trong môi Table
4 Set objConnection = CreateObject( "ADODB.Connection" )
5 Set objRecordSet = CreateObject( "ADODB.Recordset" )
6 Set objRecordSet2 = CreateObject( "ADODB.Recordset" )
7 Set objRecordSet3 = CreateObject( "ADODB.Recordset" )
Trang 189- 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
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ấtdatabase 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 'Thủ tục xử lý Click chuột vào button Start
2 Private Sub btnStart_Click()
3 'Khai báo các biến cần dùng
Trang 194 Dim Connection1 As ADODB.Connection
5 Dim Connection2 As ADODB.Connection
6 Dim Command1 As ADODB.Command
7 Dim Command2 As ADODB.Command
8 Dim RecordSet1 As ADODB.Recordset
9 Dim RecordSet2 As ADODB.Recordset
10 Dim strSQL As String
11 Dim strBuf As String
12 'Tạo connection tới database nguồn
13 Set Connection1 = New ADODB.Connection
14 Connection1.Open "DSN=" & txtDSN1.Text
15 'Tạo recordset chứa các data của table nguồn
16 Set RecordSet1 = New ADODB.Recordset
17 RecordSet1.Open txtTable.Text, Connection1, adOpenStatic, adLockReadOnly, adCmdTable
18 'Tạo connection tới database đích
19 Set Connection2 = New ADODB.Connection
20 Connection2.Open "DSN=" & txtDSN2.Text
21 'Tạo command làm việc với database đích
22 Set Command2 = New ADODB.Command
23 Command2.ActiveConnection = Connection2
24 'xây dựng SQL tạo Table đích
25 strSQL = "CREATE TABLE " & txtTable.Text & "("
26
27 'duyệt tìm từng field của table nguồn
28 fStart = 1
29 For Each fld In RecordSet1.Fields
30 'tìm tên và kiểu của field
31 Select Case fld.Type
Trang 2059 Command2.Execute
60 'Tạo recordset quản lý dữ liệu của table đích
61 Set RecordSet2 = New ADODB.Recordset
62 RecordSet2.Open txtTable.Text, Connection2, adOpenKeyset, adLockOptimistic, adCmdTable
63 'duyệt copy từng record từ nguồn sang đích
64 While Not RecordSet1.EOF
65 'tạo record mới trên table đích
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
Trang 21Với code sau, chạy sẽ báo lỗi:
Mã: Chọn tất cả
1 Dim cn As New ADODB.Connection
2 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
1 cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dir$ & "\
filename.mdb" & ";Jet OLEDB:Database Password=" & strPwd & ";"
4 .Columns.Append "ID" , adInteger
5 .Columns.Append "Field1" , FieldType, FieldWidth
Trang 226 .Columns.Append "Field2" , adVarWChar, 50
7 .Columns.Append "Field3" , adBoolean
8 .Columns.Append "Field4" , adDouble
9 .Columns( "Field2" ).Attributes = adColNullable 'Cho phép Null
10 .Columns( "Field4" ).Properties( "Default" ).Value = 0 'Giá trị mặc định là 0
11 With Columns( "ID" )
12 Set ParentCatalog = cat 'Very important
13 Properties( "AutoIncrement" ) = True 'Tự động tăng số
14 Properties( "Seed" ) = n 'Mỗi lần tự động tăng n
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
Trang 2313- 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 Private Sub CreateField(AccessPath$, TableName$)
2 Set objConnection = CreateObject( "ADODB.Connection" )
3 objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & AccessPath
4 objConnection.Execute "alter table Table1 ADD COLUMN qqq Text(50)" '<- thêm côt qqq trong table
5 objConnection.Close ' Câu trên, thay tên table và tên Field thích ho'p
6 End Sub
7
8 Private Sub Form_Load()
9 Call CreateField( "C:\db1.mdb" , "Table1" )
Trang 24gử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 Private Sub CreateField2(AccessPath$)
2 'Tao table mo'i "Table2" kèm fields "ID" và "qqq"
3 Set objConnection = CreateObject( "ADODB.Connection" )
4 objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & AccessPath
5 objConnection.Execute "CREATE TABLE Table2(" & "ID COUNTER ," & "qqq MEMO)"
6 objConnection.Close ' Câu trên, thay tên table và tên Field thích ho'p
1 Private Sub DelField(AccessPath$)
2 Set objConnection = CreateObject( "ADODB.Connection" )
3 objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & AccessPath
4 objConnection.Execute "alter table Table1 drop column qqq " '<- huy côt qqq trong table
5 objConnection.Close ' Câu trên, thay tên table và tên Field thích ho'p
6 End Sub