PDA

View Full Version : مبتدی: Error: There is no row at position 0



mahdi372
دوشنبه 10 دی 1397, 15:44 عصر
با سلام، ویژوال استودیو به من این ارور رو نمایش میده:

یه نرم افزار ساده درست کردم که یه آیتم از بانک اطلاعاتی اکسس بگیره و در تکست باکس نمایش بده. ولی این ارور رو میده!

An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
Additional information: There is no row at position 0.
تصویر:


149540


کدهایی که نوشتم:

Imports System.Data.OleDb
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim StrCon As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Admin\Documents\Visual Studio 2015\Projects\Eshkal_Nevis\Eshkal_Nevis\bin\Debug\ EshkalBankTest.accdb"
Dim Con As OleDbConnection
Dim da As OleDbDataAdapter
'Dim cmd As OleDbCommand
Dim stroledb As String = ""
Dim ds As New DataSet


ds.Reset()
Con = New OleDbConnection(StrCon)
Con.Open()
stroledb = "SELECT GozareshD FROM Eshkal WHERE (GozareshD = '" & TextBox1.Text & "') "
da = New OleDbDataAdapter(stroledb, Con)
da.Fill(ds, "Eshkal")
Con.Close()


TextBox1.Text = ds.Tables("Eshkal").Rows(0).Item("GozareshD")


End Sub
End Class

mahdi372
دوشنبه 10 دی 1397, 17:12 عصر
وقتی کدها رو در ویژوال استودیو اجرا می‌کنم، نرم افزار اطلاعات رو نشون میده!
حتی یه DataGirdView هم درست کردم، تا اطلاعات رو نمایش بده، که نمایش هم داد. یعنی بانک اطلاعاتی موردی نداره!
حتی بانک اطلاعاتی رو هم عوض کردم ولی باز این ارور رو میده!

mahdi372
پنج شنبه 13 دی 1397, 02:00 صبح
مشکلش این بود که به جای اینکه دستورات رو در یک دکمه (به صورت غیر مستقیم) بنویسم، مستقیما در فرم اصلی گذاشتم. هر بار که برنامه اجرا میشد، برای پیدا کردن داده از بانک، از تکست باکس یه مقدار می‌خواست و چون تکست باکس خالی بود و این مقدار در بانک اطلاعاتی وجود نداشت، این پیغام خطا رو می‌داد. (خطا: این داده در ردیف 0 وجود ندارد)
در نهایت با گذاشتن در یک دکمه مشکل حل شد.

البته با گذاشتن یک دستور "try...catch" و دستور شرطی "IF" به صورت «تو در تو» هم مشکل خالی بودن هم حل شد.