PDA

View Full Version : truy cập thông tin từ bảng này sang bảng khác



tim băng
26-05-2009, 10:06
tôi thử tạo hai bảng dùng để quản lí sách chỉ có cùng thông tin là mã tác giả
bảng A :chứa thông tin mã tác giả ,tựa đề sách,xuất bảng ...
bảng B :chứa mã tác giả ,các thông tin về tác giả ,
khi ta nhấn vào mã tác giả của bảng A thì sẽ hiển thị thông tin về tác giả ở bảng B .Tôi muốn làm nó nhưng không biết thế nào để làm được ,cũng như cơ chế làm nó .
bạn nào biết về nó giảng giúp tôi với ,giúp ít cũng được ,miễn giúp là tôi cảm ơn nhiều rồi ,thanks .chứ tôi mù tịt,huhuhu

dq_ninh
26-05-2009, 11:25
tôi thử tạo hai bảng dùng để quản lí sách chỉ có cùng thông tin là mã tác giả
bảng A :chứa thông tin mã tác giả ,tựa đề sách,xuất bảng ...
bảng B :chứa mã tác giả ,các thông tin về tác giả ,
khi ta nhấn vào mã tác giả của bảng A thì sẽ hiển thị thông tin về tác giả ở bảng B .Tôi muốn làm nó nhưng không biết thế nào để làm được ,cũng như cơ chế làm nó .
bạn nào biết về nó giảng giúp tôi với ,giúp ít cũng được ,miễn giúp là tôi cảm ơn nhiều rồi ,thanks .chứ tôi mù tịt,huhuhu

Việc bạn muốn làm, gọi là "relation", tức là hai bảng có họ hàng với nhau qua mã tác-giả. Còn một cách gọi khác là master/details relation. Bảng B là bảng master, và bảng A là bảng detail.

Dưới đây là source code cho thí dụ:

private void RetrieveGridViewData()
{
lock(AppUtility.DBCore)
{
this.dsClientGroup.Tables.Clear();
List<SqlParameter> lstParams = new List<SqlParameter>();
SqlParameter pGuidGroup = new SqlParameter("guid_group", DBNull.Value);
lstParams.Add(pGuidGroup);
DataTable tblGroup = AppUtility.DBCore.SqlDataTable_ExecQuery("dbo.isp_get_client_group", CommandType.StoredProcedure, lstParams, "GROUP");

lstParams.Clear();
SqlParameter pGuidClient = new SqlParameter("guid_client", DBNull.Value);
lstParams.Add(pGuidClient);
DataTable tblClient = AppUtility.DBCore.SqlDataTable_ExecQuery("dbo.isp_get_client", CommandType.StoredProcedure, lstParams, "CLIENT");

this.dsClientGroup.Tables.Add(tblGroup);
this.dsClientGroup.Tables.Add(tblClient);
this.dsClientGroup.Relations.Add("GroupToClient", tblGroup.Columns["guid_group"], tblClient.Columns["guid_group"]);


this.masterBindingSource.DataSource = this.dsClientGroup;
this.masterBindingSource.DataMember = "GROUP";

this.detailBindingSource.DataSource = this.masterBindingSource;
this.detailBindingSource.DataMember = "GroupToClient";

this.dgGroup.GridView1.DataSource = this.masterBindingSource;
this.dgClient.GridView1.DataSource = this.detailBindingSource;

if (this.EditMode == EDIT_MODE.Edit)
{
lstParams.Clear();
SqlParameter pGuidCareTaker = new SqlParameter("guid_care_taker", this.ucCareTaker1.guid_care_taker.Text);
lstParams.Add(pGuidCareTaker);

this.dgCareTakerClient.GridView1.DataSource = AppUtility.DBCore.SqlDataTable_ExecQuery("dbo.isp_get_care_taker_client", lstParams);
}
}
}

Trong thí dụ trên, những hàng in đậm là quan trọng. TblGroup cũng như bảng B của bạn, table tblClient cũng như bảng B, và một relation được tạo lên với guid_group (của bạn sẽ là mã tác giả)

trinhdiep
27-05-2009, 03:57
khi ta nhấn vào mã tác giả của bảng A thì sẽ hiển thị thông tin về tác giả ở bảng B .Tôi muốn làm nó nhưng không biết thế nào để làm được ,cũng như cơ chế làm nó .
nói không gãy góc.
cần chú ý là một mã tác giả ở đây chỉ định danh cho một người. nhấn mã tác giả vào rồi thì cứ select từ bảng B ra là xong chws có gì đâu. chẳng hiểu mục dích của chú là làm cái gì nữa

commandline
27-05-2009, 11:12
Tạm gọi thế này: bảng A(Sach), bảng B( TacGia). table A tham chiếu(foreign key) đến table B qua thuộc tính MaTacGia. Khi chú hiện thị danh sách(Sach), chú sẽ có MaTacGia tương ứng. Nếu click vào tác giả cụ thể, chú sẽ lấy được MaTacGia, và viết câu truy vấn để lấy thông tin tác giả này và hiện thị lên mà thôi.

Chú ý: trong tableB(TacGia), MaTacGia là duy nhất ở mỗi thông tin(mỗi dòng), không trùng lắp. Nhưng trong table A, có thể có nhiều dòng chứa cùng một MaTacGia.

tim băng
27-05-2009, 15:14
cảm ơn các bạn nhiều nha ,mình bắt đầu hiểu ra rồi.
nhưng cũng còn phải nghiên cứu thêm chút nữa ,
thanks very much
note :mình chưa đến nỗi già để được gọi bằng chú đâu ,(chưa được 20 nữa,huhu)