powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQL SELECT MAX возвращает макс. значение но только до 10.
18 сообщений из 18, страница 1 из 1
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39854921
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При вызове
Код: pascal
1.
Application.CreateForm(TForm2,Form2);


создается форма шаблона для заполнения бланка, бланк номерной, и чтоб полуавтоматизировать систему нумерации сделал так
Код: pascal
1.
2.
3.
4.
5.
6.
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT MAX(MyMaxNomer) AS Count_Max FROM MyTable1');
ADOQuery1.Open;
Edit1.Text:=IntToStr ((ADOQuery1['Count_Max'])+1);
end;


т.е. Ищется в таблице MyTable1 в столбце MyMaxNomer максимальное значение номера, при создании формы в Edit1.Text записывается его значение+1 (в случае необходимости значение Edit1.Text можно поменять).
Вопрос: Вся эта конструкция почему то работает от 1 до 10, после 10 счетчик останавливается и все последующие номера идут только с номером 10, даже если вставить вручную строку с номером 125, бланки все равно будут с номером 10. Где я накосячил?
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39854922
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном коде ошибка лишь одна. Если в MyTable1 строк нет то Count_Max = Null и Null+1 - неминуемая ошибка
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855175
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230в таблице MyTable1 в столбце MyMaxNomer максимальное значение номераКакой тип у поля MyMaxNomer?

DimaBrВ данном коде ошибка лишь однаNULL должен кастануться в 0.

А ошибка в том, что нефиг колхозить автоинкремент на коленке
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855293
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBrВ данном коде ошибка лишь одна. Если в MyTable1 строк нет то Count_Max = Null и Null+1 - неминуемая ошибка
Хотя бы одна строка в таблице есть всегда.
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855301
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
Про "колхозить" это не совсем корректно )))), здесь спрашивают и просят помощи обычно чайники, любители и тождественные им категории, а профессионалы обычно им подсказывают, советуют и помогают. Пристыдить "колхозом" можно профессионала, но они как правило на форумах ответы не ищут.
А что касаемо моего вопроса, так таки да, поле было текстовым, изменил на числовой и начало колхозно инкементировать, Только возник еще вопрос, чисто из интереса, а почему до 10 считало, 1-9 это же тоже цифры.
И да, _Vasilisk_, Спасибо за помощь! )))
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855303
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230,

существуют: явное приведение типов и НЕ явное приведение типов.
В случае неявного приведения типов: зависит от логики, заложенной разработчиком СУБД.
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855306
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,
Т.е. от 1 до 9 типы из строки в цифру приводятся автоматически, а с 10 и выше требуется явное приведение типов? Я думал, что числа это числа, а буквы-буквы, а оказалось что не все буквы числа и что среди чисел есть те которые буквы )))). Хотя и догадывался, что программисты..... ну не такие как все ))))))))
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855312
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230,

Что за СУБД?
И покажите DDL таблицы.
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855319
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230Gerasimenko,
Т.е. от 1 до 9 типы из строки в цифру приводятся автоматически, а с 10 и выше требуется явное приведение типов? Я думал, что числа это числа, а буквы-буквы, а оказалось что не все буквы числа и что среди чисел есть те которые буквы )))). Хотя и догадывался, что программисты..... ну не такие как все ))))))))
В приведенном вами примере, неявное преобразование проводится провайдером, а не в СУБД
В СУБД возможно и прокатило бы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table #ddd(s varchar(6))
insert into #ddd select '1'
insert into #ddd select '111'
insert into #ddd select '111111'
insert into #ddd select '2'
insert into #ddd select '22'
insert into #ddd select '2222'
insert into #ddd select '3'
insert into #ddd select '333'
insert into #ddd select '33333'

select s from #ddd order by s
select max(s)+1 from #ddd 

drop table #ddd
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855324
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerasimenkoSensor230,

существуют: явное приведение типов и НЕ явное приведение типов.
В случае неявного приведения типов: зависит от логики, заложенной разработчиком СУБД.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table #ddd(s varchar(2000))

insert into #ddd select '1'
insert into #ddd select '111'
insert into #ddd select '111111'
insert into #ddd select '2'
insert into #ddd select '22'
insert into #ddd select '33333'
insert into #ddd select '9'

select s from #ddd order by s
select max(s)+1 from #ddd --order by s

drop table #ddd



Я специально с сортировкой поставил.
Все, что начинается с 9, будет в конце. Сортировка по первому символу.
Вполне логично, что и в СУБД и на стороне провайдера сначала возвращается максимальная строка - это 9, затем к ней применяется НЕ явное приведение типов, а уже после прибавляется 1.
Все точно с точки зрения логики.
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855328
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
А MS Access 2007 является СУБД, если вместо того чтоб да так нет то тогда это оно. У меня в БД три не связанные между собой таблицы, и где взять DLL я не знаю.
Каждый должен заниматься своим делом, меня устраивает спросить "как" и сделать как ответили, а красивый код пусть программеры пишут, мне для себя от скуки и так сойдёт. )))
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855333
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerasimenkoВ случае неявного приведения типов: зависит от логики, заложенной разработчиком СУБД.
+500

восхишаюсь Вашим хрустальным шаром

правда, max() никакого неявного приведения типов не делает. поэтому у автора всегда 9 и выскакивает.

Gerasimenkoолько с номером 10, даже если вставить вручную строку...

Gerasimenkoи сделать как ответили


Вставьте в базу магическую строчку 9000000 и все заработает !!!

GerasimenkoКаждый должен заниматься своим делом, меня устраивает спросить "как"

Вы подфорумом ошиблись.
Вам сюда
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855334
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230от 1 до 9 типы из строки в цифру приводятся автоматически, а с 10 и выше требуется явное
приведение типов?

То есть сообразить, что '100' < '9' - никак?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855408
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevGerasimenkoВ случае неявного приведения типов: зависит от логики, заложенной разработчиком СУБД.
+500

восхишаюсь Вашим хрустальным шаром

правда, max() никакого неявного приведения типов не делает. поэтому у автора всегда 9 и выскакивает.

Gerasimenkoолько с номером 10, даже если вставить вручную строку...

Gerasimenkoи сделать как ответили


Вставьте в базу магическую строчку 9000000 и все заработает !!!

GerasimenkoКаждый должен заниматься своим делом, меня устраивает спросить "как"

Вы подфорумом ошиблись.
Вам сюда
не совсем понял твоего наезда: 21960072
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855536
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, отцитировал не правильно
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855648
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevGerasimenkoВ случае неявного приведения типов: зависит от логики, заложенной разработчиком СУБД.
+500

восхишаюсь Вашим хрустальным шаром

правда, max() никакого неявного приведения типов не делает. поэтому у автора всегда 9 и выскакивает.

...

Именно, что не делает: а должен был. Поэтому нужно применять явное приведение типов.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table #ddd(s varchar(2000))

insert into #ddd select '1'
insert into #ddd select '111'
insert into #ddd select '111111'
insert into #ddd select '2'
insert into #ddd select '22'
insert into #ddd select '33333'
insert into #ddd select '9'

select s from #ddd order by s
select max(s)+1 from #ddd --order by s
select max(Cast(s as int))+1 from #ddd

drop table #ddd
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855711
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230Про "колхозить" это не совсем корректно )))), здесь спрашивают и просят помощи обычно чайники, любители и тождественные им категории, а профессионалы обычно им подсказывают, советуют и помогают. Пристыдить "колхозом" можно профессионала, но они как правило на форумах ответы не ищутХорошо. Для тех кто в танке и не понимает намеков. Используйте СТАНДАРТНЫЙ механизм автоинкремента, предоставляемый любой СУБД. Потому, что
1) этот механизм уже есть и работает
2) ваша реализация кривая и работать не будет
...
Рейтинг: 0 / 0
SQL SELECT MAX возвращает макс. значение но только до 10.
    #39855759
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВ данном коде ошибка лишь одна
В данном коде нет ни одной строки без ошибок.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQL SELECT MAX возвращает макс. значение но только до 10.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]