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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2009, 14:41   #61
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Max(ID_Predmet) - это вычисляемое поле, вычисляемому полю обязательно нужно присваивать имя,
вот MAX_ID и есть это имя.
Значит получается, что Max(ID_Predmet) - это максимальное значение из идентификаторов и этому максимальному значению присваивается название предмета, которое соответствует этому ID? В моей таблице маскимальный ID=12, а название "Биология". Значит это предложение:
Цитата:
Max(ID_Predmet) AS [Max_ID]
Надо понимать как "Max(12) AS [Биология]. Да?)
Цитата:
Сделай как я написал без изменений и посмотри что у тебя будет в переменной nom
Я сделал, но появляется таже ошибка и выделяется строка
Код:
   nom:=Form3.Query_add_predm.FieldByName('Max_ID').AsInteger + 1;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 24.04.2009, 14:51   #62
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
Значит получается, что Max(ID_Predmet) - это максимальное значение из идентификаторов и этому максимальному значению присваивается название предмета, которое соответствует этому ID? В моей таблице маскимальный ID=12, а название "Биология". Значит это предложение:

Надо понимать как "Max(12) AS [Биология]. Да?)
Нет. операция Max(ID_predmeta) выбирает максимальное значение в поле ID_predmeta,
из-за оператора MAX поле становится вычисляемым.
А у вычисляемого поля не может быть того же имени. Поэтому мы поле ID_predmet временно переименовываем в Max_ID. В самой же базе имя не меняется, оно нам нужно только для конкретного запроса.
попробуй сделать так
Код:
var
 nom: integer;
begin
 Query_add_predm.Active:=False;
 Query_add_predm.SQL.Clear;
 Query_add_predm.SQL.Add('SELECT Max(ID_Predmet) AS [Max_ID] FROM table_predmety');
 Query_add_predm.Active:=True;

 nom:=Query_add_predm.Fields[0].AsInteger + 1;
end;
S@fer вне форума Ответить с цитированием
Старый 24.04.2009, 14:59   #63
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

И все равно таже ошибка. И снова ему не нравится [Max_ID]. Колонки называются ID_Predmet и Predmet.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 24.04.2009, 15:32   #64
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Что-то ты не так делаешь (проверь параметры)
Посмотри, в примере все нормально работает.
Вложения
Тип файла: zip primer.zip (19.4 Кб, 6 просмотров)
S@fer вне форума Ответить с цитированием
Старый 24.04.2009, 15:49   #65
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Да вроде сделал также как у Вас. Вот, посмотрите:
Мой код:
Код:
var
 nom: integer;
begin
 Query_add_predm.Active:=False;
 Query_add_predm.SQL.Clear;
 Query_add_predm.SQL.Add('SELECT Max(ID_Predmet) AS[Max_ID] FROM [table_predmety]');
 Query_add_predm.Active:=True;
 nom:=Query_add_predm.FieldByName('ID_Predmet').AsInteger;
 ShowMessage('Максимальный номер = '+IntToStr(nom));
end;
Ваш:
Код:
var nom:integer;
begin
ADOQuery2.Active:=False;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('SELECT MAX(ID_predmeta) AS [MAX_ID] FROM [Predmety]');
ADOQuery2.Active:=True;
nom:=ADOQuery2.FieldByName('MAX_ID').AsInteger;

ShowMessage('Максимальный номер ='+IntToStr(nom));
end;
Но по-прежнему не нравится ему [MAX_ID] в моем коде
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 24.04.2009, 15:56   #66
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может стоит [] не писать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2009, 15:56   #67
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Просто вставь этот код (ничего не меняя) и проверь
Код:
var
 nom: integer;
begin
 Query_add_predm.Active:=False;
 Query_add_predm.SQL.Clear;
 Query_add_predm.SQL.Add('SELECT Max(ID_Predmet) AS Max_ID FROM table_predmety');
 Query_add_predm.Active:=True;
 nom:=Query_add_predm.FieldByName('Max_ID').AsInteger;
 ShowMessage('Максимальный номер = '+IntToStr(nom));
end;
Если не будет работать то закинь на форму новый Query и проверь на нем.
S@fer вне форума Ответить с цитированием
Старый 24.04.2009, 16:05   #68
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Все! . Код должен выглядеть вот так:
Код:
var
 nom: integer;
begin
 Query_add_predm.Active:=False;
 Query_add_predm.SQL.Clear;
 Query_add_predm.SQL.Add('SELECT Max(ID_Predmet) AS Max_ID FROM table_predmety');
 Query_add_predm.Active:=True;
 nom:=Query_add_predm.FieldByName('Max_ID').AsInteger;
 ShowMessage('Максимальный номер = '+IntToStr(nom));
end;
Без квадратных скобок, как правильно сказал Stilet. Я тоже почему то забыл, что квадратные скобки в SQL означают как необязательные параметры). Я убрал их и этот код правильно работает. Но попрежнему не добавляется в БД название. Что там добавить то надо? Сообщение с максимальный показывается.
P.S. Stilet, а почему я не могу Вам обоим отзыв добавить? Хочу отблагодарить вас за помощь, а не получается
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 24.04.2009, 16:13   #69
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Вот структура моей таблицы с предметами в Database Desktop.
Изображения
Тип файла: jpg таблица.jpg (25.8 Кб, 142 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 24.04.2009 в 17:43.
artemavd вне форума Ответить с цитированием
Старый 25.04.2009, 10:16   #70
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

теперь после того как ты узнал максимальный номер
Делай новую запись
Код:
Query_add_predm.Active:=False;
 Query_add_predm.SQL.Clear;
 Query_add_predm.SQL.Add('INSERT INTO table_predmety VALUES ('+IntToStr(nom+1)+',"'+Edit.text+'")');
 Query_add_predm.ExecSQL;
где Edit.text - едит в котором название нового предмета
S@fer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И снова про подсчет строк Bezdar Microsoft Office Excel 4 23.03.2009 16:49
И снова ссылки Yaga HTML и CSS 2 20.03.2009 12:14
Снова про адрес переменной Pedro Общие вопросы Delphi 2 17.12.2008 21:53
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24