| 
| 
 | Вопрос # 6 575/ вопрос решён / | 
 |  Приветствую, уважаемые эксперты! У меня проблема при банальном запросе SQL "SELECT MAX(№) FROM Sotrudniki". При запросе выдает ошибку Field "FIO" not found. Если убираю строки "Close" "SQL.Clear"  то выдает ошибку синтаксиса FROM. Куда копать? Примечание #1 (26 января 2015, 14:16): procedure TForm7.Button1Click(Sender: TObject);var
 isot:integer;
 begin
 with Form2.ADOQuery1 do begin
 close;
 SQL.Clear;
 SQL.Add('SELECT max(*)'+'From Sotrudniki;');
 Active:=true;
 Open;
 isot:=Form2.ADOquery1.FieldByName('№').AsInteger+1;
 end;
 
 
|  |   Вопрос задал: Raven_di (статус: Посетитель)Вопрос отправлен: 26 января 2015, 14:07
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 16; последнее сообщение — 27 января 2015, 11:32; участников в обсуждении: 3. 
|   | Мережников Андрей (статус: Абитуриент), 26 января 2015, 14:22 [#1]:max(*) - это что за конструкция? № - это имя поля такое?
 вообще плохая идея таким образом вычислять уникальный номер
 |  
|   | Raven_di (статус: Посетитель), 26 января 2015, 14:29 [#2]:max(*) - это я не туда напечатал(ступил) № - имя поля в котором содержатся порядковые номера.
 procedure TForm7.Button1Click(Sender: TObject);
 var
 isot:integer;
 begin
 with Form2.ADOQuery1 do begin
 close;
 SQL.Clear;
 SQL.Add('SELECT max(№)'+'From Sotrudniki;');
 Active:=true;
 Open;
 isot:=Form2.ADOquery1.FieldByName('№').AsInteger+1;
 end;
 |  
|   | Raven_di (статус: Посетитель), 26 января 2015, 14:32 [#3]:У меня проблема с SQL запросами какой бы я запрос не делал, на суммирование или нахождения максимального значения выдает ошибку  Field "имя поля " not Found, и я не пойму, что я не так делаю |  
|   | ANBsoft (статус: Студент), 26 января 2015, 14:34 [#4]:Max(*) - для какого поля ищется макс значение? Может так:
 'SELECT max(№) From Sotrudniki'
 А вообще назначение номеров должно происходить через автоинкремент (тригеры, генераторы - в зависимости от базы данных), иначе при совместной работе будут проблемы
 |  
|   | ANBsoft (статус: Студент), 26 января 2015, 14:36 [#5]:возможно неудачная идея называть поле "№", назовите "ID" и проверьте еще раз |  
|   | ANBsoft (статус: Студент), 26 января 2015, 14:40 [#6]:Active:=true; и Open; это одно и то же, зачем 2 раза давать команду открытия?
 |  
|   | Raven_di (статус: Посетитель), 26 января 2015, 14:46 [#7]:Про открытие на форуме увидел. Поменял № на ID - результат не изменился
 |  
|   | ANBsoft (статус: Студент), 26 января 2015, 14:48 [#8]:база данных какая? |  
|   | ANBsoft (статус: Студент), 26 января 2015, 14:52 [#9]:какие поля возвращает запрос 'SELECT * From Sotrudniki'
 |  
|   | Raven_di (статус: Посетитель), 26 января 2015, 14:53 [#10]:ID , FIO, DR, dolgnost, bort, telephon |  
|   | ANBsoft (статус: Студент), 26 января 2015, 15:08 [#11]:Попробуйте 'SELECT ID From Sotrudniki'
 если выполняется, то
 'SELECT MAX(ID) From Sotrudniki'
 если первое работает, а второе нет, это что-то непонятное
 попробуйте выполнить эти запросы другими средствами
 (SQLExplorer или штатными средствами для используемой БД)
 |  
|   | ANBsoft (статус: Студент), 26 января 2015, 15:10 [#12]:кстати, я не работал с ADO компонентами, но, возможно, у Вас статически добавлены поля в Query, и когда вы меняете запрос динамически, этих полей больше нет, поэтому выдает что не может найти FIO, когда запрашиваете MAX(ID)
 Удалите все статические поля.
 |  
|   | Мережников Андрей (статус: Абитуриент), 26 января 2015, 15:42 [#13]: Цитата (ANBsoft):  возможно, у Вас статически добавлены поля в Query Скорее всего, так оно и есть
 |  
|   | Raven_di (статус: Посетитель), 27 января 2015, 11:10 [#14]:Вот так работает с динамически прописанными полями, но нарушается ширина столбцов. procedure TForm7.Button1Click(Sender: TObject);
 var
 isot:integer;
 begin
 with Form2.ADOQuery1 do begin
 close;
 Field.Clear;
 SQL.Clear;
 isot:=('SELECT max(ID)From Sotrudniki');
 SQL.ADD(SELECT * From Dotrudniki);
 Open;
 isot:=Form2.ADOquery1.FieldByName('ID').AsInteger+1;
 end;
 |  
|   | Мережников Андрей (статус: Абитуриент), 27 января 2015, 11:20 [#15]:ну так добавьте еще один объект ADO.Query и его используйте для вычисления max(ID), а объект, связанный с таблицей, оставьте в покое. И подумайте над вышесказанным, что выбран очень плохой способ для вычисления ID. Надо использовать либо триггеры, либо автоинкрементные поля (если они поддерживаются выбранной СУБД) |  
|   | Raven_di (статус: Посетитель), 27 января 2015, 11:32 [#16]:Спасибо! Вопрос решен! |  27 января 2015, 11:32: Статус вопроса изменён на решённый (изменил автор вопроса — Raven_di) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |