PDA

View Full Version : سوال: ساخت يك Query بر اساس انتخاب كاربر نرم افزار



abtinjon
چهارشنبه 06 مرداد 1389, 17:14 عصر
سلام دوستان
توي نرم افزاري كه دارم تهيه مي كنم، در قسمت تهيه گزارش مي خوام دست كاربر رو باز بذارم كه هر جور اون خواست پرس و جو ساخته بشه و اطلاعات نمايش داده بشه!
من 7 تا فيلد دارم كه يكيش ID و كليد اصلي كه كاريش ندارم، اما واسه بقيه شون چطور ميشه يك پرس و جوي تركيبي ساخت طوريكه هر فيلدي كاربر مقدارش رو تعيين كرد به رشته ي پرس و جو اضافه بشه؟
در ضمن وقتي گزارش ساخته شد و توي DataGrid نمايش داده شد چطور اونو چاپ كنم؟

rasoul2023
چهارشنبه 06 مرداد 1389, 17:28 عصر
سلام اون کاری که شما انجام میدید نمایش اطلاعات میگمند نه گذارش گیری ( نمایش در Datagridview ) که هنگامی که دیتا گرید را Fill میکنید یه خط کد در Form load به صورت اتوماتیک ایجاد میشه شما باید SELECT command , command text اون را تغییر بدی که فکر کنم در خصیصه adaptor باشه به صورت زید بنویس :



.adapter.selectcommand.commandtext = "SELECT * FROM TABLE WHERE FILD ='" & Textbox1.text & "'"

و تو خط بعد کدی که در فرم لود اضافه شده را کپی و پیست کن .

برای چاپ هم باید از کریستال ریپورت استفاده کنی که البته ساده ترین و کامل ترین ابزار گزارش سازی در VB هستش دنبال فیلم آموزشی اون توی سایت بگرد کلا کاره راحتیه .

در صورتی هم که میخوا ی مثلا حرف اول یک کلمه را بزنی و لیستی از اطلاعاتی که با اون حرف شروع میشه بیاد از کد زیر استفاده کن :



.adapter.selectcommand.commandtext = "SELECT * FROM TABLE WHERE FILD LIKE"' & Textbox1.text & "%'"


بجای Table , Fild هم اسم تیبل و فیل دیتا بیس خودت را بنویس .

abtinjon
پنج شنبه 07 مرداد 1389, 17:11 عصر
منظورتون كامل متوجه نشدم، و شايد شما هم!
منظور من از گزراش تركيبي اينه كه اگه كاربر خواست مثلا ليست كساني كه مقطع متوسطه هستند و وضعيت قبولي دارند و معدلشان از 15 به بالاست رو ببينه، اين پرس و جو رو همون جا بسازيم و نتيجه رو نمايش بديم و اگه خواست چاپ كنيم.
حالا اگه سوالم واضحتره لطفا توضيح كاملتري رو بدين.
ممنونم

ricky22
پنج شنبه 07 مرداد 1389, 22:49 عصر
گزارش گیری شما باید Dynamic و یک جورایی End User باشه.
ببین این بهت ایده میده؟
http://www.codeproject.com/KB/database/dynamic_report_with_query.aspx

blackcats
پنج شنبه 07 مرداد 1389, 23:39 عصر
من مدتیدنبال این موضوع بودم ببین به دردت میخوره:


Dim connectionstring As String
Dim dbconnection As OleDbConnection
Dim queryString As String
Dim data As New DataSet
Dim data2 As New DataSet
Dim dataAdapter As OleDbDataAdapter
Dim table As DataTable
connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=E:\asp.net\data\amir.mdb"
queryString = "SELECT * FROM amir"
dbconnection = New OleDbConnection(connectionstring)
dataAdapter = New OleDbDataAdapter(queryString, dbconnection)
dataAdapter.Fill(data, "amir")
table = data.Tables("amir")
Dim properFAQs As DataView = data.Tables("amir").DefaultView
properFAQs.RowFilter = "name like '%amir%'"
properFAQs.RowFilter = "age=20"
properFAQs.RowFilter = "key=1"
Me.GridView1.DataSource = table
GridView1.DataBind()

ricky22
پنج شنبه 07 مرداد 1389, 23:52 عصر
من مدتیدنبال این موضوع بودم ببین به دردت میخوره:


Dim connectionstring As String
Dim dbconnection As OleDbConnection
Dim queryString As String
Dim data As New DataSet
Dim data2 As New DataSet
Dim dataAdapter As OleDbDataAdapter
Dim table As DataTable
connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=E:\ASP.NET\data\amir.mdb"
queryString = "SELECT * FROM amir"
dbconnection = New OleDbConnection(connectionstring)
dataAdapter = New OleDbDataAdapter(queryString, dbconnection)
dataAdapter.Fill(data, "amir")
table = data.Tables("amir")
Dim properFAQs As DataView = data.Tables("amir").DefaultView
properFAQs.RowFilter = "name like '%amir%'"
properFAQs.RowFilter = "age=20"
properFAQs.RowFilter = "key=1"
Me.GridView1.DataSource = table
GridView1.DataBind()
ببخشید چه ربطی داشت؟

blackcats
پنج شنبه 07 مرداد 1389, 23:56 عصر
حالا به نظر شما چه ربطی نداره.
میخواد select کنه از database که این کارو میکنه.

ricky22
جمعه 08 مرداد 1389, 00:04 صبح
حالا به نظر شما چه ربطی نداره.
میخواد select کنه از database که این کارو میکنه.
بله به نظر من ربطی نداره چون مشکل ایشون سلکت عادی نیست!
مشکلشون سلکت و report پویا هست

blackcats
جمعه 08 مرداد 1389, 00:20 صبح
هر چی شما بگی!!!!!!!!:چشمک::بامزه::بامزه:

abtinjon
شنبه 09 مرداد 1389, 16:08 عصر
خودم يه راه پيدا كردم كه بد نيست!
چون بايد بين حالتهايي كه كاربر انتخاب مي كنه بايد AND قرار بگيره بايد هر بار كه يكي از فيلدها انتخاب شد ، اون فيلد در دستور Select در انتهاي اون اضافه بشه. بنابراين من يه فيلد كنترلي به جدولم اضافه كرد كه مقدارش به صورت پيش فرض 1 و اونو به صورت زير به كار بردم


StrSql="Select * From Table Where report=1 "
دقت كنيد كه اون فاصله انتهايي هم لازمه چون در ادامه بايد چك كنيم اگر كاربر فيلدي رو انتخاب كرد اونو با AND به انتهاي پرس و جو اضافه كنيم . اينطوري


IF (Textbox.text<>"") Then
StrSql=StrSql+"AND Field='" & Textbox.text & "' "
بازم در انهاي رشته ببنيد كه يك فاصله هست براي احتمال بعدي كه بازم به به رشته اضافه بشه و در آخر رشته توليد شده رو اجرا مي كنيم.

abtinjon
شنبه 09 مرداد 1389, 16:12 عصر
چون كدهاش بد نشون داده مي شد دوباره نوشتم
خودم يه راه پيدا كردم كه بد نيست!
چون بايد بين حالتهايي كه كاربر انتخاب مي كنه بايد AND قرار بگيره بايد هر بار كه يكي از فيلدها انتخاب شد ، اون فيلد در دستور Select در انتهاي اون اضافه بشه. بنابراين من يه فيلد كنترلي به جدولم اضافه كرد كه مقدارش به صورت پيش فرض 1 و اونو به صورت زير به كار بردم
"
StrSql=Select * From Table Where report=1 "
دقت كنيد كه اون فاصله انتهايي هم لازمه چون در ادامه بايد چك كنيم اگر كاربر فيلدي رو انتخاب كرد اونو با AND به انتهاي پرس و جو اضافه كنيم . اينطوري

IF (Textbox.text<>"") Then
StrSql=StrSql+"AND Field='" & Textbox.text & "' "
بازم در انهاي رشته ببنيد كه يك فاصله هست براي احتمال بعدي كه بازم به به رشته اضافه بشه و در آخر رشته توليد شده رو اجرا مي كنيم.

abtinjon
شنبه 09 مرداد 1389, 16:13 عصر
اصلاح
خودم يه راه پيدا كردم كه بد نيست!
چون بايد بين حالتهايي كه كاربر انتخاب مي كنه بايد AND قرار بگيره بايد هر بار كه يكي از فيلدها انتخاب شد ، اون فيلد در دستور Select در انتهاي اون اضافه بشه. بنابراين من يه فيلد كنترلي به جدولم اضافه كرد كه مقدارش به صورت پيش فرض 1 و اونو به صورت زير به كار بردم
"
StrSql=Select * From Table Where report=1 "
دقت كنيد كه اون فاصله انتهايي هم لازمه چون در ادامه بايد چك كنيم اگر كاربر فيلدي رو انتخاب كرد اونو با AND به انتهاي پرس و جو اضافه كنيم . اينطوري

IF (Textbox.text<>"") Then
StrSql=StrSql+"AND Field='" & Textbox.text & "' "
بازم در انهاي رشته ببنيد كه يك فاصله هست براي احتمال بعدي كه بازم به به رشته اضافه بشه و در آخر رشته توليد شده رو اجرا مي كنيم.

abtinjon
شنبه 09 مرداد 1389, 16:34 عصر
معذرت كه چندبار نوشته شده، اشكال در ارتباط با ديتابيس داشت ارسال نمي شد.