PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تداخل متغیرها در کامپیوترهای تحت شبکه



saber1366
07 / August / 2016, 05:30 PM
سلام دوستان
به کمکتون فوری احتیاج دارم
من یک برنامه اینتراوب نوشتم و روی یکی از کامپیوترهای اداره قرار دادم وقتی از طریق کامپیوترهای دیگه تحت شبکه اون برنامه رو رو توی مرورگر باز میکنم اجرا میشود.
اما مشکل من اینه وقتی توی کامپیوتر 1 متغیری را مقدار میدم توی کامپیوتر 2 هم وقتی میخوام عملی را انجام بدم مقداری که توسط کامپیوتر 1 تغییر پیدا کرده بود اعمال میشه و کلا محاسباتم بهم میریزه.
مگه اینتراوب نباید برای هر session که باز میشود متغیرها را اختصاصی برای همون کامپیوتر نگه دارد؟
لطفا هر کسی میتونه راهنماییم کنه چطور این مشکل را حل کنم اصلا زمان ندارم.
با تشکر

mkarimpour
07 / August / 2016, 05:40 PM
با سلام بستگی داره که شما متغیر رو کجا تعریف کنی. منظورم اینکه در UserSession یا ServerController. در حالت اول که به ازای هر کاربره و دومی به ازای برنامه یعنی کل کاربران.

saber1366
07 / August / 2016, 06:04 PM
با تشکر از پاسختون
من توی unit1 اینجا متغیرهامو تعریف کردم


var
jadvalezafekar, jadvalesaghf : string;
saghf: Integer;
saghfsaat: Real;
jamsaatezafekar, jamfarvardin, jamordibehesht, jamkhordad, saatinmah: integer;
amalkard:Real;
a: integer;

implementation

{$R *.dfm}

از این قسمت متغیرها را بردم توی UserSessionUnit.pas ولی برنامه خطا میده که متغیرها تعریف نشده اند.
لطفا دقیقا توضیح میدین باید کجا متغریها را کجا تعریف کنم که در تمام فرم ها شناسایی شوند و به ازای هرکاربر یک کپی از متغیر ساخته شود.
با تشکر

saber1366
07 / August / 2016, 07:37 PM
کسی نیست ؟؟؟؟

mrtr0101
08 / August / 2016, 01:00 AM
سلام
دوست عزیز شما نمی تونید توی اینتراوب مثل برنامه های تحت ویندوز دلفی متغیر تعریف کنید . برای این کار در قسمت usersesioin (یعنی برای هر بار اجرای برنامه برای هر کار بر یا session جدا گانه متغییر تعریف کنید )
متغیر ها را در قسمت public ذر usersession تعریف کنید مشکلتون حل می شه
مثال
public
s: string;

برای استفاده
usersession.s:='test';

saber1366
08 / August / 2016, 10:14 AM
با تشکر از پاسخ دوستان
طیق راهنمایی شما متغیرم را توی UserSessionUnit تعریف کردم (تصویر 1)
بعد توی unit2 در قسمت uses اومدم UserSessionUnit را تعریف کردم (تصویر 2)
اما دوباره برنامه ارور میده (تصویر 3)
لطفا بفرمایید من دارم کجا دارم اشتباه میکنم؟

mkarimpour
08 / August / 2016, 03:32 PM
با سلام شما متغیر رو در قسمت public کلاس TIWUserSession تعریف کرده اید. بنابراین باید از کلاس یک Instance ایجاد کنید و سپس از آن استفاده کنید.الیته این کار در فایل ServerController انجام شده است. یعنی شما می توانید از تابع UserSession موجود در ServerController استفاده کنید.


unit ServerController;

interface

uses
SysUtils, Classes, IWServerControllerBase, IWBaseForm, <span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>
// For OnNewSession Event
UserSessionUnit, IWApplication, IWAppForm, IW.Browser.Other, IW.Browser.Browser;

type
TIWServerController = class(TIWServerControllerBase)
procedure IWServerControllerBaseNewSession(ASession: TIWApplication;
var VMainForm: TIWBaseForm);

private

public
end;


function UserSession: TIWUserSession;
function IWServerController: TIWServerController;

implementation

{$R *.dfm}

uses
IWInit, IWGlobal;

function IWServerController: TIWServerController;
begin
Result := TIWServerController(GServerController);
end;



function UserSession: TIWUserSession;
begin
Result := TIWUserSession(WebApplication.Data);
end;

procedure TIWServerController.IWServerControllerBaseNewSessi on(
ASession: TIWApplication; var VMainForm: TIWBaseForm);
begin
ASession.Data := TIWUserSession.Create(nil);
end;


initialization
TIWServerController.SetServerControllerClass;

end.

saber1366
08 / August / 2016, 08:54 PM
سلام آقای کریم پور این کد شما گذاشتین کد داخل ServerController است.
لطفا بفرمایید چطور باید instance ایجاد کرد؟ و در فرم های مختلف بشه ازش استفاده کرد؟
اگر یک برنامه نمونه کوچک در حد یک متغیر بزارید که متغیر a را در قسمت public از UserSesisionUnit تعریف کرده باشید و اون متغیر را توی Unit1 مقدار دهید ممنون میشم.
با تشکر.

admin
08 / August / 2016, 09:27 PM
سلام آقای کریم پور این کد شما گذاشتین کد داخل ServerController است.
لطفا بفرمایید چطور باید instance ایجاد کرد؟ و در فرم های مختلف بشه ازش استفاده کرد؟
اگر یک برنامه نمونه کوچک در حد یک متغیر بزارید که متغیر a را در قسمت public از UserSesisionUnit تعریف کرده باشید و اون متغیر را توی Unit1 مقدار دهید ممنون میشم.
با تشکر.

بدین صورت تعریف کنید.

TUserSession = class
public
dm : TDataModule;
UserCount: Integer;
end;
end;

همچنین این آدرس رو چک کنید.
<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>

saber1366
08 / August / 2016, 09:58 PM
بدین صورت تعریف کنید.

TUserSession = class
public
dm : TDataModule;
UserCount: Integer;
end;
end;

همچنین این آدرس رو چک کنید.
<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>

اینو کد را توی کدوم فرم باید بنویسم؟
ببخشید که من مبتدی هستم.
آخه هر کار میکنم درست نمیشه همش مزاحم شما دوستان میشم.

saber1366
17 / August / 2016, 10:13 PM
:(

mkarimpour
18 / August / 2016, 04:07 PM
با سلام لطفا در صورت نیاز با شماره ۰۹۱۲۵۳۹۰۴۹۷ تماس بگیرید.

midel
06 / February / 2018, 09:23 PM
ممنونم از مطالب خوبی که بیان کردین با تجربه شخصی خودم فکر نمیکنم این متغیرهای تحت شبکه در دلفی قابل پیاده سازی باشد معمولا برای شبکه از نرم افزارهای دیگری مثل آمنت استفاده میکنند