PDA

View Full Version : برداشتن تيك Show، در محيط طراحي كويري



انگوران
پنج شنبه 30 دی 1389, 12:51 عصر
دوستان سلام، دنبال كدي مي گردم تا در محيط طراحي كويري، از طريق اون بتونم تيك Show را در زير يك فيلد را بردارم .

RESMAILY
شنبه 02 بهمن 1389, 07:43 صبح
به نام خدا
با سلام. ظاهرا اگر نام فيلد را در ابتدا قيد نكنيد معادل برداشتن تيك مربوطه است. مگر آنكه منظورتان چيز ديگري باشد.

انگوران
شنبه 02 بهمن 1389, 11:41 صبح
ممنونم، با فرض اينكه اين كويري، مبناي يك زير فرم در روي فرم اصلي باشه،قصدم اينه كه اسامي فيلدهاي اين كويري رو در يك ليست باكس روي فرم داشته باشم، بعد انتخاب هر فيلد معادل برداشتن تيك باشه ( نمي خوام درگير اين بشم كه اسمي فيلدها رو در يك رشته ذخيره كنم و بر اساس اون يك كويري بسازم كه سورس اون رشته باشه و ... )
فرضاً همچين كدي:

Queries!query name!field name.show=false

RESMAILY
شنبه 02 بهمن 1389, 12:47 عصر
به نام خدا
با سلام. درست متوجه نمي شوم. زيرا در حالت معمولي راههاي مختلفي وجود دارد. مانند استفاده از خاصيت هاي visible,value,unboubd و غيره. كه به فراخور مي شود به مطلوبي كه از ظاهر سوال درك مي شود رسيد. اما چون سوال شخصي مثل شما نبايد يك چيز معمولي باشد لذا اگر مايل هستيد توضيح بيشتري بدهيد كه منظور چيست؟

انگوران
شنبه 02 بهمن 1389, 13:59 عصر
ممنونم دوست عزيز، يه نگاهي به فايل پيوست بندازين.روي فرم يه توضيح كوچيك نوشتم .

anbaran
شنبه 02 بهمن 1389, 14:57 عصر
شما چرا کوئری رو تغییر میدید
میتونید ستونهای ساب فرم رو از حالت نمایش دربیارین یا نمایش بدین

کد زیر رو تونمونه خود کپی کنید ببینید چطوره


Private Sub List0_AfterUpdate()
For i = 0 To List0.ListCount - 1
Form_subform(List0.ItemData(i)).ColumnHidden = True
Next
For i = 0 To List0.ItemsSelected.Count - 1
Form_subform(List0.ItemData(List0.ItemsSelected.It em(i))).ColumnHidden = False
Next
End Sub

انگوران
یک شنبه 03 بهمن 1389, 07:41 صبح
با سلام و سپاس، در صورتي كه بخوايم از اين امكان فقط براي نمايش و يا عدم نمايش ستونهاي سابفرم استفاده كنيم روش خوب و جالبيه، ولي من مي خوام جاهاي ديگه هم ازش استفاده كنم ( مثلاً در گزارش ، خروجي اكسل و ... ). اجتمالاً ثابتي باشه كه بتونه همچين كاري رو بكنه . با سپاس مجدد

انگوران
سه شنبه 05 بهمن 1389, 12:55 عصر
من كه تا حالا نتونستم راه حلي براش پيدا كنم ، باز هم منتظر عنايت اساتيد مي مونم.

stabesh
سه شنبه 05 بهمن 1389, 13:01 عصر
سلام
میتونید وقتی که کاربر هر ستون رو انتخاب کرد recordset پشت فرم رو عوض کنید البته من تا حالا این کار رو نکردم ولی قبلا اینجا دیده بودم
http://support.microsoft.com/kb/281998

انگوران
سه شنبه 05 بهمن 1389, 13:51 عصر
ممنونم دوست عزيز، با روشهاي ديگه اين كار رو انجام دادم، ولي اينجا قصدم صرفاً برداشتن تيك Show از طريق كدنويسي هست.

stabesh
سه شنبه 05 بهمن 1389, 14:05 عصر
این شاید به کارتون بیاد


Sub RewriteQuerySQL(strQueryName As String, strParameter As String)
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb()
Set qdf = db.QueryDefs(strQueryName)

qdf.SQL = "SELECT [Table]." & strParameter & ", " & vbCrLf & _
"FROM [Table] "
qdf.Close
Set qdf = Nothing

End Sub

amirzazadeh
شنبه 09 بهمن 1389, 11:51 صبح
من كه تا حالا نتونستم راه حلي براش پيدا كنم ، باز هم منتظر عنايت اساتيد مي مونم.
سلام
نمونه شما رو كمي تغيير دادم(تعويض ليست باكس با چك باكس)
اميدوارم به دردتون بخوره
http://barnamenevis.org/showthread.php?271927-Hide-%D9%88-%DB%8C%D8%A7-Unhide-%DA%A9%D8%B1%D8%AF%D9%86-%DB%8C%DA%A9-%D9%81%DB%8C%D9%84%D8%AF-%DB%8C%D8%A7-%DB%8C%DA%A9-%D8%B3%D8%AA%D9%88%D9%86-%D8%AF%D8%B1-%D8%B3%D8%A7%D8%A8%D9%81%D9%88%D8%B1%D9%85&p=1203160#post1203160

انگوران
شنبه 09 بهمن 1389, 16:23 عصر
از لطف شما ممنونم، حقيقتش دليل اصلي طرح اين سؤال فقط مخفي كردن ستونها نيست بلكه رفع مشكلات مربوط به پارامترهاي تعيين شده هست كه فكر كنم با برداشتن تيك Show پارامتر بدون مشكل اجرا بشه و كار ما راه بيفته .

amirzazadeh
یک شنبه 10 بهمن 1389, 07:33 صبح
از لطف شما ممنونم، حقيقتش دليل اصلي طرح اين سؤال فقط مخفي كردن ستونها نيست بلكه رفع مشكلات مربوط به پارامترهاي تعيين شده هست كه فكر كنم با برداشتن تيك Show پارامتر بدون مشكل اجرا بشه و كار ما راه بيفته .
سلام
كد رو به اين شكل اصلاح كنيد:

Private Function ShowHideColumn()
Dim sfrm As SubForm
Dim ctl As Control
Dim stCtl As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim sql1 As String
Set sfrm = Me.tbl1subform
For Each ctl In Me.Controls
If TypeOf ctl Is Access.CheckBox Then
stCtl = ctl.Name
sfrm.Form(stCtl).ColumnHidden = _
Not ctl.Value
If ctl.Value = -1 Then
sql1 = sql1 & stCtl & ","
End If
End If
Next ctl
i = Len(sql1) - 1
If i > 0 Then
sql1 = Left(sql1, i)
sql1 = "select " & sql1 & " from tbl1"

Set db = CurrentDb()
Set qdf = db.QueryDefs("query1")
qdf.SQL = sql1
qdf.Close
Set qdf = Nothing
End If
End Function
در اين حالت query 1 بر اساس چك باكسهاي داراي علامت ساخته شده و به عنوان منبع براي فرم يا گزارش قابل استفاده خواهد بود.
........................
موفق باشيد

انگوران
یک شنبه 10 بهمن 1389, 10:21 صبح
سلام استاد معزز، مي دونم خيلي اذيت شدين ولي با اين كدي كه زحمتش رو كشيدين، فيلدهاي كويري هم حذف مي شه، بنابراين پارامترهاش هم حذف ميشن و كارم راه نمي افته. راستش هنوزم فكر ميكنم ثابتي توي Vba بايد باشه كه اين كار رو انجام بده. باز هم از لطفتون ممنونم

amirzazadeh
یک شنبه 10 بهمن 1389, 11:02 صبح
سلام استاد معزز، مي دونم خيلي اذيت شدين ولي با اين كدي كه زحمتش رو كشيدين، فيلدهاي كويري هم حذف مي شه، بنابراين پارامترهاش هم حذف ميشن و كارم راه نمي افته. راستش هنوزم فكر ميكنم ثابتي توي Vba بايد باشه كه اين كار رو انجام بده. باز هم از لطفتون ممنونم
سلام جناب انگوران
با لحاظ كردن پارامترها فيلد مربوطه حذف نخواهد شد به عنوان مثال اگر شما درخواست نمايش فيلد 1 در حالتي كه فيلد 2 برابر با a هست بكنيد كد به اين شكل خواهد بود

Dim sfrm As SubForm
Dim ctl As Control
Dim stCtl As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim sql1 As String
Set sfrm = Me.tbl1subform
For Each ctl In Me.Controls
If TypeOf ctl Is Access.CheckBox Then
stCtl = ctl.Name
sfrm.Form(stCtl).ColumnHidden = _
Not ctl.Value
If ctl.Value = -1 Then
sql1 = sql1 & stCtl & ","
End If
End If
Next ctl
i = Len(sql1) - 1
If i > 0 Then
sql1 = Left(sql1, i)
sql1 = "select " & sql1 & " from tbl1 where field2='a'"

Set db = CurrentDb()
Set qdf = db.QueryDefs("query1")
qdf.SQL = sql1
qdf.Close
Set qdf = Nothing
End If
كه در اين حالت با وجود عدم نمايش فيلد 2 پارامتر مورد نظر اعمال خواهد شد.