PDA

View Full Version : اشتباه سورت در کوئری



majid325
شنبه 28 مرداد 1385, 19:28 عصر
با سلام خدمت دوستان :
من یک کوئری نوشتم(به کمک یکی از دوستان) که اطلاعاتم را از یک جدول استخراج میکنه در یک گرید , در روال طبیعی سورت هیچ مشکلی ندارد ولی بعضی مواقع سورتی که باید از 1 تا 138 باشد از مثلأ 20 به بعد شروع میشود لطفأ در حل این مشکل به من کمک کنید . با تشکر

majid325
شنبه 28 مرداد 1385, 22:04 عصر
اینهم نمونه برنامه .
در ضمن گزینه hidden باید فعال باشد.
اینم Password =5230028

moustafa
شنبه 28 مرداد 1385, 23:50 عصر
فیلد را ازنوع number تعریف کردی ؟

سنبله کار
یک شنبه 29 مرداد 1385, 08:53 صبح
لطفا دقیقا بفرمایید این مشکل کجای برنامتون هست

mohammadgij
یک شنبه 29 مرداد 1385, 11:15 صبح
شما این فیلدتون(CODE) از نوع TEXT تعریف شده و حتی اگه سورت هم بشه بعد از 1 شماره 10 و بعد 100 و بعد 101 و ....... و در آخر 2 و آخرین شماره حتما شروع شده با 9 است مثل 99

majid325
یک شنبه 29 مرداد 1385, 17:48 عصر
با سلام ........


لطفا دقیقا بفرمایید این مشکل کجای برنامتون هست
با این کوئری که شما به من دادید گرید من پر میشه ولی بعضی وقتها از رکورد اولی شروع نمیشه!

Private Sub ID_BeforeUpdate(Cancel As Integer)

DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Tb_bar ( Mavad,Code ,ID )SELECT Tb_mavad.mavad,Tb_mavad.ID, " & ID & " FROM Tb_mavad;"
Form_Tb_bar1.Requery
DoCmd.SetWarnings True

End Sub


با عرض تشکر اگر میشه باز هم کمکم کنید...


شما این فیلدتون(CODE) از نوع TEXT تعریف شده و حتی اگه سورت هم بشه بعد از 1 شماره 10 و بعد 100 و بعد 101 و ....... و در آخر 2 و آخرین شماره حتما شروع شده با 9 است مثل 99

با عرض تشکر من متوجه منظورتان نشدم دوست عزیز....
در ضمن من میخواهم رکوردهای جدول Tb_Mavad با فیلد id که از نوع number است سورت بشه و میشه ولی بعد از 7 یا 8 بار صحیح اجرا شدن از فیلد مثلا 20 شروع میکنه (بعد ار هر 7 یا 8 بار صحیح اجرا شدن یک بار غلط اجرا میشود)با تشکر

majid325
یک شنبه 29 مرداد 1385, 22:43 عصر
البته الان با این کوئری هم که تست میکنم بازم بعد از هر 7 یا 8 بار صحیح اجرا شدن یک بار غلط اجرا میشود.........

DoCmd.RunSQL "INSERT INTO Tb_bar ( Mavad,Code ,ID )SELECT Tb_mavad.mavad,Tb_mavad.ID, " & ID & " FROM Tb_mavad ORDER BY Tb_mavad.id ;"

سنبله کار
دوشنبه 30 مرداد 1385, 09:07 صبح
باید بگردید و فرق اون 7 یا 8 مورد را با اون یک مورد پیدا کنید که مثلا در مقدار یا نوع داده یا هرچیز دیگری ممکنه باشه که در کد نویسی پیش بینی نشده

mohammadgij
دوشنبه 30 مرداد 1385, 10:49 صبح
شما هدفتون اینه که SubForm رو سورت کنید؟؟؟؟؟
من هر چی به SubForm شما نمگاه می کنم اصلا شما در Record Source اون اصلا از Tb_Mavad استفاده نکردین. بلکه از Tb_bar استفاده شده و از Tb_soal
حالا اگه منظورتون اون سابفرم زیره که پس از دستور Insert این دستور رو بنویسید



Form_Tb_bar1.Form.RecordSource = "SELECT Tb_bar.* FROM Tb_bar ORDER BY Tb_bar.ID"

mi_9469
دوشنبه 30 مرداد 1385, 11:08 صبح
شما این فیلدتون(CODE) از نوع TEXT تعریف شده و حتی اگه سورت هم بشه بعد از 1 شماره 10 و بعد 100 و بعد 101 و ....... و در آخر 2 و آخرین شماره حتما شروع شده با 9 است مثل 99

سلام فرض کنید نام فیلد مورد نظر
باشدfld1
برای سورت کردن بنویسید
order by convert(int,fld1)

mohammadgij
دوشنبه 30 مرداد 1385, 11:21 صبح
جالب بود. من توی Sql مشابه دستوری که نوشتی رو استفاده کرده بودم(Cast() ) اما توی اکسس مدت ها بود که دنبال یه همچین دستوری بودم

majid325
دوشنبه 30 مرداد 1385, 18:21 عصر
سلام:
با تشکر از لطف همه دوستان....

باید بگردید و فرق اون 7 یا 8 مورد را با اون یک مورد پیدا کنید که مثلا در مقدار یا نوع داده یا هرچیز دیگری ممکنه باشه که در کد نویسی پیش بینی نشده

آقای سنبله کار عزیز هیچ تفاوتی نداره و از نظر منطقی هم نمیتونه داشته باشه ( یا من متوجه نشدم) , من بدون اینکه دیتا را دستی وارد کنم فقط با وارد کردن یک عدد به عنوان id (در text کد )
باعث میشوم که این کد که در زیر است بدون هیچ تفاوتی هی تکرار شود ولی این کد در بعضی مواقع به ترتیب سورت نمیشود...اگر می شود بی زحمت خودتان تست کنید با این روش که گفتم 10 ,12 تا رکورد ثبت کنید تا متوجه منظورم بشوید

Private Sub ID_BeforeUpdate(Cancel As Integer)
On Error GoTo err
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Tb_bar ( Mavad,Code ,ID )SELECT Tb_mavad.mavad,Tb_mavad.ID, " & ID & " FROM Tb_mavad ;"
Form_Tb_bar1.Requery
DoCmd.SetWarnings True
Exit Sub
err:
MsgBox err.Description

End Sub

majid325
دوشنبه 30 مرداد 1385, 18:26 عصر
جالب بود. من توی Sql مشابه دستوری که نوشتی رو استفاده کرده بودم(Cast() ) اما توی اکسس مدت ها بود که دنبال یه همچین دستوری بودم
این کد را آقای سنبله کار به من معرفی کردند.....



سلام فرض کنید نام فیلد مورد نظر
باشدfld1
برای سورت کردن بنویسید
order by convert(int,fld1)

دوست عزیز دست شما درد نکنه ولی از کلمه کلیدی convert ایراد (error) میگیره .....

majid325
دوشنبه 30 مرداد 1385, 18:36 عصر
در ضمن من شنیدم اکسس در بعضی موارد کد را بخوبی اجرا نمی کند..........
آیا این مطلب صحت دارد؟
با تشکر

majid325
جمعه 03 شهریور 1385, 18:38 عصر
با سلام:
کسی از دوستان پیشنهادی برای حل این مشکل نداره .......

سنبله کار
شنبه 04 شهریور 1385, 15:29 عصر
در ضمن من شنیدم اکسس در بعضی موارد کد را بخوبی اجرا نمی کند..........
آیا این مطلب صحت دارد؟
با تشکر
طی چند سالی که با اکسس کار کردم به چنین چیزی بر نخوردم مگر اینکه یک جای کار خودم اشتباه باشه
می دونید VB در عین سادگی و انعطاف نکات ریزی توش هست که اگه رعایت نشه جواب مورد انتظار رو نمی ده .

masoodbahrami
شنبه 04 شهریور 1385, 15:43 عصر
از تابع CLng برای سورت استفاده کنید:
SELECT * FROM TABLE ORDER BY CLng(Field); Query

majid325
شنبه 04 شهریور 1385, 19:14 عصر
از تابع CLng برای سورت استفاده کنید:
SELECT * FROM TABLE ORDER BY CLng(Field); Query
دوست عزیز با تشکر از توجه شما راه حل پیشنهادی شما را اجرا کردم ولی همچنان مشکل سابق برجاست.....

majid325
شنبه 04 شهریور 1385, 21:14 عصر
قابل توجه دوستان پیوست اول تایپیک (نمونه برنامه)شنبه 4 شهریور با کمی تغییرات(ولی با همان مشکل قبلی) دوباره upload شد ... با تشکر از همه.

majid325
یک شنبه 12 شهریور 1385, 21:48 عصر
از راهنمایی تمام دوستان تشکر و قدردانی میکنم...
و اما را حل:
من در تک تک جدولهام یک فیلد به صورت AutoNumber تعریف کردم و بعد مشکلم حل شد
ولی باز نفهمیدم مشکل آیا از اشتباه Access بود یا نه...........
با آرزوی حل مشکلات تمام دوستان..........