|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.10.2007, 08:14 | #1 |
Пользователь
Регистрация: 18.08.2007
Сообщений: 16
|
как можно реализовать то же, но по-другому?
Что-то где-то напутал...Не подскажете ли, господа, где? И как можно реализовать то же, но по-другому? Прошу строго не судить - ибо это моя первая программа.
procedure TForm2.Button1Click(Sender: TObject); begin if form2.Edit1.Text='' then begin MessageDlg ('Не задано название темы'+#13#10+'Повторите ввод',mtError,[mbOK],0); form2.Edit1.SetFocus; end else begin form1.database1.open; form1.Table1.open; form1.Table1.first; while not form1.table1.Eof do begin if form1.table1.FieldByName('Name_T'). AsString = edit1.Text then begin ShowMessage ('Тема с таким названием уже создана!'); form2.Edit1.Clear; form2.Edit1.SetFocus; end; end else begin form1.database1.open; form1.Table1.open; form1.Table1.Last; max_ID:=form1.table1.fieldbyname('I D').asinteger; form1.Table1.Insert; form1.Table1.FieldByName('Name_t'). AsString:=edit1.Text; form1.Table1.FieldByName('ID').AsIn teger:=max_ID+1; form1.Table1.Post; form2.close; end;
Вот как-то оно так...
|
03.10.2007, 08:46 | #2 |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
Ну,... я бы сделал так...
На второй форме в событии onChange Edita написал Button1.enabled := Edit1.Text <> ''; Это как-то солиднее. Для чего form1.database1.open; ??? database1.connected:=true жолжно быть по умолчанию. Используй sql-запросы. Вместо этого Код:
Код:
Код:
Код:
|
03.10.2007, 08:53 | #3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
1) может проще в табличке по полю Name_T уникальный индекс сделать и проверять ниче не надо будет?
2) вместо эдит юзать DBEdit и прописывать руками заполнение таблицы не надо будет 3) поле ID проще сделать автоинкрементным 4) зачем два раза выполнять эти строки: form1.database1.open; form1.Table1.open; |
03.10.2007, 08:54 | #4 |
Пользователь
Регистрация: 18.08.2007
Сообщений: 16
|
Большое спасибо, действительно более солидно выглядит (век живи - век учись)... Но проблема в проверке схожести названий тем - при вводе уже существующей темы паскудно виснет, а планировался вовсе не висяк... ((
Вот как-то оно так...
|
03.10.2007, 09:00 | #5 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Цитата:
Цитата:
|
||
03.10.2007, 09:09 | #6 |
Пользователь
Регистрация: 18.08.2007
Сообщений: 16
|
На второй форме в событии onChange Edita написал
Button1.enabled := Edit1.Text <> ''; Это как-то солиднее. К сожалению такой вариант не прошел...
Вот как-то оно так...
|
03.10.2007, 09:16 | #7 |
Пользователь
Регистрация: 18.08.2007
Сообщений: 16
|
Все равно что-то не так:
procedure TForm2.Button1Click(Sender: TObject); begin bad_point:=false; form1.database1.open; form1.Table1.open; form1.Table1.first; while not form1.table1.Eof do begin if form1.table1.FieldByName('Name_T'). AsString = edit1.Text then bad_point:=true else begin form1.Table1.Last; max_ID:=form1.table1.fieldbyname('I D').asinteger; form1.Table1.Insert; form1.Table1.FieldByName('Name_t'). AsString:=edit1.Text; form1.Table1.FieldByName('ID').AsIn teger:=max_ID+1; form1.Table1.Post; form2.close; end; end; if bad_point=true then begin ShowMessage ('Тема с таким названием уже создана!'); form2.Edit1.Clear; form2.Edit1.SetFocus; end; end;
Вот как-то оно так...
Последний раз редактировалось Shawn; 03.10.2007 в 09:18. |
03.10.2007, 09:33 | #8 |
детский тренер
Форумчанин
Регистрация: 08.06.2007
Сообщений: 532
|
если ві используете while not table1.eof do, то в конце обязательно ставится Table1.next;
просто в противном случае Ваш код зациклится... Он будет постоянно в первой строке стоять... А Table1.next переводит на следующую строку.... используйте Abort , для віходя из процедурі, если найдется такая же запись....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Последний раз редактировалось Pitbull; 03.10.2007 в 09:35. |
03.10.2007, 09:55 | #9 | |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
Цитата:
Код:
Значит нужно создать индекс для поля ID и перед Last написать Код:
нужно вставить между Код:
Последний раз редактировалось _SERGEYX_; 03.10.2007 в 09:57. |
|
03.10.2007, 09:58 | #10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
тут помоему еще в любом случае перебираются все записи, т.к. добавление идет в цикле, а выхода нету, т.е. получаеца мы добавили тему, но всеравно настырно проверяем, а есть ли такая тема дальше и если нет ее дальше, то опять вставляем. ну и про некст, как уже сказали, было забыто
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
можно ли в одном классе реализовать несколько интерфейсов | Galinka08 | Общие вопросы по Java, Java SE, Kotlin | 2 | 08.03.2008 21:33 |
Присвоение значения одного поля другому | frai | БД в Delphi | 2 | 20.09.2007 15:03 |
Сообщение другому окну | Бонарт | Win Api | 13 | 15.08.2007 20:23 |
можно ли такое реализовать | Димарик | Общие вопросы Delphi | 6 | 22.07.2007 13:18 |
передать данные другому приложению | vasya_pupkin | Win Api | 1 | 16.02.2007 20:17 |