Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 15.12.2009, 15:18   #1
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию Максимум в столбце DBGrid ...?

Всем привет. не подскажите как найти максимальное значение в столбце,... суть вообще в том, что мне нужен Счетчик (ручной), чтобы при добавлении записи прибавлялось значение +1 от максимума...
__________________
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума   Ответить с цитированием
Старый 15.12.2009, 15:57   #2
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
Репутация: 22
По умолчанию

Здравствуйте. Самый простой способ использовать SQL запрос
Код:
SELECT max(<имя столбца>) AS <имя которое хотите чтоб было>
From <имя таблицы>;
Вот к примеру мой вариант, который ишет элемент с самым большим значением ключевого поля id

Код:
 with DMBase.adoquery1 do begin
     Close;
     SQL.Clear;
      SQL.Add('Select max(Accessories.id) ' +
             'FROM Accessories;');
     Open;
    ID := Fields.Fields[0].AsInteger + 1;
    end;
Id - переменная целоги тапа, в которую запишеться максимальное значение из столбца id +1
тока учтите что нужно выполнять проверки, т.к. строк в таблице может не оказаться и тогда будет ошибка при присвоении.
__________________
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо

Последний раз редактировалось rockedit; 15.12.2009 в 16:00.
rockedit вне форума   Ответить с цитированием
Старый 15.12.2009, 16:11   #3
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию

Вроди бы работает ), не подскажите еще как полсе того как нашел ID+1 добавить запись правлено? А то, как бы я не пробывал все время ошибки.
__________________
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума   Ответить с цитированием
Старый 15.12.2009, 16:17   #4
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
Репутация: 22
По умолчанию

Добавление новой записи(тут толькот основные операторы т.е. не весь код)
Код:
  with DMBase do begin
   KOmTable.Insert; // добовляем новую запись
      if KomTable.Modified then // если внесены изменения
              KomTable.Post; //сохряняем изменения
      end;
Редактирование
Код:
        KomTable.Edit; // раим редактирования
       DMBase.KomTable.Fields.Fields[5].AsString := <новое значение>;
       KomTable.Post;
я думаю вы сообразите что к чему)
__________________
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума   Ответить с цитированием
Старый 15.12.2009, 16:25   #5
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию

Ну я имел в виду, как объеденить эти примеры в один, чтобы при добавлении в поле где нашли max ID, добавилось ID+1, ну и в остальные существующие поля, остальная инфа...
__________________
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума   Ответить с цитированием
Старый 15.12.2009, 16:27   #6
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
Репутация: 22
По умолчанию

так бы и писали) тогда вам нужно использовать UPDATE, почитайте об этом запросе в интернете. или подождите я отвечу позже.
__________________
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума   Ответить с цитированием
Старый 15.12.2009, 16:37   #7
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию

Я вроди так и написал ))
Цитата:
чтобы при добавлении записи прибавлялось значение +1 от максимума...
Если не против, я подожду ))
__________________
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума   Ответить с цитированием
Старый 15.12.2009, 18:29   #8
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию

rockedit почитал про UPDATE , но что-то не нашел ни чего путного...
__________________
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума   Ответить с цитированием
Старый 15.12.2009, 18:33   #9
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
Репутация: 22
По умолчанию

Допустим у вас есть таблица Table1(id, Name) вам нужно добавить в нее новую строку, при условии что в роли ключа у вас не автоинкрементное поле.
1) Если вдруг строк в таблице нет, то ваша запись будет первая
Проверяем
Код:
if Table1.RecordCount = 0 then
 Begin
   Table1.Insert;
    Table1.Fields.Fields[0].AsInteger := 1;
   ......
   Table1.Post;
 end;
Если же записи уже есть, то исчем максимальную и к ней добовляем 1
тут есть два пути. либо использовать компонент Query и выполнить данное действие с помошью запросов
Код:
 with DMBase.adoquery1 do begin
     Close;
     SQL.Clear;
      SQL.Add('Select max(Table1.id) ' +
             'FROM Table1;');
     Open;
    ID := Fields.Fields[0].AsInteger + 1;
     Close;
     SQL.Clear;
     SQL.add(format ( 'INSERT INTO TABLE1  ' +
                    '   ( id, Name ) VALUES (%s,%s) ;',[IntToStr(ID),Name]));
     ExecSQL;

end;
Сдесь ID переменная целого типа
Или же вам нужно в цикле найти максимальный элемент
пример без SQL запроса
Код:
max := Table1.Fields.Fields[0].AsInteger;
Table1.First;
 for i:=1 to Table1.RecordCount do
  Begin
     if max < Table1.Fields.Fields[0].AsInteger then
        max := Table1.Fields.Fields[0].AsInteger;
  Table1.Next;
  end;

Table1.Insert;
    Table1.Fields.Fields[0].AsInteger := max + 1;
   ......
   Table1.Post;
Примерно так)
__________________
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума   Ответить с цитированием
Старый 15.12.2009, 18:50   #10
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Адрес: Россия, г.Челябинск
Сообщений: 191
Репутация: 16
По умолчанию

Огромное спасибо!!! ))) Все работает! ))
__________________
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена в столбце siteograf Microsoft Office Excel 5 19.10.2009 02:27
Максимум суммы 2 элементов Siluet Общие вопросы Delphi 15 27.09.2009 00:20
Максимум если. Baloo007 Microsoft Office Excel 3 08.07.2009 13:01
максимум meteor Microsoft Office Excel 2 06.12.2008 14:08
как отсортировать массив под данный отрезок и как минимум и максимум из него найти SIEGER Паскаль 1 20.11.2008 09:58


08:42.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.