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

نام تاپیک: خطا در ADODB.Recordset.Filter

  1. #1

    خطا در ADODB.Recordset.Filter

    با سلام

    در زير پارامترهاي جلوي .Filter به سه شكل چيده شده‌اند.
    شكل اول:
    .Filter = "Amount = 0 and (EntrID = 2 or EntrID = 9)"

    شكل دوم:
    .Filter = "Amount = 0 and EntrID = 2 or Amount = 0 And EntrID = 9"

    شكل سوم:
    .Filter = "Amount = 0 and EntrID = 2 or EntrID = 9"


    در واقع من به دنبال سوا كردن ركوردهائي هستم كه Amount = 0 و EntrID آنها يا 2 و يا 9 باشند.
    بدين ترتيب، مسلماً شكل سوم، هرچند كه بدون مشكلي اجرا مي‌شود ولي جوابگوي سئوال نيست.
    در شكل اول و دوم، ADODB.Recordset خطاي 3001 را با مضمون زير برمي‌گرداند.
    Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

    آيا ممكن است دوستان كمكم كنند تا بفهمم مشكل كجاست و چگونه چنين فيلتري انجام دهم؟
    ممنون

  2. #2

    نقل قول: خطا در ADODB.Recordset.Filter

    خواهش ميكنم؟؟؟؟؟؟؟ به من .... كمك كنيد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟

  3. #3

    نقل قول: خطا در ADODB.Recordset.Filter

    سلام
    بانكتون رو بزاريد
    اگر من و شما هر كدوم يك چيز ياد داشته باشيم و به هم ياد بديم، حالا هر كدوم دو تا چيز ياد داريم ! http://www.ArminaCo.com

  4. #4

    نقل قول: خطا در ADODB.Recordset.Filter

    فايل پيوست را ببينيد
    فایل های ضمیمه فایل های ضمیمه

  5. #5

    نقل قول: خطا در ADODB.Recordset.Filter

    سلام
    از روش زير استفاده كنيد

    Private Sub Command2_Click()

    Me.Adodc1.RecordSource = "select * from table1 where Amount = 0 and (EntrID = 2 or EntrID = 9)"
    Me.Adodc1.Refresh

    MsgBox "RecordCount = " & Adodc1.Recordset.RecordCount

    End Sub

    اگر من و شما هر كدوم يك چيز ياد داشته باشيم و به هم ياد بديم، حالا هر كدوم دو تا چيز ياد داريم ! http://www.ArminaCo.com

  6. #6

    نقل قول: خطا در ADODB.Recordset.Filter

    مشكل اينجاست كه نمي‌خواهم اين فيلتر را از طريق تغيير دستور ركوردست انجام دهم و به دنبال پياده كردن آن با .Fiter هستم.
    آيا واقعاً نمي‌توان به كمك فيلتر اين كار را عملي كرد؟
    آخرین ویرایش به وسیله A.Farzin : دوشنبه 07 مرداد 1387 در 19:04 عصر

  7. #7

    Wink نقل قول: خطا در ADODB.Recordset.Filter

    سلام

    دقیقا میخواین چی کار کنین ؟

    کوئریتون چیه ؟

  8. #8

    نقل قول: خطا در ADODB.Recordset.Filter

    نقل قول نوشته شده توسط فاطمه وطن دوست مشاهده تاپیک
    دقیقا میخواین چی کار کنین ؟
    من ابتدا تعدادي از ركودهاي مورد نظر كاربر را در يك Grid به او نشان مي‌دهم. در اكثر مواقع كاربر نياز دارد تا از بين نتايج حاصل از SELECT (اجراي كوئري) اقدام به جدا كردن مقادير دلخواهي از هر كدام از ستونها كند و نياز ندارد تا بقيه ركوردهائي كه شرط مورد نظر او را ندارند در Grid ديده شوند. من اين كار دوم را به كمك Filter انجام مي‌دهم چون:
    اول) به دليل اجراي آن با استفاده از امكانات ADO بسيار سريعتر از اجراي مجدد SELECT از ديتابيس جواب مي‌دهد. علت آن اين است كه اگر از SELECT استفاده كنم عمل پردازش دستور را بايد Query Analyser برنامه SQL Server انجام دهد. ولي وقتي از Filter استفاده مي‌كنم در واقع پردازش دستور توسط ADO صورت مي‌گيرد نه توسط موتور SQL Server.
    دوم) ديتابيس من بسيار بزرگ است و از آنجا كه كاربر ممكن است از هر كدام از ستونها براي جدا كردن مقادير دلخواه خود بخواهد كمك بگيرد اگر بخواهم اين كار را به كمك SELECT انجام دهم بايد ايندكسهاي زيادي روي ديتابيسم بگذارم كه حجم ديتابيس را وحشتناك بالا مي‌برد.

    پس مناسبترين راه همان اجراي SELECT و استفاده از امكان فيلتر روي ركوردست است ولي نمي‌دانم چرا ADO روي شروطي كه با OR و داخل پرانتز قرار داده مي‌شوند، خطا مي‌گيرد؟

  9. #9

    Wink نقل قول: خطا در ADODB.Recordset.Filter

    سلام
    اینو هم تست کنید .


    Private Sub Command1_Click()
    Me.Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb;Persist Security Info=False"
    Me.Adodc1.RecordSource = "SELECT * FROM Table1 where Amount='0'"
    Me.Adodc1.Refresh
    MsgBox "RecordCount = " & Adodc1.Recordset.RecordCount
    End Sub

    Private Sub Command2_Click()
    'Err.Description = Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
    Me.Adodc1.Recordset.Filter = "EntrID = '2' or EntrID = '9'"
    'Err.Description = Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
    Me.Adodc1.Recordset.Filter = " EntrID = '2' and EntrID = '9'"
    Me.Adodc1.Recordset.Filter = " EntrID = '2'"
    'Me.Adodc1.Recordset.Requery
    MsgBox "RecordCount = " & Adodc1.Recordset.RecordCount
    End Sub


  10. #10

    نقل قول: خطا در ADODB.Recordset.Filter

    با اين شكل خطا رخ نمي‌دهد ولي منظور من اين نيست چون در لحظه انجام SELECT معلوم نيست كاربر از چه فيلدي براي جدا كردن استفاده خواهد كرد جدول واقعي من حدود 50 فيلد دارد و هر كدام از اين فيلدها ممكن است جاي Amount را بگيرند
    پس ممكن است كاربر در يك لحظه Amount=0 و در لحظه بعدي فيلد ديگري را. حتي تركيبهائي از فيلدهائي كه انتخاب هر كدام آنها و به هر شكل منجر به يك شرط براي Filter مي‌شود. اگر اينها را بخواهم در SELECT بگنجانم مشكل ايندكسها و حجم پيدا مي‌كنم. و داستاني كه در پست قبلي گفتم.
    بهترين راه استفاده از Filter است. بهتر است علت عدم اجراي اين شكل دستور را در Filter پيدا كنيم شايد نتيجه اين شود كه آقا به هيچ وجه من‌الوجوه چنين كاري با Filter عملي نيست.!!!
    اميدوارم كه به اين نتيجه نرسيم.
    تازه متوجه شدم كه اگر بخواهيم عكس (نقيض) موارد ذيل را فيلتر كنيم هم همچنين مشكلي پيش مي‌آيد:
    Me.Adodc1.Recordset.Filter = "EntrName Like '*ote*'"

برچسب های این تاپیک

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

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