Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2017, 07:57   #1
Gelin
 
Регистрация: 09.05.2017
Сообщений: 4
По умолчанию вывод информации по номеру

Добрый день, не пойму в чем ошибка моя.
Вот код
Код:
Form16.ADOQuery1.Active:=false;
Form16.ADOQuery1.SQL.Clear;
Form16.ADOQuery1.SQL.Add('SELECT Цена FROM Товары');
Form16.ADOQuery1.Active:=true;
DBEdit1.Text:=Form16.ADOQuery1.Fields[номер строки].AsString;
Вообщем нужно мне вывести из столбца цена, по номеру строки которую я задам сам. Выводит ошибку мне
Код:
List index out of bounds (1)
Gelin вне форума Ответить с цитированием
Старый 11.05.2017, 07:59   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

номер строки это что?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.05.2017, 09:51   #3
Gelin
 
Регистрация: 09.05.2017
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
номер строки это что?
Допустим имеется таблица Товары
В ней 2 столбца, наименование и цена и 6 строк
И мне надо вытащить цену именно допустим из 5 строки и все.
Gelin вне форума Ответить с цитированием
Старый 11.05.2017, 10:03   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Fields это коллекция полей выборки и не имеет отношения к "номеру строки". Теперь насчет допустим из 5 строки. Это не правильный подход. А если строк 3 в выборке? Или 23? И как насчет сортировки выборки? Это же не фиксированное состояние. 5-тую строчку можно конечно найти в выборке, если она есть вообще, но даже не хочу подсказывать как, потому что это в корне не правильно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.05.2017, 10:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Gelin Посмотреть сообщение
И мне надо вытащить цену именно допустим из 5 строки и все.
во-первых, если Вы делаете select from и не указываете ORDER BY,
то записи (по стандарту SQL) могут быть Вам возвращены В ЛЮБОМ порядке.
Конечно, чаще всего порядок будет такой же, как при вводе данных (физический),
но уверяю Вас, иногда он будет совсем не такой, как Вы ожидаете!

во-вторых,
если Вам нужна конкретная запись и Вы знаете её ID, то лучше её и выбирать.

в-третьих, если допустить, что у Вас кривая структура и такая специфичная задача, что Вам реально нужно сделать то, что Вы хотите, то используйте
такую конструкцию:
Код:
if Form16.ADOQuery1.RecordCount>4 then begin
  Form16.ADOQuery1.RecNo := 5;
  DBEdit1.Text:=Form16.ADOQuery1.Fields[0].AsString;
end
else
  DBEdit1.Text := 'записей в выборке недостаточно много';
но ещё раз повторяю - это кривой код и он может приводить к самым неожиданным багам.
Вы сознательно закладываете косяки в своё приложение.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.05.2017, 10:21   #6
Gelin
 
Регистрация: 09.05.2017
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, если Вы делаете select from и не указываете ORDER BY,
то записи (по стандарту SQL) могут быть Вам возвращены В ЛЮБОМ порядке.
Конечно, чаще всего порядок будет такой же, как при вводе данных (физический),
но уверяю Вас, иногда он будет совсем не такой, как Вы ожидаете!

во-вторых,
если Вам нужна конкретная запись и Вы знаете её ID, то лучше её и выбирать.

в-третьих, если допустить, что у Вас кривая структура и такая специфичная задача, что Вам реально нужно сделать то, что Вы хотите, то используйте
такую конструкцию:
Код:
if Form16.ADOQuery1.RecordCount>4 then begin
  Form16.ADOQuery1.RecNo := 5;
  DBEdit1.Text:=Form16.ADOQuery1.Fields[0].AsString;
end
else
  DBEdit1.Text := 'записей в выборке недостаточно много';
но ещё раз повторяю - это кривой код и он может приводить к самым неожиданным багам.
Вы сознательно закладываете косяки в своё приложение.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, если Вы делаете select from и не указываете ORDER BY,
то записи (по стандарту SQL) могут быть Вам возвращены В ЛЮБОМ порядке.
Конечно, чаще всего порядок будет такой же, как при вводе данных (физический),
но уверяю Вас, иногда он будет совсем не такой, как Вы ожидаете!

во-вторых,
если Вам нужна конкретная запись и Вы знаете её ID, то лучше её и выбирать.

в-третьих, если допустить, что у Вас кривая структура и такая специфичная задача, что Вам реально нужно сделать то, что Вы хотите, то используйте
такую конструкцию:
Код:
if Form16.ADOQuery1.RecordCount>4 then begin
  Form16.ADOQuery1.RecNo := 5;
  DBEdit1.Text:=Form16.ADOQuery1.Fields[0].AsString;
end
else
  DBEdit1.Text := 'записей в выборке недостаточно много';
но ещё раз повторяю - это кривой код и он может приводить к самым неожиданным багам.
Вы сознательно закладываете косяки в своё приложение.
Спасибо за помощь. Мой код работает, но только если вместо номера строки вывести 0 строку (это первая в таблице получается), то он выводит уже нормально 0 строку (1), а если уже использовать больше нуля цифру 1 2 3 и тд, он выдет ошибку
Код:
Form16.ADOQuery1.Active:=false;
Form16.ADOQuery1.SQL.Clear;
Form16.ADOQuery1.SQL.Add('SELECT Цена FROM Товары');
Form16.ADOQuery1.Active:=true;
DBEdit1.Text:=Form16.ADOQuery1.Fields[0].AsString;
Gelin вне форума Ответить с цитированием
Старый 11.05.2017, 10:40   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Gelin Посмотреть сообщение
Мой код работает, но только если вместо номера строки вывести 0 строку (это первая в таблице получается),
не работает.
Вы хоть задумайтесь, почему то, куда Вы суёте свой "номер строки", коллекция называется Fields!
попробуйте перевести это слово. а потом, если всё равно не поймёте, что Вы делаете не так, тогда выполните такой код и задумайтесь, как он работает:


Код:
Form16.ADOQuery1.Close;
Form16.ADOQuery1.SQL.Clear;
Form16.ADOQuery1.SQL.Add('SELECT Цена, 100, 200, 300, 444, 5555 FROM Товары');
Form16.ADOQuery1.Open;
DBEdit1.Text:=Form16.ADOQuery1.Fields[5].AsString;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод в див имен из бд и при нажатии вывод в отдельный див дополнительной информации об этом имени / PHP и базы данных looni123 JavaScript, Ajax 3 03.04.2014 21:26
Вывод информации по страницам andrewsereda Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2013 03:43
Вывод информации pqh PHP 7 15.04.2012 02:09
Вывод даты по году и номеру дня Fantom.as Общие вопросы C/C++ 4 04.12.2010 09:43
Вывод информации из БД Alamez Помощь студентам 2 18.05.2009 10:07