نمایش نتایج 1 تا 8 از 8

نام تاپیک: مشکل در بازیابی داده های رابطه ای از جداول.

  1. #1
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727

    مشکل در بازیابی داده های رابطه ای از جداول.

    سلام و خسته نباشید
    من سه تا جدول t_books , t_sessions , t_titles دارم که به ترتیب دو به دو ارتباط master/details با هم دارن، زمانی که رکوردهای سه جدول رو به صورت کامل بازیابی میکنم مشکلی نیست، ولی زمانی که شرطی در query میذارم، یه پیغام خطا مبنی بر اینکه 'این constraint نمیتونه فعال بشه چون تمام داده ها مقادیر parent متناظرشون رو ندارند'

    این کد منه :

    SqlConnection con = new SqlConnection(Properties.Settings.Default.Database 1ConnectionString);
    SqlCommand cmd = new SqlCommand();
    SqlDataAdapter adapter = new SqlDataAdapter();
    cmd.CommandText = "select * from t_books where bookName like '%" + searchText + "%'";
    cmd.Connection = con;
    adapter.SelectCommand = cmd;
    DataSet ds = new DataSet();

    SqlCommand cmd2 = new SqlCommand();
    SqlDataAdapter adapter2 = new SqlDataAdapter();
    cmd2.CommandText = "select * from t_sessions where sessionName like '%" + searchText + "%'";
    cmd2.Connection = con;
    adapter2.SelectCommand = cmd2;

    SqlCommand cmd3 = new SqlCommand();
    SqlDataAdapter adapter3 = new SqlDataAdapter();
    cmd3.CommandText = "select * from t_titles where titleName like '%" + searchText + "%'";
    cmd3.Connection = con;
    adapter3.SelectCommand = cmd3;

    adapter.Fill(ds, "t_books");
    adapter2.Fill(ds, "t_sessions");
    adapter3.Fill(ds, "t_titles");

    DataRelation dataRelation;
    DataRelation dataRelation2;

    DataColumn dc1 = ds.Tables["t_books"].Columns["bookID"];
    DataColumn dc2 = ds.Tables["t_sessions"].Columns["bookID"];

    DataColumn dc3 = ds.Tables["t_sessions"].Columns["sessionID"];
    DataColumn dc4 = ds.Tables["t_titles"].Columns["sessionID"];

    dataRelation = new DataRelation("Relation1", dc1, dc2);
    dataRelation2 = new DataRelation("Relation2", dc3, dc4);
    ds.Relations.Add(dataRelation);
    ds.Relations.Add(dataRelation2);
    TreeNode book;
    TreeNode session;
    TreeNode title;

    foreach (DataRow row in ds.Tables["t_books"].Rows)
    {
    book = new TreeNode(string.Format("{0}", (string)row["bookName"]));
    book.Tag = row;
    ds.Tables["t_sessions"].DefaultView.RowFilter = "bookID=" + row["bookID"];
    for (int i = 0; i < ds.Tables["t_sessions"].DefaultView.Count; i++)
    {
    DataRowView sessionRow = ds.Tables["t_sessions"].DefaultView[i];
    session = new TreeNode(string.Format("{0}", (string)sessionRow["sessionName"]));
    session.Tag = sessionRow;

    ds.Tables["t_titles"].DefaultView.RowFilter = "sessionID=" + sessionRow["sessionID"];
    for (int j = 0; j < ds.Tables["t_titles"].DefaultView.Count; j++)
    {
    DataRowView titleRow = ds.Tables["t_titles"].DefaultView[j];
    title = new TreeNode(string.Format("{0}", (string)titleRow["titleName"]));
    title.Tag = titleRow;

    session.Nodes.Add(title);
    }

    book.Nodes.Add(session);
    }
    this.treeView2.Nodes.Add(book);
    }
    error ای که میده اینه :
    This constraint cannot be enabled as not all values have corresponding parent values.

    error هم درقسمت اضافه کردن dataRelation دومی به دیتاست ایجاد میشه، اینجا :
    ds.Relations.Add(dataRelation);
    ds.Relations.Add(dataRelation2); error

    میشه بگین مشکلمو چطوری حل کنم که چنین پیغامی نده ؟ مرسی

  2. #2
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    تو جدول Detail ها مقداری وجود داره که در جدول Master مربوطه موجود نیست

  3. #3
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    Sorenaa_s عزیز مرسی از لطفت، حق با شماست، اجازه بده توضیح بدم چرا این اتفاق میفته، همانطور که گفتم این سه جدول یعنی t_books , t_sessions , t_titles که با هم رابطه ی mster/details دارن در query ای که به صورت بدون شرط از سه جدول گرفته میشه مشکلی نیست چون همه ی داده ها وجود دارند و ارتباط بین جداول برقراره، ولی وقتی برای query شرط میذاریم و از سه جدول query میگیریم، ممکنه در پایینترین سطح یعنی جدول t_titles باشه ولی در سطح بالاتر که جدول t_sessions هست نباشه، بنابر این برنامه نمیتونه ارتباط بین جداول رو برقرار کنه، چون تمام داده های مورد نیاز در همه ی جداول نیست، حالا چطوری میشه این مشکل رو حل کرد ؟
    یه راهش اینه که در سطوح بالا، query به صورت بدون شرط گرفته بشه و تا تمام مقادیر مورد نیاز برای ارتباط با جداول پایینتر بازیابی بشه، و شرط رو در جدول سطح پایین که همون t_titles هست بذاریم، اینطوری ارتباط برقرار میشه(تست کردم)، ولی مشکل اینجاس که در جداول سطح بالاتر تمام داده ها لود میشن و مطابق با query من نیست، کسی راه دیگه ای به نظرش نمیرسه ؟

  4. #4
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111
    دوست عزیز دقیقا این ارتباط بین جداول را برای چه کاری لازم داری برای همین پر کردن درخت چون من هرچی در کدها دقت کردم کدی مربوط به این رابطه هایی که تعریف کردید ندیدم

  5. #5
    کاربر تازه وارد آواتار houshang.karami
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    ونکوور
    پست
    95
    من با این مشکلات زیاد برخورد کرده ام
    من معمولا برای کمتر برخورد کردن به این مشکلات نکات زیر را رعایت می کنم
    1- در طراحی جداول داخل بانک اطلاعاتی یک شماره ردیف منحصربفرد هم می گذارم
    2- برای هر فرم یک dataset در نظر می گیرم
    3- مهمتر از اینها ساختاری که برای DataTable در نظر میگرم همشه باید طبق همان ساختار پر شود اگر فیلدی مثل A یونیک باشد نباید یک query بزنیم که مثلا دوتا مقدار برای A بدست آید این مسئله زمانی اتفاق می افتد که از Group By استفاده کنیم.

  6. #6
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    بچه ها ممنون از جوابتون.
    در جواب ghafoori عزیز باید بگم که کاربر یه کلمه ای رو جستجو میکنه و برنامه در سه جدول دنبال این کلمه میگرده و این سه جدول هم با هم ارتباط والد و فرزند دارند، حالا میخوام نتیجه ی جستجو در یک treeView به نمایش در بیاد، همانطور که گفتم در این حالت ممکنه جستجو برای پایین ترین سطح جدول یعنی t_titles یک یه چند رکورد رو برگردونه ولی برای جداول سطح بالاتر نتونه مقداری رو برگردونه، پس چون نتونسته مقداری رو برگردونه پس برنامه نمیتونه توی اون جدول دنبال کلید متناظر با جدول دیگه بگرده، لذا ارتباط dataRelation دچار error میشه. حالا من میخوام این خطا رو برطرف کنم، چطوری میتونم ؟

  7. #7
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    بچه ها من نتیجه ای که میخوام بگیرم اینه :
    بتونم یه جستجو در سه جدول که رابطه master/details با هم دارن انجام بدم و نتیجه رو در یه treeView نشون بدم.

  8. #8
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    خواهشا یه کمکی به ما بکنید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •