PDA

View Full Version : رفتن به رديف شماره n از جدول



Hossis
جمعه 18 تیر 1389, 11:28 صبح
چطور مي تونم به رديف خاصي از روي شماره بروم
فرض کنيد جدول شما هزار رديف دارد و مي خواهيد به رديف شماره 572 برويد که لزوما با فيلد Autonumber هم تطبيق نمي‌کند.
:قلب::گیج::کف:

How i can go to special Number of Tabel rows?? Not just autonumber field.

b.mahsa
جمعه 18 تیر 1389, 11:46 صبح
تو بانک sql میشه ولی تو Access نمی شه . بانکتون چیه؟

ashkan209
جمعه 18 تیر 1389, 15:24 عصر
چطور مي تونم به رديف خاصي از روي شماره بروم
فرض کنيد جدول شما هزار رديف دارد و مي خواهيد به رديف شماره 572 برويد که لزوما با فيلد Autonumber هم تطبيق نمي‌کند.
:قلب::گیج::کف:

How i can go to special Number of Tabel rows?? Not just autonumber field.

دوست من بعلت اینکه در ADO.net ابتدا کانکشن باز شده و دیتا از تیبل مورد نظر واکشی می شود و کانکشن بسته میشود ، اساس مفهوم کرسر با اون چیزی که در ADO بود متفاوت می باشد
اما اگه نیاز دارید که فیلد خاصی از یک ردیف خاص را بخونید، میتونید در ADO.net نیز همین کار را رو برای بخشی از دیتای Select شده از یک تیبل و موجود در حافظه انجام دهید


ds.Tables(0).Rows(572)("ColumnName")

Hossis
جمعه 18 تیر 1389, 19:36 عصر
ds.Tables(0).Rows(572)("ColumnName")
همين کد خوبه ولي براي اون بايد تمام جدول تو حافظه لود بشه که حافظه زيادي مي‌بره

Hossis
جمعه 18 تیر 1389, 19:40 عصر
تو بانک sql میشه ولی تو Access نمی شه . بانکتون چیه؟
متأسفانه بانک اکسس هست ولي بايد راهي باشه چون يک مسئله پيش پا افتاده هست.

b.mahsa
جمعه 18 تیر 1389, 21:12 عصر
متاسفانه تو بانک Access همچین امکانی وجود نداره .
تو sql تابع row_number رو داریم حتی تو بانک foxpro هم تابع recno رو داریم ولی تو access همچین امکانی نیست
اگر تعداد رکود هاتون 1000 هست از همون فرمول با لا استفاده کنید سر عتش زیاد پایین نمیاد.

Hossis
شنبه 19 تیر 1389, 08:33 صبح
من وقتي از طريق ADODB با بانک اکسس کار مي کردم ، يک تابع داشت که به رکورد مورد نظر مي رفت :
rs.move(597)
rs.movefirst
...
حالا مثل همين تابع توي ADO.Net پيدا نمي شه؟؟

b.mahsa
شنبه 19 تیر 1389, 10:06 صبح
مشابه adodb تو .net میشه bindingsource

bindingsource.movefirst

باید داده هاتون رو تو یه dataset بریزید بعد بایند کنید به binding source که عملا همونی میشه که دوستمون ashkan209 گفتند.

با bindingsource شما رو داده های داخل dataset حرکت میکنید نه database

mohammad.moosaei
یک شنبه 20 تیر 1389, 01:56 صبح
سلام :

شرط اول برای استفاده از این روش اینه که یک فیلد به صورت Autonumber در دیتابیس ایجاد کنید .
بعد برای رفتن به یک رکورد خاص می تونید از کد زیر استفاده کنید ، البته من اینو برای Sql نوشتم اما شما می تونید فقد Sql رو تبدیل به OLEDB کنید . تو این تابع من فرض کردم که ContactID همون فیلد Autonumber هستش.فقط کافیه که این تابع رو توی رویداد کلید دلخواهتون بنویسید:


Private Sub Go2Record(ByVal RecordNum As Integer)

Dim cn = New SqlConnection("server=.\sqlexpress;database=northwind;integrated security=true")
cn.Open()
Dim cmdString As String
cmdString = "SELECT TOP 1 " + vbNewLine _
+ " ContactID, " + vbNewLine _
+ " ContactType " + vbNewLine _
+ "FROM Contacts " + vbNewLine _
+ "WHERE ContactID IN (SELECT TOP " + RecordNum.ToString + vbNewLine _
+ " ContactID " + vbNewLine _
+ " FROM Contacts " + vbNewLine _
+ " ORDER BY " + vbNewLine _
+ " Contacts.ContactID ASC) " + vbNewLine _
+ "ORDER BY " + vbNewLine _
+ " ContactID DESC"
Dim da = New SqlDataAdapter(cmdString, cn)
Dim ds = New DataSet
da.Fill(ds, "Contacts")
cn.Close()
DataGridView1.DataSource = ds
DataGridView1.DataMember = "Contacts"

End Sub

Hossis
سه شنبه 27 مهر 1389, 19:03 عصر
شرط اول برای استفاده از این روش اینه که یک فیلد به صورت Autonumber در دیتابیس ایجاد کنید .

فرض سؤال بر اين هست که کاري به عدد خودکار نداشته باشيم و به فيلد مثلا ششم برويم که ممکن است autonumber آن برابر 20 باشد لذا شماره رکورد ربطي به اتو نامبر ندارد