2011-12-29 3 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 (주소 0000038C 읽음) –

답변

3

form1 개체는 어디에서 생성합니까? 액세스하기 전에 초기화되지 않았으므로 AV를 얻습니다.

문자열 변수를 액세스하거나 값을 할당하기 전에 문자열 변수를 초기화 할 필요가 없으며 form1 변수가 아닌 직접 변수를 지정하기 때문에 두 번째 코드가 작동합니다.

그러나 중단 점을 email := form1.ed_Email.Text;으로 변경하고 form1이 nil인지 확인하십시오.

1

는 난 당신이 (내가 귀하의 경우 사용 가능한 형태를 생각하는) 있습니다 .. Form1을 작성해야하고 Form1에로, 그래서 당신의

email := form1.ed_Email.Text; 

주고있다 AV를 양식을 닫고 해제했다고 생각 존재하지 않습니다 (현재 해제 됨). 따라서 ed_Email.Text 값을 가질 수 없습니다.

는 양식이 액세스 위반을 피하기 위해 처음 생성 된 경우 Btn_commencer

1

당신은 항상 확인할 수 있습니다 누르기 전에 Form1에 (해제)를 폐쇄하지 있는지 확인하십시오.

할당 된 경우 (form1) begin // 지정 end;

+0

+1에서 EAccess 위반, 사용 가능한 양식이 생성되었거나 만들어 졌는지 확인하는 좋은 방법입니다. @Rafik하지만 Form1 변수를 사용하고 있는지 확인하십시오. 프로 시저에 국한되지는 않지만 실제 form1 이름 (전역) – PresleyDias

관련 문제