Xây dựng phần mềm, thiết kế website, cung cấp giải pháp
Học lập trình viên tại Aptech

Quay lại   Cộng đồng C Việt > DATABASE & REPORTING | CÁC HỆ QUẢN TRỊ DATABASE > Thắc mắc về Microsoft SQL Server & Microsoft Access

Cộng đồng C Việt, Lập trình, tuyển lập trình, tuyển lập trình game
Trả lời
 
Các công cụ đề tài Các chế độ hiển thị
  #1  
Cũ 16-01-2008, 04:15 PM
Avatar củawebshot
webshot webshot là offline
Thành viên chính thức
 
Ngày gia nhập: 12 2007
Bài viết: 66
Mặc định

Cập nhập vào dataset và datasource


mình đã fill từ datasource vào dataset rồi cho show ra một cái listview ( ko dùng datagrideview) sau đó chỉnh sửa dữ liệu trên listview ( thêm các hàng, xóa ,sửa các giá trị của ô listview). bây h làm sao cập nhập nó lại dataset được nhỉ ( mình đã tạo ra một cái datatable rồi)
và câu hỏi thứ 2 ( quan trọng hơn +_+)
đấy là sau khi cập nhập lại được rồi thì làm sao cập nhập lại datasource được
mình xem nhiều cách nhưng chưa chạy được vì
cái của mình ko phải là mỗi lần người dùng sửa một cai thì nó update luôn, mà mình cho họ chỉnh sửa , thêm , xóa chán chê mê mỏi trên listview. cuối cùng khi bấm thoát thì chương trình mới lưu tất cả lại datasource. +_+ như vậy với các cách mình xem trong diễn đàn ( viết sqlcommand) thì mình chịu vì ở đây người dùng vừa xóa , sửa , cập nhập vậy có cách nào xử lý ko các bạn
thank nhìu +_+
Trả lời cùng với trích dẫn
  #2  
Cũ 16-01-2008, 09:24 PM
Avatar củahuynguyen
huynguyen huynguyen là offline
Power Member
 
Ngày gia nhập: 11 2006
Bài viết: 1,074
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Ko nên làm thế vì khó kiểm soát chương trình và chi phí cho việc thực hiện quá lớn. Để tôi gợi ý bạn làm nhé:
Đầu tiên khống chế list view để user ko được phép chỉnh sửa, chỉ được phép xem và di chuyển.
Khi user chọn chức năng sửa thì chỉ dòng nào được xác định mới được phép bật lên để chỉnh sửa thôi. Sau khi sửa xong bấm xác nhận và bạn sẽ đưa các đối tượng của dòng đó vào 1 lớp gồm các biến như các field trong table, sau đó dùng câu lệnh sql để update lại dữ liệu. Sau đó lại khống chế list view
Khi user chọn chức năng thêm mới thì tạo thêm dòng mới và chỉ dòng đó được phép thêm dữ liệu. Sau khi bấm xác nhận thì tương tự như sửa.
Khi user delete thì chỉ delete đúng dòng được chọn thôi.
Nếu bạn ko tương tác trực tiếp được trên list view thì nên tạo các textbox để người dùng chỉnh sửa rồi sau đó cập nhật vào table.
Nếu bạn vẫn muốn làm theo cách của mình thì tốt nhất là thế này:
Dùng vòng lặp for để duyệt hết listview, tại mỗi dòng ta dùng câu lệnh sql để kiểm tra xem id đã tồn tại trong table chưa, nếu rồi thì update, nếu chưa thì insert, chống chỉ định cho việc delete (ko xử lý được trường hợp này).
Nhưng thông thường thì ko ai cho phép bạn làm bấy nhầy cái table rồi mới cập nhật vào datasource cả.
__________________
Trả lời cùng với trích dẫn
  #3  
Cũ 17-01-2008, 12:26 PM
Avatar củadarkan
darkan darkan là offline
:..:BookWorm:..:
 
Ngày gia nhập: 11 2007
Bài viết: 469
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Thực ra cái này vẫn làm được!
Với datarow của ADO.NET có cả trạng thái.Khi bạn xóa 1 row trong datatable thì nó sẽ bị chuyển trạng thái thành delete chứ ko bị xóa thật.Khi add mới thì trạng thái sẽ là addnew....
Bạn có thể dựa vào trạng thái đó để cập nhật.
Viết sqlcommand cũng dựa vào trạng thái này.Bạn có thể tìm hiểu thêm về sqlcommand.Nó cho phép bạn làm nhiều thao tác chứ ko như bạn nghĩ đâu.
@huynguyen:Thông thường thì làm theo cách của bạn rất an toàn.Nhưng trong 1 số trường hợp khi dữ liệu quá đơn giản thì người ta có thể cho cập nhật ngay trên grid or list.
Trả lời cùng với trích dẫn
  #4  
Cũ 17-01-2008, 03:26 PM
Avatar củaHaipt
Haipt Haipt là offline
Sharp Lover
 
Ngày gia nhập: 06 2007
Nơi ở: hải phòng
Bài viết: 380
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Trích dẫn:
Nguyên bản được gửi bởi webshot Xem bài viết
mình đã fill từ datasource vào dataset rồi cho show ra một cái listview ( ko dùng datagrideview) sau đó chỉnh sửa dữ liệu trên listview ( thêm các hàng, xóa ,sửa các giá trị của ô listview). bây h làm sao cập nhập nó lại dataset được nhỉ ( mình đã tạo ra một cái datatable rồi)
và câu hỏi thứ 2 ( quan trọng hơn +_+)
đấy là sau khi cập nhập lại được rồi thì làm sao cập nhập lại datasource được
mình xem nhiều cách nhưng chưa chạy được vì
cái của mình ko phải là mỗi lần người dùng sửa một cai thì nó update luôn, mà mình cho họ chỉnh sửa , thêm , xóa chán chê mê mỏi trên listview. cuối cùng khi bấm thoát thì chương trình mới lưu tất cả lại datasource. +_+ như vậy với các cách mình xem trong diễn đàn ( viết sqlcommand) thì mình chịu vì ở đây người dùng vừa xóa , sửa , cập nhập vậy có cách nào xử lý ko các bạn
thank nhìu +_+
Tại sao bạn lại không dùng datagridview nhi ???
Dùng ListView cũng hơi mất thời gian 1 chút... bạn làm thế này nhé

Giả định bạn đã làm 1 thủ tục load data từ Datatable vào listview ( DataTableToListV chẳng hạn )
Ta nhận thấy rằng ListView thực chất là 1 khung nhìn của datatable ,các chỉ số dòng cột hoàn toàn tương đương do vậy bạn phải chặn 1 số sự kiện
soạn thảo của người dùng rùi quy đổi ra ví trí dòng cột tương ứng của datatable, hễ dòng 1 list view thay đổi thì dòng 1 datatable cũng được cập nhật tương ứng ( có lẽ độ lệch dòng là 1) , hễ user xóa 1 dòng trên list view thì ngoài việc bạn remove 1 dòng trên list thì bạn cũng đánh dấu xóa 1 dòng trên datatable
Như vậy user thoái mái chỉnh xửa ,xóa..
Khi nhấn cập nhật bạn chỉ việc gọi anyDataadapter.update datatable

Trích dẫn:
Nhưng thông thường thì ko ai cho phép bạn làm bấy nhầy cái table rồi mới cập nhật vào datasource cả.
không vấn đề gì, trước .NET với ADO 2.X , cách thức làm việc luôn mặc định là online( tức là ta phải luôn luôn luôn giữ kết nối với server - server side cursor lên ta hay gặp rắc rối khi có quá nhiều người cùng truy xuất DB ), và cập nhật dữ liệu thường là dùng ado chạy tuần tự từng dòng rùi update hay insert vô DB, với .NET thì mọi thứ đã thay đổi, ado.net mặc định sẵn chế độ làm việc là offline - client side cursor, chúng ta chỉ kết nối DB khi cần mà thôi ,datatable hoàn toàn độc lập với datasource, chế độ cập nhật là batch update ( cập nhật theo lô),thường thì ta làm sẵn các
UpdateCOmmand,InsertCommand,DeleteCOmmand rùi gán vô 1 dataadapter
rùi khi cập nhật chỉ cần gọi Dataapater.Update(dataTable) là xong, với bảng đơn có thể dùng OledbCommandBuilder để sinh tự động luôn các command trên do vậy thường thì để để cập nhật table ta chỉ cần gọi 2 lệnh
Code:
System.Data.OleDb.OleDbCommandBuilder CB = new System.Data.OleDb.OleDbCommandBuilder(AnyOleDBDataAdapter);
 AnyOleDBDataAdapter.Update(AnyDataTable);
Có thể hỗ trợ thêm chế độ hủy mọi sửa đổi bằng 2 lệnh
Code:
 AnyDataTable.RejectChanges() ;
 DataTableToListV () ;    // gọi lại thủ tục reload listview
Nếu chăm chút thêm chút nữa thì có thể làm thêm chức năng đổi màu những cell đã bị sửa đổi để
user có thể quan sát toàn diện .
Hope this help
__________________
Phạm Hải
MS Technical Expert
FPT Software Corp.
www.FPTSoftwareCareer.com
www.chodua.com
-----------------------------------------
Join us, Kick off the Big Game!

Đã được chỉnh sửa lần cuối bởi Haipt : 17-01-2008 lúc 03:36 PM.
Trả lời cùng với trích dẫn
  #5  
Cũ 18-01-2008, 12:19 AM
Avatar củahuynguyen
huynguyen huynguyen là offline
Power Member
 
Ngày gia nhập: 11 2006
Bài viết: 1,074
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


phamtiensinh có thể nói rõ hơn được chứ?
Tôi làm 1 mạch trên DataGridView rồi sau đó update lại vào Database có được ko và cách thức thế nào. Nếu được thì cho 1 cai solution về vụ này để tôi được sáng tỏ 1 chút.
Ngoài ra tôi mới tập tành dùng dotNET nên còn kém, cái DataGridView có thể làm được những gì, bạn chỉ giúp tôi với. Tôi mới chỉ dùng nó để load Database, khóa mồm nó lại, mọi xử lý tôi đẩy sang textbox hết.
__________________
Trả lời cùng với trích dẫn
  #6  
Cũ 18-01-2008, 02:19 PM
Avatar củaHaipt
Haipt Haipt là offline
Sharp Lover
 
Ngày gia nhập: 06 2007
Nơi ở: hải phòng
Bài viết: 380
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Tôi có gửi kèm 1 DEMO nhỏ về ADO.NET với các chức năng căn bản
xóa, thêm, sửa,cập nhật... bạn cứ việc chỉnh sửa,xóa thoái mái nếu thấy sai sót thì nhấn eject , Database chỉ thực sự cập nhật khi bạn nhấn UPDATE
Bực thật chức năng file đính kèm của 4 room có vấn đề, không up lên nổi
đành upload lên google ,bạn tải ở đây nhé, C# project
http://phamhai2k6.googlepages.com/Wi...plication1.rar

thủ tục update chỉ có 2 dòng
Code:
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
da.Update(dt);
Nhiều bạn mới dùng ado.net sẽ thấy hơi khó hiểu, tôi diễn giải lại thế này nhé.
Thông thường để cập nhật CSDL ví dụ 1 bảng có 3 column ( ID, NAME ,AGE) bạn thường dựa vào ADO 2.X for tuần tự các row rùi update vô CSDL hay duyệt hết các row nếu row bị xóa gọi TSQL DELETE , nếu thêm
mới Gọi Insert, nếu sửa gọi UPDATE với 3 tham số đầu vào ID, NAME ,AGE cho mỗi dòng, với ADO.NET , nó bảo bạn :ngài không việc gì phải tự tay duyệt hết cả chỉ việc đưa cho tôi 4 store proc tương ứng
SelectCOmmand --> dùng cho fill
DeleteCommand
InsertCommand
UpdateCommand
Tôi sẽ duyệt lần lựot các row để update hộ ngài.
Tuy nhiên, trong đa số trường hợp việc viết 4 store proc cho mỗi bảng là 1 công việc buồn tẻ và dễ dàng, nếu phải làm nhiều có lẽ bạn nghĩ rằng
giá mà mình huấn luyện 1 con khỉ , dạy nó hễ thấy 1 table thì duyệt hết table đó, list lại các primary key, column name, column type để
sinh luôn ra các command cần dùng thì hay biết mấy.
Có lẽ Microsoft thấu hiểu được các coder cần gì , lên ADO.NET cũng hỗ trợ ta luôn 1 chú khỉ làm cái việc buồn chán là sinh ra tự động luôn các DeleteCommand , InsertCommand, UpdateCommand để lập trình viên đỡ phải mất thời gian làm,và đó chính là OleDbCommandBuilder .
Như vậy, bạn sẽ thấy Vs2k5 có rất nhiều chú khỉ như thế... và đừng có dại gì mà tranh việc của chúng, hãy dành thời gian làm việc khác.Trừ khi bạn thấy chúng ko đáp ứng đc yêu cầu và bạn có thể làm tốt hơn.
Tìm hiểu thêm về các wizza sinh mã tự động và typed dataset để biết cách làm 1 ứng dụng master -detais với 8 dòng tự code
http://www.caulacbovb.com/forum/view...p?f=33&t=12933
__________________
Phạm Hải
MS Technical Expert
FPT Software Corp.
www.FPTSoftwareCareer.com
www.chodua.com
-----------------------------------------
Join us, Kick off the Big Game!

Đã được chỉnh sửa lần cuối bởi Haipt : 18-01-2008 lúc 02:26 PM.
Trả lời cùng với trích dẫn
  #7  
Cũ 18-01-2008, 03:28 PM
Avatar củahuynguyen
huynguyen huynguyen là offline
Power Member
 
Ngày gia nhập: 11 2006
Bài viết: 1,074
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Cảm ơn phamtiensinh đã giúp đỡ, trong trường học ông thầy bắt viết T-SQL rồi từ lớp Data Access Layer gọi nó theo mô hình 3-tier >"<
Hóa ra thầy cũng gà.
__________________
Trả lời cùng với trích dẫn
  #8  
Cũ 18-01-2008, 04:04 PM
Avatar củadarkan
darkan darkan là offline
:..:BookWorm:..:
 
Ngày gia nhập: 11 2007
Bài viết: 469
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Ông thầy của bạn ko gà đâu .
Nếu bạn đang học thì nên biết là cụ thể nó làm như thế nào.
Ví dụ trong 1 số trường hợp hệ thống cần có performant cao thì bạn lại phải làm tay.Khi đó nếu bạn ko biết cụ thể bên dưới nó chạy thế nào thì chắc chết quá.
Còn tất nhiên khi làm với thực tế thì lại là chuyện khác.Nhanh gọn mới tốt.
@phamtiensinh: Bác ở Hải Phòng ah?
__________________
Is the moon rising...
Trả lời cùng với trích dẫn
  #9  
Cũ 18-01-2008, 05:32 PM
Avatar củanhc1987
nhc1987 nhc1987 là offline
XCoworker Member
 
Ngày gia nhập: 10 2007
Nơi ở: HCMUNS
Bài viết: 701
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Hơi dư tí tẹo . Nhiêu đây là đủ rồi

Trích dẫn:
new OleDbCommandBuilder(da);
da.Update(dt);
__________________
Keep moving forward!

... Retired ...
Trả lời cùng với trích dẫn
  #10  
Cũ 18-01-2008, 05:55 PM
Avatar củaHaipt
Haipt Haipt là offline
Sharp Lover
 
Ngày gia nhập: 06 2007
Nơi ở: hải phòng
Bài viết: 380
Mặc định

Re: hỏi về cập nhập vào dataset và datasource


Hay quá , ko ngờ C# có style gọn vậy... thanks nhc1987 nhé ! Đang hơi chán C# ở cú pháp này .
@darkan: Mình ở Hải phòng ,thậm chí là rất gần đường Văn Cao.
__________________
Phạm Hải
MS Technical Expert
FPT Software Corp.
www.FPTSoftwareCareer.com
www.chodua.com
-----------------------------------------
Join us, Kick off the Big Game!
Trả lời cùng với trích dẫn
Trả lời
Google
 

Bookmarks

Các công cụ đề tài
Các chế độ hiển thị

Các nguyên tắc gửi bài
Bạn không thể gửi đề tài mới
Bạn không thể gửi bài trả lời
Bạn không thể gửi các đính kèm
Bạn không thể chỉnh sửa bài viết của bạn

[IMG] code: On
HTML code: Off

Nhảy tới diễn đàn

Các đề tài tương tự
Đề tài Người bắt đầu đề tài Diễn đàn Các trả lời Bài viết cuối
Học lập trình C Online | Tự học C qua Cộng đồng C Việt Kevin Hoang Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x 8 30-12-2009 12:20 AM
Làm việc với DataSet và DataAdapter Xcross87 Thủ thuật Tutorials về Database 10 04-09-2009 02:11 PM
[Thủ thuật]Tăng tốc cho mạng và truy cập Internet neverland87 Các Hỏi/Đáp khác 3 04-12-2008 11:44 AM
[Tham khảo]Kiến thức cơ bản để thiết lập một mạng không dây gia đình neverland87 Các Hỏi/Đáp khác 2 26-12-2007 12:40 PM


Toàn bộ thời gian tính theo múi GMT +7. Bây giờ là 05:42 PM.