Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

Как узнать максимальное значение в поле таблицы   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
4-1131650096
Consigliere
2005-11-10 22:14
2006.01.22
Уважаемые господа подскажите как отключить порты.


2-1136405133
lex85
2006-01-04 23:05
2006.01.22
закладки


2-1135847930
n0p
2005-12-29 12:18
2006.01.22
Application.CreateForm(TDataModule, DataModule);


2-1135972219
Сергей_1
2005-12-30 22:50
2006.01.22
Программа в ХР глючит - в W98 нормально работает


2-1136558855
dabreezy
2006-01-06 17:47
2006.01.22
Команда при запуске программы