2012-05-25 3 views
1

Delphi v7Изменить пароль Delphi v7

Этот код предназначен для того, чтобы пользователь мог изменить свой пароль. Кажется, что он выполнен правильно, но новый пароль не сохраняется в поле данных пароля. Я, должно быть, сделал что-то не так, но я не вижу этого.

procedure TForm4.btnPswordClick(Sender: TObject); 
var 
    I: integer; 
begin 
tblLogin.First;; 
for I := 0 to tblLogin.RecordCount do 
Begin 
If tblLogin.FieldByName('Username').Value = Edit1.Text then 
if tblLogin.FieldByName('Password').Value = Edit2.Text then 
sign2.Visible := True; //Test in this case tells the application to make Label1 
visible if the //username and password are correct 
tblLogin.Next; 
end; 
I:= I+1; //ends search loop of records so program can move on 
If sign2.Visible = False then 
begin 
MessageDlg('Error Username, or Password not correct', 
mtConfirmation, [mbCancel], 0); 
end 
else 
if edit3.Text <> edit4.Text then 
begin 
MessageDlg('Error New Password does not match', 
mtConfirmation, [mbCancel], 0); 
end 
else 
begin 
tblLogin.Edit; 
tblLogin.FieldByName('Password').Value := Edit3.Text; 
tblLogin.Post; 
//form1.Show; 
//form4.Close; 
end; 
+10

Может быть отступы ваш код благоразумно поможет вам увидеть. –

+0

@Robert, не забудьте принять ответы, которые помогут вам решить ваши вопросы ['this way'] (http://meta.stackexchange.com/a/5235/179541). Вы также можете проголосовать за них, используя стрелку вверх над флажком accept в качестве награды ;-) – TLama

ответ

8

Мой комментарий о форматировании кода был только я, будучи едким, но на самом деле я думаю, что это на самом деле бы помог вам найти ошибку самостоятельно. Правильно отступом ваш первый цикл заключается в следующем:

tblLogin.First;; 
for I := 0 to tblLogin.RecordCount do 
Begin 
    If tblLogin.FieldByName('Username').Value = Edit1.Text then 
    if tblLogin.FieldByName('Password').Value = Edit2.Text then 
     sign2.Visible := True; //Test in this case tells the application to make Label1 visible if the 
          //username and password are correct 
    tblLogin.Next; 
end; 

Следующая строка кода заключается в следующем:

I:= I+1; //ends search loop of records so program can move on 

Комментарий предполагает, что вы ожидаете, что линия, чтобы вызвать цикл прекратить. Но эта линия не находится в цикле. Если бы он был в цикле, ваш код никогда бы не скомпилировался, потому что вам не разрешалось изменять переменную loop-control внутри цикла. Даже вне цикла компилятор должен был предупредить вас о том, что текущее значение I не определено. Это связано с тем, что компилятор не дает никаких гарантий относительно конечного значения переменной управления циклом после завершения цикла. Добавление 1 к неопределенному значению по-прежнему является неопределенным значением.

Кроме того, ваша петля повторяет более записи, чем содержится в таблице базы данных. Если верхняя граница петли for не вычитала из нее 1 и не является результатом High или Pred, то вы , вероятно, что-то не так.

Поскольку ваша I+1 линия фактически не завершает цикл, вы в конечном итоге обход всего пути до конца таблицы, поэтому, когда вы звоните tblLogin.Edit, вы кладете в окончательной записи в режим редактирования, не запись с соответствующими данными учетной записи.

Фиксация отступов также покажет, что вы даже не включили весь код для этой функции. Там есть begin без подходящего места end.

Вы могли бы избежать всего этого кода с помощью одного UPDATE заявление на вашей базе данных:

UPDATE tblLogin SET Password = ? WHERE Username = ? AND Password = ? 
+0

Итак, моя обложка взорвана. Я не очень хороший программист :-) Я на самом деле заместитель шерифа, пытающийся создать инструменты, которые помогут нам делать то, что мы делаем. Я прихожу к ней, чтобы учиться, и я ценю ваш вклад. То, что вы предложили, мне трудно понять, но теперь у меня есть место для начала, и я это выясню. – Robert

+0

+1. @Robert, начните с включения подсказок и предупреждений ('Project-> Options, Delphi Compiler, Hints and Warnings' в последних версиях Delphi). Компилятор предоставит вам много информации, если вы их прочтете. :) –

+0

Я отступил свой код, включил подсказки и предупреждения (H/W), отредактировал все H/W, и теперь их больше нет H/W. Все еще работает над обновлением базы данных. – Robert

Смежные вопросы