banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows [Thảo luận] Tạo file Access trong ứng dụng C++ MFC  XML
  [Programming]   [Thảo luận] Tạo file Access trong ứng dụng C++ MFC 02/12/2008 21:44:53 (+0700) | #1 | 161048
VaT
Member

[Minus]    0    [Plus]
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
[Profile] [PM]
Bình thường chúng ta có thể truy xuất CSDL từ một file Access (đã được tạo sẵn bằng Microsoft Acess) từ ứng dụng C++ MFC bằng các Class CDatabase và CRecordset. Nhưng giờ nếu chúng ta muốn tạo một file Access từ ứng dụng của chúng ta thì như thế nào. Qua tìm hiểu, em có biết 2 cách sau để tạo ra 1 file Access từ ứng dụng C++ MFC như sau:

Cách 1 :

Code:
- Khai báo : CDaoDatabase newAccessFile;
- Khởi tạo : newAccessFile.Create("Test.mdb");
- Xây dựng CSDL trong file Test.mdb: Bằng cách dùng hàm Execute(Sqlcommand)
  Trong đó : Sqlcommand là các câu lệnh của Sql như : Creat table, Insert field,...



Cách 2 :
Code:
- Cũng khai báo : CDaoDatabase newAccessFile;
- Khởi tạo : newAccessFile.Create("Test.mdb");
- Xây dựng CSDL trong file Test.mdb: Bằng cách sử dụng thêm Class CDaoTableDef. Cụ thể:
   + Khởi tạo Table : CDaoTableDef newAccessTable(&newAccessFile);
   + Tạo table : newAccessTable.Create(_("TestTable"); // Có một số thông số khác nếu cần thiết//
   + Tạo field trong table : newAccessTable.CreateField(_("TestField1"),dblong,dbAutoIncrField) 
   + Xác nhận tạo table xong : newAccessTable.Append();
   + Tạo nội dung cho field: newAcessTable.Excute(SqlCmd);


Khi em dùng Cách 1 thì mọi việc đều suôn sẽ, có nghĩa là em tạo file Access đó từ ứng dụng của em xong, em mở nó bằng Microsoft Acess thì nó hiện ra đầy đủ những gì em đã tạo.

Nhưng khi em dùng Cách 2 thì nó chỉ tạo ra file Access, còn những nội dung trong file Access đó như table name, field, content ,.. thì lại không có.

Có điều, em thấy nếu dùng Cách 2 thì rất thuận tiện cho việc coding, chỉnh sủa và nâng cấp vì các bước rất rõ ràng nhưng em không thể hiểu tại sao Cách 2 lại không thể cho ra kết quá như Cách 1 được. Phải chăng có sự sai sót nào trong Cách 2 này của em. Nếu có anh chị nào đã từng làm qua điều này và có kinh nghiệm thì mong được thảo luận ở đây để em và những ai đang tìm hiểu về vấn đề này được rõ.

P/S : Còn một vấn đề nữa, mà có thể em sẽ đề cập ở bài Thảo luận sau khi đã tìm hiểu là : Truy cập vào file Access 2007.
[Up] [Print Copy]
  [Question]   Re: [Thảo luận] Tạo file Access trong ứng dụng C++ MFC 03/12/2008 20:48:41 (+0700) | #2 | 161161
VaT
Member

[Minus]    0    [Plus]
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
[Profile] [PM]
Vấn đề này có vẻ ít bạn quan tâm đến. Đến giờ mình vẫn chưa biết làm cách nào để khắc phục được lỗi của Cách 2. Nếu có bạn nào đã làm qua vấn đề này thì có thể chỉ điểm dùm mình được không?
[Up] [Print Copy]
  [Question]   Re: [Thảo luận] Tạo file Access trong ứng dụng C++ MFC 04/12/2008 16:47:02 (+0700) | #3 | 161267
VaT
Member

[Minus]    0    [Plus]
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
[Profile] [PM]
Oh, mình đã biết mình bị lỗi ở đâu. Té ra trong đống code tạo table và field

Code:
qlCreateTable.CreateField(_T("IDUSER"),dbInteger,2,dbAutoIncrField);
qlCreateTable.CreateField(_T("HOTEN"),dbText,255,dbVariableField);
qlCreateTable.CreateField(_T("NGAYSINH"),dbDate,8,dbUpdatableField);


thì đoạn code :

Code:
qlCreateTable.CreateField(_T("IDUSER"),dbInteger,2,dbAutoIncrField);


gây ra lỗi, nên không thể tạo được table name và các field còn lại. Mình sẽ tìm hiểu xem tại sao bị lỗi đó. Nhưng theo phỏng đoán chắc là do tham số dbAutoIncreField gây ra, vì nó có liên quan đến Primary Key trong Access thì phải.

---------------------------------------

P/S : Nếu các bạn làm về vấn đề này thì có thể tham khảo thêm CDaoFieldInfo.
Thư viện cần thêm : "afxdao.h"

Cảm ơn các bạn đã đọc.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|