Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизКак узнать максимальное значение в поле таблицы Найти похожие ветки
← →
pavel_guzhanov © (2005-12-29 09:35) [0]для получения максимального значения делаю так:
Q.Close;
Q.SQL.Clear;
Q.SQL.Add("Select max(IdTrackt) from Groups");
Q.Open;
Теперь мне надо полученное максимальное значение присвоить переменной Id типа Integer. Как это сделать?
PS использую ADO
← →
seg (2005-12-29 09:41) [1]Присвоитять явное имя поля
Q.SQL.Add("Select max(IdTrackt) as IdTrackt from Groups");
получить значение.
id:=q.fieldbyname("IdTract).value;
← →
evvcom © (2005-12-29 09:58) [2]
> Q.SQL.Clear;
> Q.SQL.Add("Select max(IdTrackt) from Groups");
А это нафиг? В design-time этого нельзя сделать?
← →
Lexer © (2005-12-29 10:20) [3]
Id := Q.fields[0].AsInteger
← →
Ega23 © (2005-12-29 10:50) [4]Вообще-то правильно будет
Select MaxID=Max(IsNull(ID), 0) from ....
← →
Desdechado © (2005-12-29 11:18) [5]если уж речь об ID пошла, что что-то подозрительно
генерить идешники таким алгоритмом - зло!
← →
Vlad © (2005-12-29 11:37) [6]
> Ega23 © (29.12.05 10:50) [4]
> Select MaxID=Max(IsNull(ID), 0) from ....
По-моему применение IsNull тут явно лишне :-)
← →
Ega23 © (2005-12-29 11:41) [7]
> По-моему применение IsNull тут явно лишне :-)
Почему? Если нету ни одной записи, то при
Id := Q.fields[0].AsInteger
или
id:=q.fieldbyname("IdTract).value;
нарвёшься на exception.
Ну или на клиенте на Null значение поля проверять.
← →
Vlad © (2005-12-29 11:58) [8]
> Ega23 © (29.12.05 11:41) [7]
> нарвёшься на exception.
мы про D7 говорим? Так он Null к 0 преобразует, как только ты его в переменную считаешь. Вроде не должно там быть никаких эксепшенов, насколько я помню...
В .Net была такая проблема.
← →
Ega23 © (2005-12-29 12:12) [9]
> мы про D7 говорим? Так он Null к 0 преобразует, как только
> ты его в переменную считаешь.
Я про D5 говорил. Хотя, конечно, такой вариант генерации ID весьма небезопасен. Получить максимальное значение, передать на клиент, а потом вставку с полученным ID делать. Можно, но только в рамках одной транзакции.
← →
Vlad © (2005-12-29 12:30) [10]
> Ega23 © (29.12.05 12:12) [9]
С D5 давненько не работал, но по-моему он так же Null-ы преобразовывал.
Ну а такой способ генерации ID конечно совсем не безопасен, это факт...
Разве что из-под DOS в однопользовательском приложении :-)
← →
Vlad © (2005-12-29 12:48) [11]Кстати говоря, я что-то не подумал про свойство Value. С ним действительно будет ошибка.
Но если использовать .AsInteger, то будет 0 :-)
← →
pavel_guzhanov © (2005-12-29 13:04) [12]а есть какое-нибудь ограничение на количество параметров в запросе "Insert INTO"? У меня в запросе 17 параметров получается. Вроде запрос правильно составлен, с типами не напутал, а при выполнении выдается ошибка "Ошибка синтаксиса Insert Into@" Может это быть из-за большого количества параметров?
← →
pavel_guzhanov © (2005-12-29 13:13) [13]запрос такой:
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 - текстовые, остальные числовые .
Не пойму, где тут ошибка синтаксиса...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c