Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2007, 09:59   #11
Shawn
Пользователь
 
Регистрация: 18.08.2007
Сообщений: 16
По умолчанию

Вообще-то от всей этой процедуры требуется лишь решить простую задачу: ЕСЛИ тема уже есть ТО вывести ошибку ИНАЧЕ создать тему...
Вот как-то оно так...
Shawn вне форума Ответить с цитированием
Старый 03.10.2007, 09:59   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,070
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Короче, некрасивый код получается... А sql-запрос будет работать и на неиндексированной таблице.
ИМХО автоинкремент краше будет
pu4koff вне форума Ответить с цитированием
Старый 03.10.2007, 10:01   #13
Shawn
Пользователь
 
Регистрация: 18.08.2007
Сообщений: 16
По умолчанию

To Pu4koff:
Как можно его сделать? (автоинкремент)
Вот как-то оно так...
Shawn вне форума Ответить с цитированием
Старый 03.10.2007, 10:05   #14
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ну, и напоследок...
Если берем максимальный номер через Last, то ...
Код:
var loc: string;
.................
loc:=table1ID.text;
form1.Table1.Last;
max_ID:=form1.table1.fieldbyname('ID').asinteger;
table1.locate('id',loc,[]);

Цитата:
ИМХО автоинкремент краше будет
Автоинкремент - это конечно хорошо, но если в дальнейшем захочется связать эту таблицу с другой по уникальному полю (в данном случае id), то никак не получится, т.к. после упаковки таблицы автоинкрементное поле перезаписывается

Последний раз редактировалось _SERGEYX_; 03.10.2007 в 10:08.
_SERGEYX_ вне форума Ответить с цитированием
Старый 03.10.2007, 10:09   #15
Shawn
Пользователь
 
Регистрация: 18.08.2007
Сообщений: 16
По умолчанию

Таблица действительно будет связана с двумя другими именно по этому полю...
Вот как-то оно так...
Shawn вне форума Ответить с цитированием
Старый 03.10.2007, 10:11   #16
Shawn
Пользователь
 
Регистрация: 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
form1.Table1.Next;
end;
if bad_point=true then
begin
ShowMessage ('Тема с таким названием уже создана!');
form2.Edit1.Clear;
form2.Edit1.SetFocus;
end
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;
Вот как-то оно так...
Shawn вне форума Ответить с цитированием
Старый 03.10.2007, 10:42   #17
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Но все-равно не работает
Ну, тебе же написали, что цикл должен выглядеть так
while not table1.Eof do
begin

TABLE1.NEXT;

end;
NEXT обязателен, иначе цикл зависнет...

А можно попробовать так...
if form1.table1.locate('name_f',edit1. text,[loCaseInsensitive] = true
then {тема существует}

Последний раз редактировалось _SERGEYX_; 03.10.2007 в 10:47.
_SERGEYX_ вне форума Ответить с цитированием
Старый 03.10.2007, 10:47   #18
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
тут помоему еще в любом случае перебираются все записи, т.к. добавление идет в цикле, а выхода нету, т.е. получаеца мы добавили тему, но всеравно настырно проверяем, а есть ли такая тема дальше и если нет ее дальше, то опять вставляем. ну и про некст, как уже сказали, было забыто
ну да...Я и написал, что нужно віход организовать, если нашло копию в базе... Либо через метку, либо через переменную какую-то віход из цикла сделать
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 03.10.2007, 10:48   #19
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
либо через переменную какую-то віход из цикла сделать
if form1.table1.FieldByName('Name_T'). AsString = edit1.Text then break;
_SERGEYX_ вне форума Ответить с цитированием
Старый 03.10.2007, 11:29   #20
Shawn
Пользователь
 
Регистрация: 18.08.2007
Сообщений: 16
По умолчанию

Большое спасибо. Проблема решена. Красивое решение неприглядной проблемы.
Вот как-то оно так...
Shawn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли в одном классе реализовать несколько интерфейсов 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