2011-12-29 1 views
-1

以下のコードはunit2(form2)で書かれています。電子メールボックスとパスワードボックスに入力された値をform1で呼び出します。昨日のコードは完全に動作していました。私はボタンのCOMMENCERクリックしたときには、アクセス違反エラーが発生します。変数への値に影響するとアクセス違反ですか?

procedure TForm2.Btn_commencerClick(Sender: TObject); 
    begin 

    email := form1.ed_Email.Text;// <----- LOOK HERE 
    password := form1.Ed_typedpass.Text; // <-----AND HERE 
    MD5 := GetMD5; 
    MD5.Init; 
    MD5.Update(TByteDynArray(RawByteString(password)), Length(password)); 
    password := LowerCase(MD5.AsString); 

    etc....... 

をしかし、このコードは動作します:

email := '[email protected]'; 
password := 'mypass'; 
MD5 := GetMD5; 
MD5.Init; 
etc etc...... 

質問:

はなぜ?

+0

あなたのコードでアクセス違反が発生していますか?この行の – PresleyDias

+0

:email:= form1.ed_Email.Text; アドレス0067A868でのEAccess違反(アドレス0000038Cの読み取り) –

答えて

3

ここで、form1オブジェクトを作成していますか?あなたがそれにアクセスする前に初期化されていないので、あなたはAVを取得するように聞こえる。

2つ目のコードは、文字列変数にアクセスしたり値を割り当てたりする前に文字列変数を初期化する必要はなく、form1変数ではなく直接割り当てることができます。

ただし、breakpointがemail := form1.ed_Email.Text;になり、form1がnilかどうかを確認してください。

1

私は...(私はあなたのケースでは、使用可能なフォームを考えると)あなたは、Form1を作成するために持っていると思うし、あなたが閉じられ、そのフォームを解放したかもしれない、あなたの

email := form1.ed_Email.Text; 

はForm1のように、AVを与えています存在しません(現在は解放されています)ので、ed_Email.Textの値を持つことはできません。

はフォームがアクセス違反を避けるために、最初に作成された場合は、いつでも確認することができBtn_commencer

1

を押す前に(解放)あなたは、Form1を閉じていないことを確認してください。

割り当てられている場合(Form1) begin //割り当て end;

+0

+1これは、使用可能なフォームが作成されているかどうかを確認するための良い方法です。 @Rafikただし、Form1変数を使用していることを確認してくださいプロシージャにローカルではなく、実際のフォーム1の名前(グローバル) – PresleyDias

関連する問題