PDA

View Full Version : مشکل با فراخوانی داده های از دیتابیس



VisualStudio
سه شنبه 19 تیر 1386, 17:02 عصر
با سلام خدمت دوستان ، برای برای استخراج داده هام از دیتابیس از این کد استفاده می کنم






Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



DBPath = System.IO.Directory.GetCurrentDirectory & "\db1.mdb"

OleDbConn = New OleDbConnection("Provider=microsoft.jet.oledb.4.0; data source=" & DBPath & ";Jet OLEDB:Database Password=1234567890;")

OleDbConn.Open()

End Sub



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click



Dim LU As String

Dim LP As String

Dim MyDataReader As OleDbDataReader

Dim cmd As New OleDbCommand

cmd.CommandType = CommandType.Text

cmd.CommandText = "SELECT * FROM `Table1` WHERE `Position` = 'Ordinary'"

cmd.Connection = OleDbConn

MyDataReader = cmd.ExecuteReader

While MyDataReader.Read

LU = MyDataReader("Fname".ToString)

LP = MyDataReader("Lname".ToString)

End While

حالا ممکن هست که نتیجه این Query 10 رکورد باشه من میخوام که همه 10 تا رکورد در یک جا خارج از دید کاربر ذخیره بشه ومن بتونم از آن استفاده کنم مثلا :





If LU = "Computer" Then

MsgBob("salam")

End If



اما یک رکررد را نمایش میدهد آیا من باید از Query دیگری استفاده کنم یا از آرایه استفاده کنم

choobin84
چهارشنبه 20 تیر 1386, 07:36 صبح
به نظر میرسه کد مشکلی نداره
احتمالا نتیجه حاصل از
Position='Ordibary' فقط یک رکورد باشه

VisualStudio
چهارشنبه 20 تیر 1386, 10:54 صبح
به نظر میرسه کد مشکلی نداره
احتمالا نتیجه حاصل از
Position='Ordibary' فقط یک رکورد باشه

من خودم این بانک را ساختم تنیجه باید سه رکورد باشه اما فقط آخرین رکورد اون را نشان می ده

choobin84
چهارشنبه 20 تیر 1386, 12:11 عصر
پس مشکل در این حلقه است

While MyDataReader.Read
LU = MyDataReader("Fname".ToString)
LP = MyDataReader("Lname".ToString)
End While

چون مرتب تکرار می شود و مقدار را در LU و LP می ریزد و بنابراین فقط آخرین رکورد به شما نشان داده می شود.
روشی دیگر برای دسترسی به کلیه فیلدها و رکورد ها پیدا کنید.
ابدا آرایه را برای رکورد های خیلی زیاد توصیه نمی کنم، چون حجم حافظه بسیار زیادی را در صورت وجود رکوردهای زیاد ، خواهد گرفت.

MajerajooyeKhallagh
چهارشنبه 20 تیر 1386, 12:29 عصر
با سلام خدمت دوستان ، برای برای استخراج داده هام از دیتابیس از این کد استفاده می کنم







Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


DBPath = System.IO.Directory.GetCurrentDirectory & "\db1.mdb"
OleDbConn = New OleDbConnection("Provider=microsoft.jet.oledb.4.0; data source=" & DBPath & ";Jet OLEDB:Database Password=1234567890;")
OleDbConn.Open()
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim LU As String
Dim LP As String
Dim MyDataReader As OleDbDataReader
Dim cmd As New OleDbCommand
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT * FROM `Table1` WHERE `Position` = 'Ordinary'"
cmd.Connection = OleDbConn
MyDataReader = cmd.ExecuteReader
While MyDataReader.Read
LU = MyDataReader("Fname".ToString)
LP = MyDataReader("Lname".ToString)
End While




حالا ممکن هست که نتیجه این Query 10 رکورد باشه من میخوام که همه 10 تا رکورد در یک جا خارج از دید کاربر ذخیره بشه ومن بتونم از آن استفاده کنم مثلا :




If LU = "Computer" Then

MsgBob("salam")
End If






اما یک رکررد را نمایش میدهد آیا من باید از Query دیگری استفاده کنم یا از آرایه استفاده کنم





دوست عزیز شما در حلقه While داری همواره دو متغیر LU و LP را OverWrite میکنی پس مسلما بایدم داده های اخرین رکورد را نشان شما بده.شما باید یا تمام داده های خوانده شده از Reader را در یک آرایه نگه داری یا باید به صورت زیر عمل کنی:


While MyDataReader.Read


LU = MyDataReader("Fname".ToString)


If LU = "Computer"Then


Msgbox("Salam")


end if


End While

آمیدوارم مشکلتون حل بشه با این راهنمایی