Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать максимальное значение в поле таблицы [D7, MSAccess]


pavel_guzhanov ©   (2005-12-29 09:35:00) 

для получения максимального значения делаю так:
 Q.Close;
 Q.SQL.Clear;
 Q.SQL.Add('Select max(IdTrackt) from Groups');
 Q.Open;

Теперь мне надо полученное максимальное значение присвоить переменной Id типа Integer. Как это сделать?
PS использую ADO


pavel_guzhanov   (2005-12-29 13:13:00) [1]

запрос такой:
insert into Table1 (Field1, Field2, Field3, Field4, Field5, Field6, Field7, Field8, Field9, Field10, Field11, Field12, Field13, Field14, Field15, Field16, Field17) values (:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, :l, :m, :n, :o, :p, :q)

далее
  QInsert.Parameters[0].Value:=Q.Fields[0].AsInteger;  
 QInsert.Parameters[1].Value:=MainForm.E1.Text;
 QInsert.Parameters[2].Value:=1;
 QInsert.Parameters[3].Value:=5;
 QInsert.Parameters[4].Value:=StrToInt(MainForm.E2.Text);
 QInsert.Parameters[5].Value:=MainForm.E3.Text;
 QInsert.Parameters[6].Value:=0;
 QInsert.Parameters[7].Value:=0;
 QInsert.Parameters[8].Value:=0;
 QInsert.Parameters[9].Value:=0;
 QInsert.Parameters[10].Value:=0;
 QInsert.Parameters[11].Value:=0;
 QInsert.Parameters[12].Value:=1;  
 QInsert.Parameters[13].Value:=1;
 QInsert.Parameters[14].Value:=2;
 QInsert.Parameters[15].Value:=3;
 QInsert.Parameters[16].Value:=5;


Field2 и Field6 - текстовые, остальные числовые .

Не пойму, где тут ошибка синтаксиса...


pavel_guzhanov   (2005-12-29 13:04:00) [2]

а есть какое-нибудь ограничение на количество параметров в запросе "Insert INTO"? У меня в запросе 17 параметров получается. Вроде запрос правильно составлен, с типами не напутал, а при выполнении выдается ошибка "Ошибка синтаксиса Insert Into@" Может это быть из-за большого количества параметров?


Vlad   (2005-12-29 12:48:00) [3]

Кстати говоря, я что-то не подумал про свойство Value. С ним действительно будет ошибка.
Но если использовать .AsInteger, то будет 0 :-)


Vlad   (2005-12-29 12:30:00) [4]


> Ega23 ©   (29.12.05 12:12) [9]

С D5 давненько не работал, но по-моему он так же Null-ы преобразовывал.
Ну а такой способ генерации ID конечно совсем не безопасен, это факт...
Разве что из-под DOS в однопользовательском приложении :-)


Ega23   (2005-12-29 12:12:00) [5]


> мы про D7 говорим? Так он Null  к 0 преобразует, как только
> ты его в переменную считаешь.


Я про D5 говорил. Хотя, конечно, такой вариант генерации ID весьма небезопасен. Получить максимальное значение, передать на клиент, а потом вставку с полученным ID делать. Можно, но только в рамках одной транзакции.


Vlad   (2005-12-29 11:58:00) [6]


> Ega23 ©   (29.12.05 11:41) [7]


> нарвёшься на exception.

мы про D7 говорим? Так он Null  к 0 преобразует, как только ты его в переменную считаешь. Вроде не должно там быть никаких эксепшенов, насколько я помню...
В .Net была такая проблема.


Ega23   (2005-12-29 11:41:00) [7]


> По-моему применение IsNull тут явно лишне :-)


Почему? Если нету ни одной записи, то при
Id := Q.fields[0].AsInteger
или
id:=q.fieldbyname('IdTract).value;
нарвёшься на exception.
Ну или на клиенте на Null значение поля проверять.


Vlad   (2005-12-29 11:37:00) [8]


> Ega23 ©   (29.12.05 10:50) [4]



> Select MaxID=Max(IsNull(ID), 0) from ....


По-моему применение IsNull тут явно лишне :-)


Desdechado   (2005-12-29 11:18:00) [9]

если уж речь об ID пошла, что что-то подозрительно
генерить идешники таким алгоритмом - зло!


Ega23   (2005-12-29 10:50:00) [10]

Вообще-то правильно будет
Select MaxID=Max(IsNull(ID), 0) from ....


Lexer   (2005-12-29 10:20:00) [11]

Id := Q.fields[0].AsInteger


evvcom   (2005-12-29 09:58:00) [12]


>  Q.SQL.Clear;
>  Q.SQL.Add('Select max(IdTrackt) from Groups');

А это нафиг? В design-time этого нельзя сделать?


seg   (2005-12-29 09:41:00) [13]

Присвоитять явное имя поля

Q.SQL.Add('Select max(IdTrackt) as IdTracktfrom Groups');

получить значение.

id:=q.fieldbyname('IdTract).value;


Наверх

Титульная страница Поиск, карта сайта Написать письмо