![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать максимальное значение в поле таблицы [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;