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

نام تاپیک: خواندن دسته ایی از داخل یک query

  1. #1
    کاربر دائمی آواتار Kamyar.Kimiyabeigi
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    1,276

    Question سوال در مورد خواندن دسته ایی از داخل یک query

    با سلام
    من یک sp دارم که نتیجه اون چندین رکورد هست مثلا 7000 رکورد حالا میخوام این تعداد رکورد را داخل یک tstringlist بریزم ولی نمیخوام بصورت زیر اینکار رو انجام بدم چون خیلی کنده آیا راهی هست که به صورت دسته ایی این کار رو انجام داد؟

    while not FLookupSource.DataSet.Eof do
    begin
    FItems.Add(FLookupSource.DataSet.FieldByName(GetLo okupDisplay).AsString);
    FLookupSource.DataSet.Next;
    end;
    آخرین ویرایش به وسیله Kamyar.Kimiyabeigi : شنبه 12 آذر 1390 در 13:29 عصر

  2. #2

    نقل قول: خواندن دسته ایی از داخل یک query

    این رو اجرا کن :
    create table sumerizestr(code int identity, sumstr varchar(100))

    insert into sumerizestr(sumstr) values('1')
    insert into sumerizestr(sumstr) values('2')
    insert into sumerizestr(sumstr) values('3')
    insert into sumerizestr(sumstr) values('4')
    insert into sumerizestr(sumstr) values('5')
    insert into sumerizestr(sumstr) values('6')
    insert into sumerizestr(sumstr) values('7')
    insert into sumerizestr(sumstr) values('8')


    declare @sum varchar(max)

    set @sum = ''

    select @sum = @sum + CHAR(13) + sumstr
    from sumerizestr

    print @sum


    خروجی آخر رو میتونی به عنوان یه پارامتر به ADO برگردونی و استفاده کنی.
    فلويد گواهي مي دهد به آنکه زيستن در هنگامه‌ی استبداد، چه آسان روياها را واژگون مي کند، چه سهل بر چهره‌ی آزادی تيغ می‌کشد!

  3. #3
    کاربر دائمی آواتار Kamyar.Kimiyabeigi
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    1,276

    نقل قول: خواندن دسته ایی از داخل یک query

    من در واقع نمیخوام این مشکل رو از سمت sql حل کنم میخوام از سمت دلفی حل بشه چون مشکل من مربوط به یک کامپوننت هست که به دیتابیس وصل میشه و از نوع combobox هست منتها هر دفعه ممکنه به یک object متصل باشه یک بار به adotable و یک بار به adostorpeorcedure بخاطر همین باید از داخل سورس کامپوننت این کندی رو حل کنم

  4. #4
    کاربر دائمی آواتار Kamyar.Kimiyabeigi
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    1,276

    نقل قول: خواندن دسته ایی از داخل یک query

    این کامپوننتهای خود دلفی که به دیتابیس وصل میشن به چه روشی اینقدر سریع دیتاها رو نمایش میدن؟

  5. #5
    کاربر جدید آواتار x_epro_x
    تاریخ عضویت
    آبان 1390
    محل زندگی
    همین نزدیکیا ....
    پست
    10

    نقل قول: خواندن دسته ایی از داخل یک query

    سلام
    با ایندکس گذاشتن میتونن سریع عمل کنن

  6. #6

    نقل قول: خواندن دسته ایی از داخل یک query

    من در واقع نمیخوام این مشکل رو از سمت sql حل کنم میخوام از سمت دلفی حل بشه
    اون کد از نظر بهینه سازی در دلفی چند مشکل داره، اولا از DisableControls استفاده نکرده تا آپدیت کنترل های متصل به اون دیتاست موجب کندی حرکت بین حرکت ها نشه، ثانیا از BeginUpdate استفاده نکرده، تا با هر بار اضافه شدن یک داده، اون لیست مجددا رسم نشه، ثالثا از FieldByName در یک حلقه استفاده کرده که موجب میشه در هر بار اجرای حلقه، فیلد مربوطه در بین لیست فیلدهای موجود برای دیتاست جستجو بشه. اینها بهینه سازی هایی هست که در سمت دلفی می تونید انجام بدید. در سمت سرور هم باید Execution Plan ایی که برای فراخوانی اون دستورات توسط SQL Server آماده شده، بررسی بشه، و در صورت امکان با تعریف ایندکس های مناسب یا تغییرات در برخی از دستورات، اجرای آن را بهینه کرد.

    کد دلفی شما میتونه چیزی شبیه به این باشه:

    var
    Filed : TField;
    begin
    FLookupSource.DataSet.DisableControls;
    FItems.BeginUpdate;
    try
    Field := FLookupSource.DataSet.FieldByName(GetLookupDisplay );
    FLookupSource.DataSet.First;
    while not FLookupSource.DataSet.Eof do
    begin
    FItems.Add(Field.AsString);
    FLookupSource.DataSet.Next;
    end;
    finally
    FItems.EndUpdate;
    FLookupSource.DataSet.EnableControls;
    end;
    end;


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7
    کاربر دائمی آواتار Kamyar.Kimiyabeigi
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    1,276

    نقل قول: خواندن دسته ایی از داخل یک query

    با تشکر از دوستان عزیز من خودم به این راه حل رسیدم که سرعتش با کدی که آقای کشاورز نوشته یکی هست و برای اطلاع این دو کد تعداد 7000 آیتم را که قبلا 20 ثانیه طول میکشید تا لود کند ولی با این دو کد 5 ثانیه طول می کشد

    procedure TForm1.FastLoadingIntoStringList(StringList: TStrings);
    Var
    V: Variant;
    I: Integer;
    beging
    Adotbl.Open;
    StringList.Clear;
    if not Adotbl.IsEmpty then
    begin
    Adotbl.DisableControls;
    Adotbl.First;
    V := Adotbl.Recordset.GetRows(adGetRowsRest, emptyParam, 'FieldName');
    for I := VarArrayLowBound(V, 2) to VarArrayHighBound(V, 2) do
    StringList.Add(V[0, I]);
    end;
    end;

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

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