Тема: Конструкція if then у Delphi
Підкажіть будь ласка, як задати умову в конструкції if then: якщо в Edit є текст
Пробував два варіанти і обидва не правильні
if Edit1.Text<>'' then
if Edit1.Text='' then
За допомогу буду дуже вдячний.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Pascal/Delphi → Конструкція if then у Delphi
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Підкажіть будь ласка, як задати умову в конструкції if then: якщо в Edit є текст
Пробував два варіанти і обидва не правильні
if Edit1.Text<>'' then
if Edit1.Text='' then
За допомогу буду дуже вдячний.
Один з ваших варіантів правильний. Поясніть, чому ви вважаєте обидва неправильними - проблема не в тому коді, що ви виклали, а в іншому або у вашому сприйнятті.
Процедура в мене така:
procedure TAddClassis_Fr.Add_SBtClick(Sender: TObject);
begin
if ToEdit_Ed.Text<>'' then
degin
Classis_ADOTb.Insert;
Classis_ADOTb.FieldByName('Classis').AsString:=ToEdit_Ed.Text;
Classis_ADOTb.Post;
end
else
ShowMessage('Ви не заповнили поле.');
end;
end;
В одному варіанті в мене виводилося повідомлення коли едіт був заповнений, а в другому коли пустий.
Але проблема в тому що в обох випадках дані в базу не заносилися.
Я думав використати цей код, щоби в підлеглій таблиці не створювалися пусті комірки пи випадковому натиснені на кнопку Add_SBt.
Без конструкції дані заносяться без проблем
Classis_ADOTb.Insert;
Classis_ADOTb.FieldByName('Classis').AsString:=ToEdit_Ed.Text;
Classis_ADOTb.Post;
Хто підкаже де я зробив помилку буду вдячний.
В одному варіанті в мене виводилося повідомлення коли едіт був заповнений, а в другому коли пустий.
Тобто if-then-else і порівняння працювали, як слід.
Без конструкції дані заносяться без проблем
А ось це вже цікаво. Поки що припущу, що ви змінили щось в решті програми або тестували в різних умовах (скажімо, без if-then-else ви спробували один раз і все, а з ним - клацали ще якісь пункти, які змінювали Classis_ADOTb); або ж ви десь наплутали і тестували не той код, на кшталт
Classis_ADOTd.FieldByName('Classis').AsString:=ToEdit_Ed.Text;
як у випадку з degin в рядку 4. if-then-else працює і саме так, як ви очікуєте - перевіряє умову і виконує тільки одну гілку.
мені одному здалось що це неправильно?
degin
А ще begin'ів (разом з degin'ом) менше, ніж end'ів. По ідеї, мало б лайнутись і не скомпілитись... Коротше, давайте увесь код юніта.
Romanvolja
Помилка десь в іншому місці.
скористайтесь дебагером
Дякую всім за допомогу.
Помилку знайшов. Насправді дані зберігалися в БД, але не відображалися в таблиці та гріді.
Вирішив проблему через активацію.
procedure TAddClassis_Fr.Add_SBtClick(Sender: TObject);
begin
if (ToEdit_Ed.Text<>'') then
begin
with Classis_ADOTb do
begin
Insert;
FieldByName('Classis').AsString:=ToEdit_Ed.Text;
Post;
Active:=False;
Active:=True;
end;
NS_Or_Classis_ADOTb.Active:=False;
NS_Or_Classis_ADOTb.Active:=True;
end
else
begin
ShowMessage('Ви не заповнили поле.');
end;
ToEdit_Ed.Clear;
end;
Тепер все працює як треба.
На рахунок begin ви праві, я його пропустив. В конструкції він повинен стояти після else.
НУ ось, наприклад, використання конструкції if else при вводі данних логіну та паролю
01 procedure TForm1.Button1Click(Sender: TObject);
02 begin
03 if Edit1.Text = 'admin' then //Если логин верный, то...
04 begin
05 Label3.Caption:='Вы авторизованны!'; //Авторизовываем пользователя
06 end
07 else //Иначе
08 begin
09 Label3.Caption:='Логин не верный!'; //Выдаем ошибку
10 end;
11 end;
Доброго вечора.
Підкажіть як правильно записати умову в конструкції:- "Якщо таблиця знаходитьсяв режимі редагування(Edit) ,або в режимі додавання(Insert) даних "
Пробував так:
if ModulC_DMd.Garden_ADOTb.Edit or ModulC_DMd.Garden_ADOTb.Insert then
begin
...
ModulC_DMd.Garden_ADOTb.FieldByName('Orchard_ID').AsInteger:=StrToInt(RiderBase_Fr.ID_Ed.Text);
ModulC_DMd.Garden_ADOTb.Post;
end;
Але тут є помилка, бо некомпілюється.
Edit і Insert - це процедури, тобто дії. Вони не повертають ніяких значень, які можна було б із чимось порівняти. Поточний стан записаний в поле State. Перевірити одразу два можливих значення можна приблизно так:
If DataModule1.AdoTable1.State in [dsEdit, dsInsert] then
//...
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися