PDA

View Full Version : مبتدی: نوشتن query روی 3 تا جدول



vahid.kh
جمعه 15 اردیبهشت 1391, 16:45 عصر
86665
روی btnsearch میخوام کدی بنویسم که بر اساس این 3 جدول ، datagridview رو پر کنه.یعنی محتویات جدول C رو نشون بده .ولی به جای Aid,Bid در جدول سی،datagrid فیلد های Aname,Bname از جدول B,A رو نشون بده.(2 تا کامبو باکس دارم که یکیش محتوی جدول A,دیگری B که بر اساس این 2 تا کامبو باکس میخام سرچ کنم و gridview جدول C رو نشون بده.
مثلا:
string sql = "select TblC.Aid,mah,TblC.Bid,day from (Tblc join TblA) and (TblC join TbB) on TblC.Aid=TblA.Aid and TblC.Bid=TblB.Bid where ....
این error میده.البته قسمت where رو هم موندم چی بنویسم.

vahid.kh
جمعه 15 اردیبهشت 1391, 20:39 عصر
86670



select dbo.TblIncome.incomename,dbo.TblAdmission.amount,d bo.Tblmount.Mountname,dbo.TblAdmission.datee
From dbo.TblIncome inner join dbo.TblAdmission on dbo.TblIncome.incomeid=dbo.TblAdmission.incomeid
inner join dbo.Tblmount on dbo.Tblmount.Mid=dbo.TblAdmission.Mid
where dbo.TblAdmission.incomeid=1 and dbo.TblAdmission.Mid=1

این کد رو نوشتم ولی جواب نداد.Invalid object name 'dbo.TblIncome'.
جدول ها رو عکس گرفتم تا منظورم رو بهتر برسونم.TblMount,TblIncome,TblAdmission اسم جدول ها از بالا به پایین.

Mahmoud.Afrad
جمعه 15 اردیبهشت 1391, 23:06 عصر
این برای من جواب داد:


SELECT dbo.TblIncome.incomename, dbo.Tblmount.Mountname, dbo.TblAdmission.amount, dbo.TblAdmission.datee
FROM dbo.TblAdmission INNER JOIN
dbo.TblIncome ON dbo.TblAdmission.incomeid = dbo.TblIncome.incomeid INNER JOIN
dbo.Tblmount ON dbo.TblAdmission.Mid = dbo.Tblmount.Mid
WHERE dbo.TblAdmission.incomeid = 1 AND dbo.TblAdmission.Mid = 1;


اگر باز هم خطا داد نام جداول و ستون ها رو چک کنید، یک بار ویژوال استادیو رو ببندید و باز کنید. اگر sqlmanagement استفاده میکنید ریستارت کنید و حتما کدهای sql رو توی اون تست کنید.

vahid.kh
شنبه 16 اردیبهشت 1391, 00:11 صبح
آره شد .ممنون که وقت گذاشتید.کم کم داشتم میرفتم سراغ جزوه پایگاه داده چند ترم پیشم.اسم جدول هام رو هم تو قسمت bind در datagrid اشتباه بود آخه موقع جواب همشون پر نمیشد.بازم ممنون.

vahid.kh
شنبه 16 اردیبهشت 1391, 01:09 صبح
86679
مگر نباید از توی فرمم selectedindex ro ارسال کنم تا در query قرار بگیره.

Mahmoud.Afrad
شنبه 16 اردیبهشت 1391, 02:37 صبح
متد سرچ باید دو تا آرگومان داشته باشه تا بتوانید موقع فراخوانی مقادیر رو هم به تابع بفرستید:


public DataTable Search(object _incID, object _mID)
{
//...

string sql = "... WHERE dbo.TblAdmission.incomeid = " + _incID + " AND dbo.TblAdmission.Mid = " + _mID;

//...
}



اگر کمبوباکس ها رو از دیتابیس پر کردید موقع فراخوانی(باید از selectedvalue استفاده کنید) به این شکل :


Search(cmbInc.SelectedValue, cmbM.SelectedValue)


البته قبلش چک کنید selectedvalue های کمبوها null نباشند.

vahid.kh
شنبه 16 اردیبهشت 1391, 04:27 صبح
int incomeid = Int32.Parse(Cmbincome.SelectedValue.ToString());
adm.income = incomeid ;
int mountid = Int32.Parse(CmbMount.SelectedValue.ToString());
adm.mount = mountid ;



با این جواب داد.آره از دیتا بیس پر کردم.و من اشتباه از selectedindex استفاده میکزدم.تشکر.

vahid.kh
شنبه 16 اردیبهشت 1391, 21:02 عصر
سلام
واسه باتن edit کدهای زیر رو نوشتم.ولی error دارم.با این کد یک سطر از datagrid رو میفرستم تو فرم edit. قبل از اینکه فرم edit لود شود متد getone رو از کلاس admission صدا کردم.تا فرم با مقدار پر شده لود شود.ولی وقتی خواستم تو این کد ابزارهای فرم edit رو پر کنم نمیشناسه اونا رو.زیر کد هام خط قرمز میاد.در ضمن دستور sql که تو کد بعدی نوشتم رو هم خط دار میکنه.error ها رو در آخر میزارم.



private void BtnEdit_Click(object sender, EventArgs e)
{
int row = DgrAdmission.CurrentRow.Index;
string val = DgrAdmission[0, row].Value.ToString();
Admission adm = new Admission();
adm.Admissionid = Int32.Parse(val);
adm.getone();
FrmEditAdmission Fredit = new FrmEditAdmission();
Fredit.Txtrow = val;
Fredit.CmbIncome = adm.income;
Fredit.MtxtAmount = adm.amount;
Fredit.CmbMount = adm.mount;
Fredit.MtxtDate = adm.date;
Fredit.ShowDialog();

}





public void getone()
{
DataTable dt = new DataTable();

string sql = "select * from TblAdmission where admissionid="+this .Admissionid ;
// sql = string.Format(sql, this.Admissionid);
db.connect();
if (db.lasterror == "")
{
dt = db.Select(sql);
if (db.lasterror == "")
{
db.disconnect();
}
}
this.income = Int32.Parse (dt.Rows[0]["incomename"].ToString());
this.amount = dt.Rows[1]["amount"].ToString();
this.mount = Int32.Parse(dt.Rows[2]["mountname"].ToString());
this.date = dt.Rows[3]["datee"].ToString();

}

مربوط به باتن edit به ترتیب از Fredit.Txtrow = val; تا Fredit.MtxtDate = adm.date;


Error 1 'Prj_Rate.FrmEditAdmission' does not contain a definition for 'Txtrow' and no extension method 'Txtrow' accepting a first argument of type 'Prj_Rate.FrmEditAdmission' could be found (are you missing a using directive or an assembly reference?) C:\Users\VAHID\documents\visual studio 2010\Projects\Prj_Rate\Prj_Rate\FrmMain.cs 116 20 Prj_Rate

2)Error 2 'Prj_Rate.FrmEditAdmission' does not contain a definition for 'CmbIncome' and no extension method 'CmbIncome' accepting a first argument of type 'Prj_Rate.FrmEditAdmission' could be found (are you missing a using directive or an assembly reference?) C:\Users\VAHID\documents\visual studio 2010\Projects\Prj_Rate\Prj_Rate\FrmMain.cs 117 20 Prj_Rate

Error 3 'Prj_Rate.FrmEditAdmission.MtxtAmount' is inaccessible due to its protection level C:\Users\VAHID\documents\visual studio 2010\Projects\Prj_Rate\Prj_Rate\FrmMain.cs 118 20 Prj_Rate


Error 4 'Prj_Rate.FrmEditAdmission.CmbMount' is inaccessible due to its protection level C:\Users\VAHID\documents\visual studio 2010\Projects\Prj_Rate\Prj_Rate\FrmMain.cs 119 20 Prj_Rate


Error 5 'Prj_Rate.FrmEditAdmission.MtxtDate' is inaccessible due to its protection level C:\Users\VAHID\documents\visual studio 2010\Projects\Prj_Rate\Prj_Rate\FrmMain.cs 120 20 Prj_Rate



این error هم واسه query در کد دوم میده.


Error 6 'mydbdll.mydb' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'mydbdll.mydb' could be found (are you missing a using directive or an assembly reference?) C:\Users\VAHID\documents\visual studio 2010\Projects\Prj_Rate\Prj_Rate\Admission.cs 126 22 Prj_Rate


از صبح دارم با اینا ور میرم.ممنون میشم اگه کسی راهنمایی کنه.