title: Delphi 7 SQL Parameter found in Select Statement, but not Insert Statement
body: <p>I am currently coding a Delphi 7 program that utilises SQL and an Access 2003 database. </p>
  
  <p>The unit receives a 5 digit code from a previous unit, via a public variable (this is frmLogin.sCode). On form activation, the program will execute an SQL query to display the record from tblStudents that matches sCode. This statement uses a ParamByName line and works perfectly.</p>
  
  <p>If no match is found, a message is displayed and the user is left with no option, but to click on the add user button. The user is then prompted to enter all of his details into the program, which are then passed to a class which sets out the SQL Insert Statement. A problem occurs now, however, as a message is displayed stating that Parameter Username is not found. I cannot understand why, as it is found when the Select statement is run. Please could someone help with this?</p>
  
  <pre><code>procedure TfrmProfilePage.FormActivate(Sender: TObject);
  begin
    //Instantiates the object.
    objProfilePage := TProfilePage.Create;
    sSQL := objProfilePage.SelectSQL;
    ExecuteSQL(sSQl);
  end;
  
  procedure TfrmProfilePage.ExecuteSQL(sSQL : String);
  begin
    With dmTextbookSales do
      Begin
        dbgrdDisplay.DataSource := dsProfilePage;
        qryProfilePage.SQL.Clear;
        qryProfilePage.SQL.Add(sSQL);
        qryProfilePage.Parameters.ParamByName('Username').Value := frmLogin.sCode;
        qryProfilePage.Open;
        If qryProfilePage.RecordCount = 0
          Then
            Begin
              ShowMessage('Please click on the "Add Details" button to get started.');
              btnChange.Enabled := False;
              btnSelling.Enabled := False;
              btnBuying.Enabled := False;
            End;
      End;
  end;
  
  procedure TfrmProfilePage.GetValues(VAR sStudentName, sStudentSurname, sCellNumber, sEmailAddress : String; VAR iCurrentGrade : Integer);
  begin
    ShowMessage('Fields may be left blank, but users wishing to sell textbooks should enter at least one contact field.');
    sStudentName := InputBox('Name','Please enter your first name:','');
    sStudentSurname := InputBox('Surame','Please enter your surname:','');
    iCurrentGrade := StrToInt(InputBox('Current Grade','Please enter your current grade:',''));
    sCellNumber := InputBox('Cellphone Number','Please enter your cellphone number:','');
    sEmailAddress := InputBox('Email Address','Please enter your email address:','@dainferncollege.co.za');
  end;
  
  procedure TfrmProfilePage.btnAddClick(Sender: TObject);
  begin
    GetValues(sStudentName, sStudentSurname, sCellNumber, sEmailAddress, iCurrentGrade);
    sSQL := objProfilePage.InsertSQL;
    ExecuteSQL(sSQL);
    btnChange.Enabled := True;
    btnSelling.Enabled := True;
    btnBuying.Enabled := True;
  end;
  </code></pre>
  
  <p>The following code is obtained from the linked class, clsProfilePage:</p>
  
  <pre><code>function TProfilePage.InsertSQL: String;
  begin
    Result := 'INSERT INTO tblStudents (' + '[StudentID]' + ',' + '[StudentName]' + ',' + '[StudentSurname]' + ',' + '[CurrentGrade]' + ',' + '[CellNumber]' + ',' + '[EmailAddress]' + ') VALUES (' + 'Username' + ',' + QuotedStr(fStudentName) + ',' + QuotedStr(fStudentSurname) + ',' + IntToStr(fCurrentGrade) + ',' + QuotedStr(fCellNumber) + ',' + QuotedStr(fEmailAddress) + ')';
  end;
  
  function TProfilePage.SelectSQL: String;
  begin
    Result := 'SELECT * FROM tblStudents Where StudentID = Username';
  end;
  </code></pre>