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

نام تاپیک: فیلتر هوشمند یک محدوده در Adotable

  1. #1

    Question فیلتر هوشمند یک محدوده در Adotable

    سلام
    من یک بانک اکسس که دارای یک تیبل و 3 فیلد دارم.
    فیلدهای من به ترتیب به نام های فیلد 1 و فیلد 2 و فیلد 3 می باشد که رکوردهای موجود در فیلد 1 و 2 همگی یکسری آی پی هستند و فیلد 3 شامل یکسری کدهای کشورها می باشد.
    کد HTML:
    Filed1               Field2                          Field3
    86.62.1.0	     86.62.5.231                    NG
    86.62.5.232	     86.62.5.243	              IQ
    86.62.5.244	     86.62.5.247	              A2
    حال می خواهم اگر در شی ادیت باکس برای مثال این آی پی 86.62.3.12 وارد شد بررسی شود که اگر این آی پی در محدوده بین یکی از فیلدهای 1 و 2 است آن محدوده فیلتر شود.
    مثلا آی پی 86.62.3.12 در محدوده بین فیلد 1 و 2 سطر اول می باشد پس باید سطر اولی فیلتر شود و تنها این سطر در Grid نمایش داده شود. به این شکل من می توانم کد کشوری آی پی هایی که در ادیت باکس وارد می کنم متوجه شوم.
    البته تعداد سطرهای این تیبل بیش از 100.000 است که تمامی کشورها و محدوده های آی پی را شامل میشه.

    سپاس

  2. #2

    نقل قول: فیلتر هوشمند یک محدوده در Adotable

    کافیه بررسی کنید که مقدار Field1 از مقدار وارد شده کمتر و مقدار Field2 از مقدار وارد شده بیشتر باشه :
    در ADOQuery
    'SELECT * FROM TableName WHERE Field1 <= ' + QuotedStr(Edit1.Text) + ' AND Field2 >= ' + QuotedStr(Edit1.Text)

    در ADOTable
    Filter = 'Field1 <= ' + QuotedStr(Edit1.Text) + ' AND Field2 >= ' + QuotedStr(Edit1.Text)

    موفق باشید ...

  3. #3

    Question نقل قول: فیلتر هوشمند یک محدوده در Adotable

    سلام
    مرسی نتیجه داد اما یه سوال الان وقتی یک آی پی را وارد می کنم فیلتر انجام میشه و 3 نتیجه را نشان می دهد که از این 3 نتیجه نیز فقط 1 نتیجه جواب من است.
    حالا می خواهم بگونه ای این فیلتر انجام بشه که محدوده تنگتر بشه که فقط همون نتیجه من نشون داده بشه.
    مثلا وقتی من 115.248.234.251 را فیلتر می کنم 3 نتیجه زیر که در این محدوده ها است فیلتر میشن که جواب من آخری است.

    11.0.0.0--------------12.1.52.63
    115.24.0.0-----------115.29.255.255
    115.240.0.0----------115.255.255.255


    مرسی

  4. #4
    کاربر دائمی آواتار MohsenB
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایرانم
    پست
    601

    Lightbulb نقل قول: فیلتر هوشمند یک محدوده در Adotable

    با سلام خدمت آقای تهرانی


    دوستان درست راهنمایی کردن فقط من یه نکته کوچیک بگم :

    تو روش دوستان دوتا رشته با هم مقایسه میشن ، خوب اگه این دوتا رشته یه سبک یا اندازه نداشته باشن تو مقایسه رشته ای مثلا بین دو عدد "2" و "10" عدد "2" بزرگتر نتیجه میشه ، برای حل این مشکل شما باید عدد دو رو به سبک یا اندازه عدد ده نشون بدین یعنی "02" .

    پس شما باید یه اصلاحی تو جدولتون انجام بدین.
    برا مثال آی پی 192.16.0.12 رو بصورت 192.016.000.012 بنویسید .
    حالا بعد از جستجو و دریافت نتیجه شما این آی پی رو به حالت درستش تبدیل کنید.


    وطن يعني گذشته حال فردا
    تمام سهم یک ملت ز دنیا

    وطن يعني چه آباد و چه ويران
    وطن يعني همین جا یعنی ایـران



  5. #5

    نقل قول: فیلتر هوشمند یک محدوده در Adotable

    سلام
    با تشکر از محسن عزیز
    با توجه به اینکه جدول من بیش از 100.000 رکورد داخلش است و کار بسیار سختی است که بخواهد درست شود. راه حل دیگر یا روش خاصی به ذهنتون میرسه که بشه این مسئله را حل کرد

    مرسی از شما دوستان

  6. #6

    نقل قول: فیلتر هوشمند یک محدوده در Adotable

    سلام.
    بهترین کار اینه:
    یک تابع بنویسید که فرمت IP شما رو تبدیل کنه به باینری متناظرش.

    create function IP2Decimal(@IP varchar(15))
    returns decimal
    as
    begin
    declare @IP_1 decimal
    declare @IP_2 decimal
    declare @IP_3 decimal
    declare @IP_4 decimal
    set @IP_1 =substring(@IP, 1,CHARINDEX('.', @IP, 1)-1)
    set @IP =substring(@IP,CHARINDEX('.', @IP, 1)+1,LEN(@IP))
    set @IP_2 =substring(@IP, 1,CHARINDEX('.', @IP, 1)-1)
    set @IP =substring(@IP,CHARINDEX('.', @IP, 1)+1,LEN(@IP))
    set @IP_3 =substring(@IP, 1,CHARINDEX('.', @IP, 1)-1)
    set @IP_4 =substring(@IP,CHARINDEX('.', @IP, 1)+1,LEN(@IP))
    return @IP_1 * 256 * 256 * 256 + @IP_2 * 256 * 256 + @IP_3 * 256 + @IP_4
    end


    و در فیلترتون به راحتی Between می گیرید!
    where dbo.IP2Decimal(Field)between dbo.IP2Decimal(Field1)and dbo.IP2Decimal(Field2) -- so easy

    مثال:
    print dbo.IP2Decimal('192.168.0.21') -- wow
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
    پایگاه داده، تیونینگ، طراحی و پیاده سازی ..

  7. #7
    کاربر دائمی آواتار MohsenB
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایرانم
    پست
    601

    Lightbulb نقل قول: فیلتر هوشمند یک محدوده در Adotable

    با سلام دوباره

    یه برنامه بنویسید که بتونه اطلاعات جدول رو درست کنه .

    مثل این کد:


    procedure TForm1.btn1Click(Sender: TObject);
    var i:Integer;
    ts1,ts2 :string;
    // تابع تبدیل ------------------------------------
    function txt2ip(txt :string):string
    begin
    txt:= txt + '.';
    for i:= 1 to 4 do
    for j:= (Pos('.',Copy(txt,((i-1)*4)+1,4))+((i-1)*4)) to (i*4)-1 do
    Insert('0',txt,((i-1)*4)+1);
    Delete(txt,Length(txt),1);
    Result:= txt;
    end;
    //-------------------------------------------------
    begin
    with adods do begin
    CommandText:= 'Select * From table';
    Open;
    First;
    while not(Eof) do begin
    ts1:= txt2ip(FieldByName('Field1').AsString);
    ts2:= txt2ip(FieldByName('Field2').AsString);
    Edit;
    FieldByName('Field1').AsString:= ts1;
    FieldByName('Field2').AsString:= ts2;
    Post;
    Next;
    end;
    Close;
    end;
    end;



    بعد از این جدول اصلاح شده استفاده کنید

    موفق و پیروز باشید.

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

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