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

نام تاپیک: آپدیت کلاینت Datasnap ؟

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

    آپدیت کلاینت Datasnap ؟

    با سلام

    من درکتاب آموزشی Bob روش زیر رو برای آپدیت کلاینت دیدم. روشش بدین صورته که اگه نسخه جدیدی از کلاینت طراحی شده بود، فایل اجرایی به سمت کلاینت منتقل شده و با فایل اونجا جابجا میشه.

    با کد زیر فایل اجرایی در قالب Filestream منتقل میشه


    function TServerMethods1.ClientStream: TStream;
    var
    Update: string;
    begin
    Result := nil;
    Update := '';
    with TIniFile.Create('E:\MyDocuments\RAD Studio\Projects\ProjGrp2.0\Win32\Debug\AutomaticUp dates.ini') do
    try
    Update := ReadString('Client', 'Client.exe', '');
    if (Update <> '') then
    Result := TFileStream.Create(Update, fmOpenRead or fmShareDenyWrite);
    finally
    Free;
    end;
    end;


    و با کد زیر در سمت کلاینت عملیات جایگزینی انجام میشه

    procedure TForm_Update.Btn_OkClick(Sender: TObject);
    const
    iBuffSize = 32 * 1024;
    var
    Stream: TStream;
    FileStream: TFileStream;
    Buffer: PByte;
    iReadCnt: Integer;
    begin
    DeleteFile(ParamStr(0) + '.old');
    RenameFile(ParamStr(0), ParamStr(0) + '.old');
    Screen.Cursor := crHourGlass;
    try
    sProgressBar1.Align := alClient;
    sProgressBar1.Max :=DataSnapServer.ClientStreamSize;
    Caption := 'درحال دانلود' + IntToStr(sProgressBar1.Max) + 'بایت ...';
    sProgressBar1.Min := 0;
    Stream := DataSnapServer.ClientStream;
    Application.ProcessMessages;
    FileStream := TFileStream.Create(ParamStr(0), fmCreate);
    Stream.Position := 0;

    try
    GetMem(Buffer, iBuffSize);
    try
    repeat
    iReadCnt := Stream.Read(Pointer(Buffer)^, iBuffSize);
    sProgressBar1.Position := sProgressBar1.Position + iReadCnt;
    if (iReadCnt > 0) then
    FileStream.WriteBuffer(Pointer(Buffer)^, iReadCnt);
    until (iReadCnt < iBuffSize);
    finally
    FreeMem(Buffer, iBuffSize);
    end;
    finally
    Stream.Position := 0;
    FreeAndNil(FileStream);
    FreeAndNil(Stream);
    end;
    finally
    Screen.Cursor := crDefault;
    end;
    ModalResult:=mrOk;
    end;


    حالا سوال من اینه که اگر فایل اجرایی 8 مگابایت باشه و پهنای باند ما 256 باشه آیا از این روش میشه برای آپدیت کردن استفاده کرد؟یا نه پهنای بیشتری میخواد؟یا نه اصلا روشش اصولی نیست؟

    ممنون

  2. #2

    نقل قول: آپدیت کلاینت Datasnap ؟

    اگه ارتباط پایدار باشه روش خوبیه و اگه ارتباط ناپایدار باشه این روش به تنهایی کامل نیست. و از روشهایی باید برای بالا بردن پایداری استفاده کرد. به نظرم بهتره که این تاپیک رو هم مطالعه کنید:
    https://barnamenevis.org/showthread.php?399773

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

  1. سوال: آیا سرور و کلاینت Datasnap از پورت مشترک استفاده میکنند؟
    نوشته شده توسط hp1361 در بخش توسعه نرم افزارهای تحت شبکه
    پاسخ: 1
    آخرین پست: جمعه 07 تیر 1392, 15:39 عصر
  2. سوال: روش مناسب جهت Login کلاینت در Datasnap چیست؟
    نوشته شده توسط hp1361 در بخش توسعه نرم افزارهای تحت شبکه
    پاسخ: 12
    آخرین پست: شنبه 01 تیر 1392, 15:41 عصر
  3. سوال: پرسش در مورد datasnap و برنامه کلاینت
    نوشته شده توسط tomalaki در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: چهارشنبه 04 اردیبهشت 1392, 22:40 عصر
  4. آپدیت اتوماتیک Dbgrid بعد از هر بار عمل Insert در برنامه کلاینت / سرور
    نوشته شده توسط m_h_2007 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 12
    آخرین پست: چهارشنبه 16 اسفند 1391, 11:42 صبح
  5. آپدیت داده های اکسس توسط کلاینت ها
    نوشته شده توسط Payam Moradi در بخش برنامه نویسی مرتبط با شبکه و وب در VB6
    پاسخ: 6
    آخرین پست: چهارشنبه 06 آبان 1383, 06:57 صبح

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

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