PDA

View Full Version : سوال: نمایش یک رکورد جدول به صورت مستقیم



baran_mehr
جمعه 29 خرداد 1388, 13:32 عصر
سلام به همه دوستان گلم.:قلب:
میخواستم ببینم آیا میشه مثلا به طور مستقیم رکورد چهارم جدول رو دربیاریم؟؟:متفکر:
یعنی یه select بنویسیم که چهارمین رکورد جدول رو در بیاره؟؟
ممنون:تشویق:

AminSobati
شنبه 30 خرداد 1388, 19:32 عصر
سلام دوست عزیزم،
از توابع Ranking استفاده کنین و به هر رکورد یک شماره بدین

niloofar norouzi
یک شنبه 31 خرداد 1388, 00:51 صبح
سلام
به این مثال توجه کنید:



SELECT * FROM
(SELECT ROW_NUMBER() OVER(ORDER BY CustomerID) AS Rank
,CustomerID,CompanyName, Country
FROM Customers) tmp
WHERE Rank=4



CustomerID کلید اصلی است.ابتدا مرتب کردم سپس رکورد چهارم انتخاب شده.
موفق باشید

aminghaderi
پنج شنبه 01 مرداد 1388, 16:35 عصر
با سلام و ارادت.
دوستان واساتید اگه در باره این موضوع با توچه به نبودن موضوعی مشابه در فروم و نیاز ضروری بعضی از دوستان (مثلا خودم) یه توضیح مختصر اما کامل و جامع بدهند و یک کد مثال ساده به زبان c# عنایت کنند ، بسیار سپاسگزار می شم.
اگه به زبان vb.net هم بزارید که واسه دوستانی که با زبان vb کار می کنند فکر می کنم عالی باشه.

با تشکر.

aminghaderi
پنج شنبه 01 مرداد 1388, 16:44 عصر
سلام دوست عزیزم،
از توابع Ranking استفاده کنین و به هر رکورد یک شماره بدین

اگه لطف کنید یه توضیح در باره توابع Ranking بدهید و یا یه سایت مرجعی راهنمایی کنید (فارسی باشه بهتره :چشمک:) ممنون می شم.
اگر هم مقاله ای برای دانلود بزارید (در صورت امکان) بسیار سپاسگزار می شم.

ارادتمند.

aminghaderi
جمعه 02 مرداد 1388, 00:34 صبح
بله...
کد کامل
کد به زبان c# که در پاین هم کل برنامه رو برای دانلود اظافه می کنم.



using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter sda = new SqlDataAdapter();
DataSet ds = new DataSet();

protected void Button1_Click1(object sender, EventArgs e)
{
cmd.Parameters.Clear();
cnn.ConnectionString = "Data Source=AMIN-A45ADB7E50\\SQLEXPRESS;Initial Catalog=admin_university;Integrated Security=True";
cmd.CommandText = "Select * From student ";
cmd.Connection = cnn;
sda.SelectCommand = cmd;
cnn.Open();
sda.Fill(ds, "amin");
object[] valuez = new Object[2];
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection) ;
reader.Read();
reader.GetValues(valuez);
TextBox1.Text = valuez[0].ToString();
reader.Close();
}
}

aminghaderi
شنبه 03 مرداد 1388, 03:40 صبح
یک راه بهتر و کامل تر!
دسترسی به تک تک فیلد ها و رکورد های .
کد به زبان c# که در پاین هم کل برنامه رو برای دانلود ضمیمه می کنم.
انشاالله مثمرثمر قرار گیرد.


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter sda = new SqlDataAdapter();
DataSet ds = new DataSet();

protected void Button1_Click1(object sender, EventArgs e)
{
cmd.Parameters.Clear();
cnn.ConnectionString = "Data Source=AMIN-A45ADB7E50\\SQLEXPRESS;Initial Catalog=admin_university;Integrated Security=True";
cmd.CommandText = "Select * From student ";
cmd.Connection = cnn;
sda.SelectCommand = cmd;
cnn.Open();
sda.Fill(ds, "amin");
cmd.ExecuteReader();
cnn.Close();
//----------------------------------- Amalyat Angheyad Be Textbox ---------------------------*
DataRow dr = ds.Tables["amin"].Rows[2];
//"amin" name jadvale ast ke tavassote dataset sakhted va "Rows" ham ke moshakhase shomare
// radefe jadvale.


TextBox1.Text = dr["family"].ToString();

//"family" ham asme fielde az database ast.
//-------------------------------------------------------------------------------------------*
}
}

baran_mehr
شنبه 17 مرداد 1388, 16:07 عصر
ممنون از دوستان گلم بابت نظراتشون.
نیلوفر جان من کدتونو امتحان کردن اما خطا میگره فکر کنم تابع رو نمیشناسه!! پیغامش اینه:

'ROW_NUMBER' is not a recognized function name.
aminghaderi جان ممنون که میخوای کمک کنی اما داداشی من مشکلم با خوندن اطلاعات با کد نویسی نیست میخوام با استفاده از دستور اسکیوال یه رکورد را واکشی کنم.

محمد سلیم آبادی
شنبه 17 مرداد 1388, 16:24 عصر
سلام.

اتفاقا یک مساله هست که برای حل دقیقا نیاز به Ranking Function دارد می توانید استفاده کنید.

http://www.barnamenevis.org/forum/showthread.php?t=172333

محمد سلیم آبادی
شنبه 17 مرداد 1388, 16:27 عصر
ممنون از دوستان گلم بابت نظراتشون.
نیلوفر جان من کدتونو امتحان کردن اما خطا میگره فکر کنم تابع رو نمیشناسه!! پیغامش اینه:

'ROW_NUMBER' is not a recognized function name.


این پیغام خطا به نظر می رسد که به علت تشخیص ندادن تابع می باشد.

اگر از SQL Server 2000 استفاده می کنید شاید این توابع در آنجا وجود نداشته باشند.

baran_mehr
یک شنبه 18 مرداد 1388, 23:07 عصر
اره دوست عزیز من اط SQL Server 2000 استفاده میکنم

baran_mehr
یک شنبه 18 مرداد 1388, 23:15 عصر
میشه یه راه حلی بدید که بشه توی SQL Server 2000 ازش استفاده کرد و از پیچیدگی کمتری برخوردار باشه
ممنون میشم

محمد سلیم آبادی
یک شنبه 18 مرداد 1388, 23:36 عصر
پیچیدگی کمتری داشته باشد!؟ مگر توابع Ranking و ماده ی Over چه پیچیده گی دارند این ها ساخته شدند که کا را ساده تر کنند.

بدست آوردن هر چیزی یک قیمتی دارد.

لطفا دقیقا مشخص کنید هدفتان از این کار چیست.

در 2000 یک راه حل وجود دارد که یکمی دشوار و محدود می باشد (نسبت به دستورات Rank در 2005)

آن هم استفاده از Cursor است.

محمد سلیم آبادی
یک شنبه 18 مرداد 1388, 23:47 عصر
لینک برای آموزش Rank
http://www.persiadevelopers.com/articles/sql-server-2005-new-operators.aspx

baran_mehr
دوشنبه 19 مرداد 1388, 08:39 صبح
من میخوام یه رکورد دلخواه رو از هر جای جدول واکشی کنم
مثلا رکرد 5 یا 100 یا هر چی؟

محمد سلیم آبادی
دوشنبه 19 مرداد 1388, 11:37 صبح
خوب، این کار خیلی سختی نیست.

با cursor تا حال کار کردید می دانید چیست؟

cursor یک اشاره گر (همان طوری که از اسمش پیداست) می باشد که به یک مجموعه (result set) اشاره می کند و شما می توانید با استفاده از یک while و یک cursor و یک جدول موفق برنامه ای ایجاد کنید که به هر یک از سطر های نتیجه query یک شماره سطر بدهد سپس یک query دیگر بنویسید که شامل یک where باشد به شکل زیر:



WHERE Row_ID=5
WHERE Row_ID=100

محمد سلیم آبادی
دوشنبه 19 مرداد 1388, 12:53 عصر
میشه یه راه حلی بدید که بشه توی SQL Server 2000 ازش استفاده کرد و از پیچیدگی کمتری برخوردار باشه
ممنون میشم

سوء تفاهم پیش نیاد!

شما گفتید فقط یک راه حل نگفتید راه حل با query یا راه حل با برنامه نویسی داخل sql یا هر راه حلی.

اگر منظور از راه حل در یک دستور select باشد. راه حلی وجود ندارد (حد اقل تا آنجایی که من شناخت دارم).

محمد سلیم آبادی
دوشنبه 19 مرداد 1388, 16:56 عصر
بالاخره یک راه حل ساده برای این مساله پیدا کردم.

متاسفانه من SQL Sever 2000 را نصب شده ندارم و هر چی کد می نویسم در 2005 است.

یک راه حل ساده پیدا کردم. در این روش با استفاده از تابع Identity به هر یک از سطر های جدول یک شناسه داده می شود که از یک شروع شده و یکی یکی افزایش پیدا می کند.

کد دستور و طریقه استفاده آن به قرار زیر است. امید وارم که راضی شده باشید!



USE tempdb
IF object_Id(N'#temp') is not null
Drop table #temp


SELECT [Name],ID_Num = IDENTITY(int, 1, 1)
INTO #temp
FROM (
SELECT [Name]='Ali' UNION ALL
SELECT 'Reza' UNION ALL
SELECT 'Hasan' UNION ALL
SELECT 'Mohammd'
)D

select * from #temp
where ID_num=3 --Result must be "Hasan"


نتیجه اجرای query فوق




Name ID_Num
------- -----------
Hasan 3

baran_mehr
چهارشنبه 21 مرداد 1388, 16:38 عصر
ممنون msalim جان این کدتونو اجرا کردم و جواب داد.
اما چندان ازش سر در نیاوردم؟ شما یه جدول ساختید و مقدار دهی کردید و بعد هم جستجو؟
میشه توضیح بدید

محمد سلیم آبادی
چهارشنبه 21 مرداد 1388, 18:54 عصر
من در خدمت هستم.
ولی چرا بین پست هایتان این قدر فاصله است؟

خوب، من از تابع IDENTITY () INTO استفاده کردم. شما کافی است که به جای Derived Table (جدول مشتق شده) ی D دستورات query خود (که فکر کنم به سادگی select * from tbl باشد) را قرار دهید.

برای درک کامل query فوق باید به مطالب زیر آشنا باشید:
1-SELECT INTO
2-TEMPORARY TABLE
3-Derived Table
4-Identity Into

محمد سلیم آبادی
چهارشنبه 21 مرداد 1388, 19:11 عصر
یکی از دوستان یعنی آقای ASKaffash یک روش جالب دیگری را مطرح کردند.
در صورتی که نتیجه query شما بر اساس یک ستون مشخص مرتب شده باشد شما می توانید از روش زیر استفاده کنید. که هم ساده تره و هم جالب تر.

من فرض گرفتم که شما سطر سه را از جدول زیر می خواهید بازیابی کنید.


-- I imagine you want to achieve third row from this query.

SELECT TOP 1 *
FROM (
SELECT TOP 3 *
FROM (
SELECT [Name]='Ali' UNION ALL
SELECT 'Hasan' UNION ALL
SELECT 'Mohammad' UNION ALL
SELECT 'Reza'
)D1
)D2
ORDER BY [Name] DESC


داده های جدول مورد نظر


Name
--------
Ali
Hasan
Mohammad
Reza

(4 row(s) affected)


نتیجه بعد از اجرای query فوق.


Name
--------
Mohammad

(1 row(s) affected)