PDA

View Full Version : کمک در طراحی بانک اطلاعاتی



mortezasar
شنبه 22 مهر 1391, 17:03 عصر
سلام من واسه پروژه پایان ترمم یک یانک اطلاعاتی دارم که نام روستا و مشخصات روستا رو ثبت میکنه و بانک دیگم هم امکانات روستا رو ثبت میکنه
حالا هر روستا در زمان ثبت اطلاعات خود روستا ، در جدول روستا یک کد میگره بنام کد روستا که کد هر روستا منحصر بفرد هستش
حالا من واسه ارتباط برقرار کردن بین جدول روستا و جدول امکانات مشکل دارم میخوام ببینم یک فیلد جدولم (جدول امکانات )که مربوط به کد روستا هست (همون کد منحصر بفرد که مشخص کنه این اطلاعات مال کدوم روستا هستش ) رو خودم باید کد رو بهش بدم یا نه با برقرار کردن ارتباط بین دوتا جدول اون فیلد خودش پر میشه و من باید به بقیه فیلدها مقدار بدم اگه کمکم کنید ممنون میشم
بانک اطلاعاتی هم SQL SERVER هستش
و یک مشکل دیگه ام هم این هست تو جدول امکانات چند تا گزینه تیک دار دارم اگه از نوع بولین استفاده کنم بعد واسه گزارش گیری و نمایش اطلاعات که مشکلی پیش نمیاد

r_s1389@yahoo.com
سه شنبه 02 آبان 1391, 09:56 صبح
سلام دوست عزیز
شما چرا نمیتونی از یک بانک برای این کار استفاده کنی؟

nilmil_nil
چهارشنبه 03 آبان 1391, 18:45 عصر
والا من نمیدونم شما چرا از دوتا دیتابیس دارید استفاده میکنید
یا شایدم من اشتباه فهمیدم
ولی در کل
روستا - امکانات
دو تا جدول هستند
پس برای ارتباط بین اونا باید یه فیلد کلید بذاری
از روستا به امکانات
و فیلد کلید رو هم باید توی برنامه خودت مقدار بدی
یعنی بگی فلان روستا کدوم امکانرو داره
پس این وسط باید یه جدول دیگه بذاری که توش کد روستا و کد امکانات رو ذخیره کنی
امید وارم متوجه شده باشی

rezaprogrammer
شنبه 20 آبان 1391, 01:39 صبح
جدول روستا -----------------------> جدول امکانات
کلید اصلی کد روستا ---------------> کلید خارجی کد روستا

ارتباط بین جدول روستا و امکانات می تونه یک به یک یا یک به چند باشه

RIG000
پنج شنبه 25 آبان 1391, 00:20 صبح
والا من نمیدونم شما چرا از دوتا دیتابیس دارید استفاده میکنید
یا شایدم من اشتباه فهمیدم
ولی در کل
روستا - امکانات
دو تا جدول هستند
پس برای ارتباط بین اونا باید یه فیلد کلید بذاری
از روستا به امکانات
و فیلد کلید رو هم باید توی برنامه خودت مقدار بدی
یعنی بگی فلان روستا کدوم امکانرو داره
پس این وسط باید یه جدول دیگه بذاری که توش کد روستا و کد امکانات رو ذخیره کنی
امید وارم متوجه شده باشی
میشه نحوه کوئری ذخیره یا اینسرت رو با در نظر گرفت این مواردی که گفتین رو بنویسید؟
من دنبال اینم که چطوری میشه در یک زمان اطلاعات جدول روستا رو پر کرد پس باید مقدار کلید رو هم تو جدول 2 بریزیم جالب اینه که مقدار کلید امکانات رو هم تو برنامه میریسزم . پس ما 3 جدول داریم که اطلاعات یعنی روستا جدول دو کلید امکانات و کلید روستا و جدول امکانات داریم که باید توشون اینسرت بشه .
امیدوارم منظورم متوجه شده باشید . من کوئریشو میخام که چگونه میشه. ممنونم از شما

nilmil_nil
پنج شنبه 25 آبان 1391, 15:50 عصر
این دستور INSert

INSERT INTO [TblEmkanat]
([Service_ID]
,[Rosta_ID])
VALUES
(10,
,111)

اینم دستور Select

SELECT dbo.TblEmkanat.Emkanat_ID, dbo.TblEmkanat.Service_ID, dbo.TblService.Service_Name, dbo.TblEmkanat.Rosta_ID, dbo.TblRosta.RostaName
FROM dbo.TblEmkanat INNER JOIN
dbo.TblRosta ON dbo.TblEmkanat.Rosta_ID = dbo.TblRosta.rosta_ID INNER JOIN
dbo.TblService ON dbo.TblEmkanat.Service_ID = dbo.TblService.Service_ID


دیاگرام هم ضمیمه کردم

RIG000
جمعه 26 آبان 1391, 15:32 عصر
دوست عزیز کاملا" متوجه کار شما شدم.! خیلی ازت ممنونم.
من یه سوال در این مورد داشتم که اگه بخایم جدول سرویس و روستا رو پر کنیم و امکانات باید همزمان انجام شه؟
مثلا ما در یک زبان برنامه نویسی بخایم از طریق فرم باید اطلاعات رو به این 3 جدول بفرستیم یعنی بخایم جدول سرویس رو با id و name اون پر کنیم و چون به جدول امکانات وصل هست اونم باید پر بشه پس idemkanat و idservis هم باید پر بشه حالا فیلد idrosta خالی میمونه پس باید اونم پر بشه خوب اینجوری باشه پس جدول روستا هم باید پر بشه؟ این درسته اصلا".

الان با این شکل جدول امکانات پر شده و جدول روستا و سرویس خالی هست؟
تو یه فرم برنامه اگه بخایم این جدوال رو پر کنیم که ای دی ها با هم جور باشن چگونه عمل میکنیم.؟

ما 3 تا insert باید داشته باشیم ؟ الان شما فقط جدول امکانات رو پر کردین. من منظورم این هت که نحوه اینکه اطلاعات رو چطوری در 3 جدول همزمان بریزیم! میشه در این مورد کمکم کنید؟ ممنونم از شما .

nilmil_nil
جمعه 26 آبان 1391, 16:59 عصر
ببیند جدول روستا و سرویس جزء جداولی هستند که باید از قبل در برنامه تون در مثلا قسمت تعارف اولیه مقدار دهی بشن
حالا بعد از اون شما باید بیاید به بگید فلان روستا فلان سرویس رو بهش اختصاص دادن خوب اینجا باید بگیم یه کد برای امکانات که به صورت اتوماتیک ثبت میشه و یه کد مربوط به روستا که از جدول روستا میاد و یه کد برای سرویس اون روستا که از جدول سرویس ها میاد
امیدوارم متوجه شده باشین به این مساله دقت کنید که ابتدا باید جداول روستا و سرویس پر شوند

RIG000
جمعه 26 آبان 1391, 17:41 عصر
یعنی عملا" چیزی که من گفتم وجود نداره!!
پس تو همه ی دیتا بیس هایی که اطلاعات نرمال سازی میشه موضوع به همین شکل هست که باید جداول جداگانه پر شوند سپس برای اینکه اطلاعات جدید ما ادغامی از اطلاعات روستا و سرویس هست در جدول دیگر ما قرار میگیرن. در این صورت جدول امکانات با وجود دو جدول سرویس وروستا ساخته میشه . پس سلکتش همونی میشه که نوشتین .
الان ما موقعی که بخایم اطلاعات رو در جدول امکانات ذخیره کنیم قبلش باید یه سلکت بزنیم ای دی مورد نظر رو از جدول روستا بخونیم و سپس یرای اینکه ادی سرویس رو بهش بدیم یه سلکت هم میزنیم ادی سرویس رو میکشیم بیرون و سپس این دو ادی مورد نظر رو در جدول امکانات ذخیره میکنیم. ؟
اگه این مسیری که گفتم رو درست میدونین میشه کوئریش رو بنویسید ؟ در ضمن اگه ما تو یه زبان سی شارپ اینکا رو کنیم باید این دو ای دی مورد نظر که از جدول روستا و سرویس کشیدیم بیرون بریزیم تو یه متغییر وسپس تو کوئری insert جا بدیمش ؟ همون 10,111 رو که نوشتین مثلا" . با placeholder ها بگیریمش از متغییرای که توش ادی ها رو قرار دادیم. درسته؟

RIG000
جمعه 26 آبان 1391, 21:14 عصر
سلام دوباره!
راش یه نمونه برنامه با VS2008 اکسس 2010 نوشتم .
اگه بشه این رو ببینید.
من کد های اینسرت رو به جدول روستا و سرویس نوشتم. برنامه رو ببینید متوجه میشد.
کد مربوط به جدول امکانات رو میخام اگه برام بنویسید عملی . خیلی وقت درگیر یه نمونه مثال عملی هستم . ممنون میشم یک عمر که کمکم کنید مجددا" .
در ضمن به ریلیشن جدولم یه نگاهی بندازین که درست انجام دادم یا نه .
همین یه قسمت کد رو برام می نوشتن عالی میشد که عملا" ببینم که از برنامه چه جوری دو مقدار ای دی سرویس و ای دی روستا تو جدول امکانات میشینه.
خیلی ازتون ممنونم.

nilmil_nil
جمعه 26 آبان 1391, 22:33 عصر
سلام!
در مورد اینکه چطور اطلاعات رو وارد جدول امکانات کنید باید بگم که تا حدودی راه حلتون درسته
ولی این برنامه ای که من دیدم شما استفاده نکرده بودین از این روش
خوب!
یه روش میگم انجام بدین خیلی سادست
دوتا کمبو باکس بذارین توی فرمتون یکی به عنوان لیست روستا ها و یکی هم لیست سرویس ها
حالا بیاید اینجوری ذخیره کنید
یه مثال میزنم

comboBox1.ValueMember = "ServiceID";
comboBox1.DisplayMember = "ServiceName";
comboBox1.DataSource = dt;// نام دیتا تیبلی که رکورد های جدول سرویس در اون لود میشه

خوب این کد لیست سرویس ها رو توی کامبو باکس نشون میده
خاصیت valueMember رو باید کد سرویس رو براش ست کنید که وقتی میخواین در جدول امکانات رکوردی ثبت کنید از کئ سرویس استفاده کنید و همینطورDisplayMember که نام سرویس رو ست کنید
برای روستا هم همین کار رو انجام بدین
و دستور اینسرت شما میشه این !!!

string s = "INSERT INTO Emkanat (ServiceID,RostaID)VALUES(" + comboBox1.SelectedValue.ToString() + "," + comboBox2.SelectedValue.ToString() + ")";

RIG000
شنبه 27 آبان 1391, 01:35 صبح
سلام دوباره.!
اقا من فکر میکنم عملا" فهمیدم چی شد. مرسی!
حالا موضوع اینه که من تونستم servis_id و rosta_id رو ذخیره کنم! اما در صورتی که فیلد emkanat_id نباشه!
من این فیلد رو برداشتم تونستم ذخیره رو انجام بدم اما دوباره گذاشتم امکانات_ای دی رو باز نشد ذخیره کرد . یه اررور میده میشه ببینید؟ برنامه رو . ممنونم.
در ضمن اینکه شده تا اینجا و اگه اشتباه نکرده باشم خوشجالم:بامزه:
خیلی از شما ممنونم.

RIG000
شنبه 27 آبان 1391, 18:52 عصر
سلام .
من emkana_id رو autonumber گذاشتم!
دو فیلد servis_id و rosta_id رو ولی number گذاشتم!
از فرم این دو مقدار رو پاس میدیم به فرم!
اما مقدار emkan_id باید خودش یکی یکی اضافه بشه که نمیشه وای ن ارور رو میده!
Number of query values and destination fields are not the same.
95130

nilmil_nil
شنبه 27 آبان 1391, 23:44 عصر
دستور SQL رو هم بذار تا ببینیم !

RIG000
یک شنبه 28 آبان 1391, 01:00 صبح
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Csharp2008andaccess2010program
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string databaseAddress = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}\DbExmpleAdo.accdb", Environment.CurrentDirectory);

private static void save(string query ,string dbaddress)
{
OleDbConnection con = new OleDbConnection(dbaddress);
OleDbCommand cmd = new OleDbCommand(query,con);
con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("successfully save.!");
con.Close();
}

private void Form1_Load(object sender, EventArgs e)
{


// string s = "insert into myphone (fname, lname) values (N'"+TextBox1.Text+"', N'"+TextBox2.Text+"')";


}

private void label3_Click(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{

string strinsert1 = string.Format("insert into TblService values({0},'{1}')", txtidservis.Text, txtservisname.Text);
save( strinsert1,databaseAddress);
}

private void button2_Click(object sender, EventArgs e)
{
string strinsert1 = string.Format("insert into TblRosta values({0},'{1}')", txtidrosta.Text, txtrostaname.Text);
save(strinsert1, databaseAddress);
}

private void button3_Click(object sender, EventArgs e)
{

string strinsert1 = string.Format("insert into TblEmkanat values({0},{1})", comboBox1.SelectedValue, comboBox2.SelectedValue);
save(strinsert1, databaseAddress);

}
private static void loadServis(string dbaddress, string queryload, ComboBox cbo, string ValueMember, string DisplayMember)
{
OleDbConnection con = new OleDbConnection(dbaddress);
OleDbDataAdapter da = new OleDbDataAdapter(queryload,dbaddress);
DataTable dt = new DataTable();
dt.Clear();
da.Fill(dt);

cbo.DataSource = dt;
cbo.ValueMember = ValueMember;
cbo.DisplayMember = DisplayMember;

}
private static void loadRosta(string dbaddress, string queryload, ComboBox cbo, string ValueMember, string DisplayMember)
{
OleDbConnection con1 = new OleDbConnection(dbaddress);
OleDbDataAdapter da1 = new OleDbDataAdapter(queryload, dbaddress);
DataTable dt1 = new DataTable();
dt1.Clear();
da1.Fill(dt1);

cbo.DataSource = dt1;
cbo.ValueMember = ValueMember;
cbo.DisplayMember = DisplayMember;

}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void comboBox1_Click(object sender, EventArgs e)
{
string Servis_queryload = "select * from TblService";
string x1 = "Service_ID";
string x2 = "Service_Name";
loadServis(databaseAddress, Servis_queryload, comboBox1, x1, x2);

label7.Text = comboBox1.SelectedValue.ToString();// in faghat baraye record aval kar mikone!!
// nemidonam to kodom evants benvisam ta ba entekhabe meghdarae dg selected value on ro neshon bede to labal ma..

}

private void comboBox2_Click(object sender, EventArgs e)
{

string Rosta_queryload = "select * from TblRosta";
string x3 = "Rosta_ID";
string x4 = "RostaName";
loadRosta(databaseAddress, Rosta_queryload, comboBox2, x3, x4);

label8.Text = comboBox2.SelectedValue.ToString();// in ham baraye record aval kar mikone
// nemidonam to kodom evants benvisam ta ba entekhabe meghdarae dg selected value on ro neshon bede to labal ma..

}

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{

}

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{

}
}
}

RIG000
یک شنبه 28 آبان 1391, 01:02 صبح
اخه موندم چرا auto number کار نمکینه خود به خود!

RIG000
یک شنبه 28 آبان 1391, 01:05 صبح
این هم کد مربوط به اینسرت دو کمبو باکس ما !

string strinsert1 = string.Format("insert into TblEmkanat values({0},{1})", comboBox1.SelectedValue, comboBox2.SelectedValue);
save(strinsert1, databaseAddress);

Reza_Yarahmadi
یک شنبه 28 آبان 1391, 07:32 صبح
دوستان لطفا تنها مباحث مرتبط با SQL Server رو اینجا مطرح کنید.