نمایش نتایج 1 تا 10 از 10

نام تاپیک: نوشتن دستور sql در vba

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نوشتن دستور sql در vba

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

    set rs = db.openrecordset " select * from tbl1 where( field1 =textbox1 or textbox1 is nu11 )ORDER BY field2"

    کد زیر با چند شرط عمل نمیکنه
    set rs = db.openrecordset " select * from tbl1 where( field1  like '*" & textbox1 & "*' )ORDER BY field2" 

  2. #2
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,492

    نقل قول: نوشتن دستور sql در vba

    این کد پایین
    " select * from tbl1 where( field1 =textbox1 or textbox1 is nu11 )ORDER BY field2"

    همینجوری 2 اشکال درش دیده میشه:
    1- اون null نیست و nu11 هست (به جای l شماره 1 تایپ شده)
    2- این که مقدار textbox باید بیاد درون استرینگ
    البته بهتره که پرانتز با order هم فاصله داشته باشه - هرچند که خطا نمیگیره.

  3. #3
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,492

    نقل قول: نوشتن دستور sql در vba

    کد زیر با چند شرط عمل نمیکنه
    من قبلا یک نمونه برای جستجو گذاشتم،
    شاید بتونه به شما کمک کنه:

    آموزش: فرم جستجوی پیشرفته (چند شرط،بر اساس همه/هریک از کلمات یا عبارات، انتخاب چند شرط برای یک فیلد و ...)

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: نوشتن دستور sql در vba

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    این کد پایین
    " select * from tbl1 where( field1 =textbox1 or textbox1 is nu11 )ORDER BY field2"

    همینجوری 2 اشکال درش دیده میشه:
    1- اون null نیست و nu11 هست (به جای l شماره 1 تایپ شده)
    2- این که مقدار textbox باید بیاد درون استرینگ
    البته بهتره که پرانتز با order هم فاصله داشته باشه - هرچند که خطا نمیگیره.
    بله null هستش و اشتباه تایپی در اینجاست و در خود کد درست نوشته شده و همین مورد 2 رو اگه ممکن زحمتشو بکشین چون من هر جور تبدیل به رشته کردم نشد که نشد بنابراین با if و بررسی null بودن و کدهای تکراری کار رو دراوردم
     Dim db3 As Database
    Dim rs3 As Recordset
    Set db3 = CurrentDb

    If Forms!frmReport!noe_sorat_vaziyat <> "" Then

    SQL3 = "SELECT shomare_sorat_vaziyat,shomare_allhesab," & _
    "right(EslashInDate(tharikh_havale_gh),len(EslashI nDate(tharikh_havale_gh))-2)," & _
    "Switch(noe_sorat_vaziyat=1,'موقت',noe_sorat_v aziyat=2,'قطعي',noe_sorat_vaziyat=3,'تعدي ',noe_sorat_vaziyat=4,'پيش پرداخت')," & _
    " mablagh_khazaneh+mablagh_havale+pish_mojodi_jensi+ pish_naghdi as n ," & _
    " mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh_kh+h efze_arzesh_afzode as m," & _
    "mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma+hefze_bimeh as bk,hefze_khales ," & _
    "n+m+bk+hefze_khales as k,mablagh_hosne_kar+mablagh_hosne_kar_kh as hk," & _
    "mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh _kh as m1,hefze_arzesh_afzode," & _
    "m,mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma as bk1," & _
    "mablagh_bimeh_pimankar+mablagh_bimeh_pimankar _kh as bp," & _
    "hefze_bimeh,bk1+bp+hefze_bimeh as jb,pishpardakhat_kh+pishpardakhat as pi," & _
    "mojodi_jensi_kh+mojodi_jensi as mo,mo+pi+jb+hk+m as ko,k-ko as kp FROM tblmoshakhasat_havale WHERE" & _
    "( shomare_gharardad = " & Forms!frmReport!cbxShomareGharardad & _
    " and noe_sorat_vaziyat = " & Forms!frmReport!noe_sorat_vaziyat & _
    " and ravesh_pardakht like '*" & Forms!frmReport!ravesh_pardakht & "*')ORDER BY shomare_sorat_vaziyat"
    Else

    SQL3 = "SELECT shomare_sorat_vaziyat,shomare_allhesab," & _
    "right(EslashInDate(tharikh_havale_gh),len(EslashI nDate(tharikh_havale_gh))-2)," & _
    "Switch(noe_sorat_vaziyat=1,'موقت',noe_sorat_v aziyat=2,'قطعي',noe_sorat_vaziyat=3,'تعدي ',noe_sorat_vaziyat=4,'پيش پرداخت')," & _
    " mablagh_khazaneh+mablagh_havale+pish_mojodi_jensi+ pish_naghdi as n ," & _
    " mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh_kh+h efze_arzesh_afzode as m," & _
    "mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma+hefze_bimeh as bk,hefze_khales ," & _
    "n+m+bk+hefze_khales as k,mablagh_hosne_kar+mablagh_hosne_kar_kh as hk," & _
    "mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh _kh as m1,hefze_arzesh_afzode," & _
    "m,mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma as bk1," & _
    "mablagh_bimeh_pimankar+mablagh_bimeh_pimankar _kh as bp," & _
    "hefze_bimeh,bk1+bp+hefze_bimeh as jb,pishpardakhat_kh+pishpardakhat as pi," & _
    "mojodi_jensi_kh+mojodi_jensi as mo,mo+pi+jb+hk+m as ko,k-ko as kp FROM tblmoshakhasat_havale WHERE" & _
    "( shomare_gharardad = " & Forms!frmReport!cbxShomareGharardad & _
    " and ravesh_pardakht like '*" & Forms!frmReport!ravesh_pardakht & "*')ORDER BY shomare_sorat_vaziyat"
    End If



    Set rs3 = db.OpenRecordset(SQL3)
    j = rs3.RecordCount + 3
    wrk.Sheets("kv").Range("a3").CopyFromRecordset rs3
    Set db3 = Nothing
    Set rs3 = Nothing

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: نوشتن دستور sql در vba

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    این کد پایین
    " select * from tbl1 where( field1 =textbox1 or textbox1 is nu11 )ORDER BY field2"

    همینجوری 2 اشکال درش دیده میشه:
    1- اون null نیست و nu11 هست (به جای l شماره 1 تایپ شده)
    2- این که مقدار textbox باید بیاد درون استرینگ
    البته بهتره که پرانتز با order هم فاصله داشته باشه - هرچند که خطا نمیگیره.
    بله null هستش و اشتباه تایپی در اینجاست و در خود کد درست نوشته شده و همین مورد 2 رو اگه ممکن زحمتشو بکشین چون من هر جور تبدیل به رشته کردم نشد که نشد بنابراین با if و بررسی null بودن و کدهای تکراری کار رو دراوردم
     Dim db3 As Database
    Dim rs3 As Recordset
    Set db3 = CurrentDb

    If Forms!frmReport!noe_sorat_vaziyat <> "" Then

    SQL3 = "SELECT shomare_sorat_vaziyat,shomare_allhesab," & _
    "right(EslashInDate(tharikh_havale_gh),len(EslashI nDate(tharikh_havale_gh))-2)," & _
    "Switch(noe_sorat_vaziyat=1,'موقت',noe_sorat_v aziyat=2,'قطعي',noe_sorat_vaziyat=3,'تعدي ',noe_sorat_vaziyat=4,'پيش پرداخت')," & _
    " mablagh_khazaneh+mablagh_havale+pish_mojodi_jensi+ pish_naghdi as n ," & _
    " mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh_kh+h efze_arzesh_afzode as m," & _
    "mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma+hefze_bimeh as bk,hefze_khales ," & _
    "n+m+bk+hefze_khales as k,mablagh_hosne_kar+mablagh_hosne_kar_kh as hk," & _
    "mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh _kh as m1,hefze_arzesh_afzode," & _
    "m,mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma as bk1," & _
    "mablagh_bimeh_pimankar+mablagh_bimeh_pimankar _kh as bp," & _
    "hefze_bimeh,bk1+bp+hefze_bimeh as jb,pishpardakhat_kh+pishpardakhat as pi," & _
    "mojodi_jensi_kh+mojodi_jensi as mo,mo+pi+jb+hk+m as ko,k-ko as kp FROM tblmoshakhasat_havale WHERE" & _
    "( shomare_gharardad = " & Forms!frmReport!cbxShomareGharardad & _
    " and noe_sorat_vaziyat = " & Forms!frmReport!noe_sorat_vaziyat & _
    " and ravesh_pardakht like '*" & Forms!frmReport!ravesh_pardakht & "*')ORDER BY shomare_sorat_vaziyat"
    Else

    SQL3 = "SELECT shomare_sorat_vaziyat,shomare_allhesab," & _
    "right(EslashInDate(tharikh_havale_gh),len(EslashI nDate(tharikh_havale_gh))-2)," & _
    "Switch(noe_sorat_vaziyat=1,'موقت',noe_sorat_v aziyat=2,'قطعي',noe_sorat_vaziyat=3,'تعدي ',noe_sorat_vaziyat=4,'پيش پرداخت')," & _
    " mablagh_khazaneh+mablagh_havale+pish_mojodi_jensi+ pish_naghdi as n ," & _
    " mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh_kh+h efze_arzesh_afzode as m," & _
    "mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma+hefze_bimeh as bk,hefze_khales ," & _
    "n+m+bk+hefze_khales as k,mablagh_hosne_kar+mablagh_hosne_kar_kh as hk," & _
    "mablagh_arzesh_afzodeh+mablagh_arzesh_afzodeh _kh as m1,hefze_arzesh_afzode," & _
    "m,mablagh_bimeh_karfarma_kh + mablagh_bimeh_karfarma as bk1," & _
    "mablagh_bimeh_pimankar+mablagh_bimeh_pimankar _kh as bp," & _
    "hefze_bimeh,bk1+bp+hefze_bimeh as jb,pishpardakhat_kh+pishpardakhat as pi," & _
    "mojodi_jensi_kh+mojodi_jensi as mo,mo+pi+jb+hk+m as ko,k-ko as kp FROM tblmoshakhasat_havale WHERE" & _
    "( shomare_gharardad = " & Forms!frmReport!cbxShomareGharardad & _
    " and ravesh_pardakht like '*" & Forms!frmReport!ravesh_pardakht & "*')ORDER BY shomare_sorat_vaziyat"
    End If



    Set rs3 = db.OpenRecordset(SQL3)
    j = rs3.RecordCount + 3
    wrk.Sheets("kv").Range("a3").CopyFromRecordset rs3
    Set db3 = Nothing
    Set rs3 = Nothing

  6. #6
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: نوشتن دستور sql در vba

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    ممنون از شما دیدم و خیلی چیزا یاد گرفتم

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: نوشتن دستور sql در vba

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    این کد پایین
    " select * from tbl1 where( field1 =textbox1 or textbox1 is nu11 )ORDER BY field2"

    همینجوری 2 اشکال درش دیده میشه:
    1- اون null نیست و nu11 هست (به جای l شماره 1 تایپ شده)
    2- این که مقدار textbox باید بیاد درون استرینگ
    البته بهتره که پرانتز با order هم فاصله داشته باشه - هرچند که خطا نمیگیره.
    این یه مورد از تبدیل که کرده بودم و جواب نداد

    "
    select * from tbl1 where( field1 ='" & textbox1 & "'or " & textbox1 is null & " ) ORDER BY field2"

    ظاهرا کیبرد من حرف l رو شبیه 1 میزنه فقط کمی بلندتر بنابراین تایپ اشتباه نیست

  8. #8
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,492

    نقل قول: نوشتن دستور sql در vba

    من هر جور تبدیل به رشته کردم نشد که نشد بنابراین با if و بررسی null بودن و کدهای تکراری کار رو دراوردم
    این کد شلوغ و پیچیده ای هست،
    اول باید ساده اش کنین.

    بجای این که تعداد زیادی ستون رو در select بیارین یک کوئری ساده (بدون where) بسازین و order رو هم در همون کوئری بیارین،
    به این ترتیب کد شما به شکل زیر ساده میشه:
    SQL3= "SELECT * FROM QueryName"

    و بعد بر اساس این که چه شرطهایی باید اعمال بشه در صورت نیاز where رو بهش اضافه کنین.

    اون switch هم چیز بدی هست،
    بجاش array یا function استفاده کنین.

    یک راه دیگه این هست که همون کوئری بالا رو پارامتریک بسازین
    و شرطها رو درش با پارامتر پیاده کنین.
    و بعد در کد خیلی ساده شرطها رو به کوئری پاس و رکوردست رو از این کوئری بگیرین.

    ظاهرا کیبرد من حرف l رو شبیه 1 میزنه فقط کمی بلندتر بنابراین تایپ اشتباه نیست
    قطعا اشتباه تایپی هست و اون واقعا یک لاتینه نه حرف l - ربطی به کیبرد نداره

    این یه مورد از تبدیل که کرده بودم و جواب نداد
    "select * from tbl1 where( field1 ='" &  textbox1  &  "'or "  &  textbox1 is null  &  " ) ORDER BY field2"
    همون اشتباه اولیه رو دوباره تکرار کردین - باید اینجوری بنویسین:
    "SELECT * FROM tbl1 WHERE (field1 ='" &  textbox1  &  "' OR '"  &  textbox1 & "' IS NULL) ORDER BY field2"

    یا به طور اصولی تر:
    DIM SQL AS STRING
    SQL= "SELECT * FROM tbl1 WHERE (field1='@txt' OR '@txt' IS NULL) ORDER BY field2"
    SQL= REPLACE(SQL , "@txt" , textbox1)

  9. #9
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: نوشتن دستور sql در vba

    عرض ادب و احترام
    در کدی که گذاشتم عدد یک و حرف انگلیسی ال در کنار هم در کلمه tbl1 وجود دارن شبیه هم ولی ال بزرگتره

    DIM SQL AS STRING
    SQL= "SELECT * FROM tbl1 WHERE (field1='@txt' OR '@txt' IS NULL) ORDER BY field2"

    SQL= REPLACE(SQL , "@txt" , textbox1)
    کوئری پارامتریک همینیه که گذاشتین ؟ اگه ممکنه یه نمونه شامل پارامتر رشته ای و پارامتر عددی بذارین .
    با سپاس و تشکر فراوان
    آخرین ویرایش به وسیله moustafa : پنج شنبه 20 دی 1403 در 15:09 عصر

  10. #10
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,492

    نقل قول: نوشتن دستور sql در vba

    سلام دوباره

    در کدی که گذاشتم عدد یک و حرف انگلیسی ال در کنار هم در کلمه tbl1 وجود دارن شبیه هم ولی ال بزرگتره
    این کد شماست،
    با توجه به این که ادیتور فروم اعداد رو فارسی میکنه کاملا واضح هست داستان:
    set rs = db.openrecordset " select * from tbl1 where( field1 =textbox1 or textbox1 is nu11 )ORDER BY field2"

    در هر صورت این مورد دیگه تمام شده اس.

    کوئری پارامتریک همینیه که گذاشتین ؟ اگه ممکنه یه نمونه شامل پارامتر رشته ای و پارامتر عددی بذارین .
    این یک کوئری معمولی هست که با کد ساختیم.

    برای نمونه های کوئری پارامتریک،
    پارامترهای optional (نادیده گرفتن پارامتر در صورت NULL بودن)،
    وروش مقدار دهی اونها با کد،
    نمونه زیر رو ببینین:

    مشکل در اجرای کوئری با چندین شرط

تاپیک های مشابه

  1. نشناختن دستور toast.maketext در آندروید استودیو
    نوشته شده توسط araman59 در بخش Android Studio
    پاسخ: 2
    آخرین پست: یک شنبه 28 دی 1393, 20:37 عصر
  2. پاسخ: 4
    آخرین پست: سه شنبه 23 مهر 1392, 06:57 صبح
  3. پاسخ: 3
    آخرین پست: پنج شنبه 04 فروردین 1390, 00:51 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •