2016-04-08 29 views
2

我是IntraWeb的新手,遇到問題。 爲了實現登錄表單,我將數據集存儲在Usersession中。 但是,當涉及訪問數據集我得到一個訪問衝突錯誤。 我想通了,沒有創建Useresession。現在我有點困惑,因爲在Intraweb Documentary中,據說Usersession是由ServerController自動創建的。在IntraWeb中訪問UserSession時的訪問衝突

我訪問(分別爲要)數據集這樣 UserSession.Dataset.open;

我使用包含在公司的RAD Studio XE5的IntraWeb的審判。這可能是問題嗎? 如果這不是問題,我該如何手動創建一個Usersession?

非常感謝您

[編輯13.4.16]

問題是評估版本我使用。安裝完整版後,我的問題消失了。他們通過添加另一個參數來更改他們的Usersession.create過程。因此,請確保你實際使用的版本如果u有同樣的問題: 感謝所有的答覆

+0

UsserSession是否被創建? – RBA

+0

編號 不知何故創建操作沒有被觸發。 我在這個功能在ServerController '過程TIWServerController.IWServerControllerBaseNewSession取得了斷點( ASession:TIWApplication; VAR VMainForm:TIWBaseForm);' 但在調試這個程序從未被調用。 – Chrispy1403

回答

0

您需要創建的「數據」 session裏面

procedure TIWServerController.IWServerControllerBaseNewSession(
    ASession: TIWApplication; var VMainForm: TIWAppForm); 
begin 
    ASession.Data := TUserSession.Create; 
end; 

知道,在這個例子中

TUserSession

是一個用戶定義的類

type 
    TUserSession = class 
    public 
    UserCount: Integer; 
    end; 

看看這個教程這也解釋了會話管理是如何在IW做 - http://etutorials.org/Programming/mastering+delphi+7/Part+IV+Delphi+the+Internet+and+a+.NET+Preview/Chapter+21+Web+Programming+with+IntraWeb/Building+IntraWeb+Applications/

或諮詢由atozed提供的technical documentation

+0

Atozed文檔說_A用戶會話由IntraWeb自動管理。當新會話開始時,IntraWeb將爲用戶創建一個TIWApplication(或Visual Studio .NET中的IWApplication)的新實例並自動進行跟蹤._ 需要重新創建嗎? 當我看到第一個鏈接和給出的例子時,我發現他們並沒有開啓稱爲'創建'的過程。 – Chrispy1403

+0

你有使用wizzard創建應用程序嗎?另一方面,你說你正在創建一個登錄表單,我懷疑你的控制器還沒有完成它的工作。但沒有你的應用程序的源代碼,這只是假設... – RBA

+0

是的,我已經使用了Wizzard。 「控制器沒有完成它的工作」是什麼意思? 我沒有更改Servercontroller的代碼。事實上,我也想過早點入住。所以我創建了一個「歡迎」屏幕,您可以按下按鈕進入登錄。 如果我正確的話,Servercontroller應該在那之前創建一個Usersession。 此「歡迎」屏幕ist初始化爲主 'TiwfStart.SetAsMainForm;' 除了onClick過程外,它對Wizzard中生成的單位是同樣的。 我應該在主要問題中發佈網站代碼嗎? Ty爲你的努力! – Chrispy1403

0

我試着添加一條評論,顯然我需要更多的觀點。 如果您進入澳大利亞央行給出的答覆,可以找到答案,但這裏是簡短的表格:

IW會自動創建和管理用戶會話。然而TIWUserSession只是你的一部分。爲了在會話中擁有自己的數據,創建TIWUserSession並將其添加爲會話的.Data。

ASession.Data := TIWUserSession.Create(nil, ASession); 

注意該過程的ASession參數是由IW管理會話:在IWServerControllerBaseNewSession以做到這一點。

爲了訪問TIWUserSession,創建過程中ServerController:

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

暴露在接口部分該程序。

+0

自動創建的代碼如下所示: 'ASession.Data:= TIWUserSession.Create(nil);' 我只有一個參數用於此過程。 我在某處讀過這是因爲我使用了舊版本的intraweb,實際上我使用的是版本14.0.0。 我現在在不使用UserSession的情況下測試了我的需求,並且很快就會購買完整版本。 然後我有一個實際的版本,並希望這會做到這一點。 感謝您的幫助 – Chrispy1403

+0

我認爲14.0.0的automagic代碼創建使用了舊的形式。他們在14.0.13更改了代碼創建。請參閱:[鏈接](http://www.atozed.com/intraweb/history/XIV/index.EN.aspx)根據我的理解,舊的表單仍然應該工作。另請參閱[鏈接](http://docs.atozed.com/docs.dll/development/Migrating%20to%20IntraWeb%20XIV.html#OnNewSession) –

0

它發生,我認爲我們可能是「解決錯誤的問題」。

您表示這是在您實施登錄表單時發生的。您還表示WServerControllerBaseNewSession()中的中斷集未命中。

在ServerController中,您是否將「AuthBeforeNewSession」設置爲True?如果是這樣,請將其設置爲False並查看行爲是否更改。

+0

「AuthBeforeNewSession」設置爲false。 – Chrispy1403