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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2013, 18:51   #1
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье Как вывести записи(строк) таблици базы данных mdb в memo, в цикле for?

Подскажите пожалуйста, как сделать выборку по определенным полям таблици, и вывести результат в memo?
Пробовал вот так, но почему-то выходит ошибка.
Код:
procedure TForm4.FormActivate(Sender: TObject);
var I:integer;
begin
Form1.ADOQuery1.SQL.Clear;
  Form1.ADOQuery1.SQL.Add('select [id] from [registration]');
  Form1.ADOQuery1.Active := true;
  for I := Form1.ADOQuery1.RecNo to Form1.ADOQuery1.RecordCount do
    begin
      Memo1.Lines.Add(Form1.ADOQuery1.FieldValues['id']);
      Form1.ADOQuery1.Next;
    end;
end;
 
end.
Изображения
Тип файла: jpg delphi_error9.jpg (19.7 Кб, 139 просмотров)
Женя32 вне форума Ответить с цитированием
Старый 12.01.2013, 18:56   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

И че, в том jpg можно что-то понять? Понял, что какой-то фиелд, явно не id, не найден в чем-то
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.01.2013, 19:01   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Судя по ошибке проблема не в этом участке кода. Скорее всего ты неправильно указал имя поля для контрола.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 19:20   #4
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Цитата:
Сообщение от Аватар Посмотреть сообщение
И че, в том jpg можно что-то понять? Понял, что какой-то фиелд, явно не id, не найден в чем-то
Код:
Project Projec1.exe raised exception class EDatabaseError with message 'DBEdit9: Fild 'ПАдрес' not found'. Process stopped. Use Step or Run to continue.
А почему id не ищет? Я же указал id/
Женя32 вне форума Ответить с цитированием
Старый 12.01.2013, 19:34   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

DBEdit9 с ПАдрес в качестве имени поля через DataSource ссылается на ADOQuery1, а в нем есть только id. Вот при открытии ADOQuery1 и вываливается ошибка, а не потому, что id не найдено
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.01.2013, 20:51   #6
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Цитата:
Сообщение от Stilet Посмотреть сообщение
Судя по ошибке проблема не в этом участке кода. Скорее всего ты неправильно указал имя поля для контрола.
У меня на основной форме один tedit, один tComboBox и кнопка поиска.

Код:
procedure TForm1.Button1Click(Sender: TObject);

     begin
Form1.dbgrid1.DataSource.DataSet.Locate(ComboBox1.Text, Edit1.Text, [loPartialKey]);
     if not Form1.dbgrid1.DataSource.DataSet.Locate(ComboBox1.Text, Edit1.Text, [loPartialKey]) then
        begin
           ShowMessage('В катнгории: "'+ComboBox1.Text+'", По запросу: "'+Edit1.Text+'" ничего не найдено! Попробуйте сменить категорию.');
        end
     else
        begin
           Form4.ShowModal;  //показываем результат поиска в другой форме
        end;

   
end.
И вот я хочу сделать так, чтоб, если в результате поиска нашлись записи с одинаковыми, например, фамилиями, или адресам, то отрывалась бы форма, и в мемо были бы перечислены эти поля.

Последний раз редактировалось Stilet; 12.01.2013 в 21:29.
Женя32 вне форума Ответить с цитированием
Старый 12.01.2013, 21:34   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
У меня на основной форме один tedit, один tComboBox и кнопка поиска.
А у меня молоко на плите, но это не значит что я шоколад варить не буду.
Еще раз - у тебя для DBEdit9 определено поле, которого нет в запросе, связанном с этим эдитом. В коде это нигде не отражено.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2013, 23:11   #8
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Цитата:
Сообщение от Stilet Посмотреть сообщение
...
Еще раз - у тебя для DBEdit9 определено поле, которого нет в запросе, связанном с этим эдитом. В коде это нигде не отражено.

Я не понимаю, где именно, и для чего нужно в запросе указывать какое-то поле, если я в tComboBox`e указываю в каком столбце нужно вести поиск? У меня DBEdit`ы с поиском вообще никак не связаны, у меня DBEdit`ы расположены на формах ввода и редактирования, и все.
Женя32 вне форума Ответить с цитированием
Старый 12.01.2013, 23:22   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. В момент активизации ADOQuery1 оно посылает сигнал всем DataSource, которые на него ссылаются. Не важно где они расположены, на этой форме или других , важно, что эти формы созданы, и не важно отображаются или нет.
2. Аналогично эти DataSource посылают сигнал всем DB-компонентам, которые на них ссылаются.
3. В DBEdit9, который расположен фиг его знает где пришло такое сообщение. Что он делает? Ищет в полях набора поле, которое в нем указано и не находит в данном случае. Что делает? Подымает исключение. И что? На команде Form1.ADOQuery1.Active := true; вываливается сообщение об ошибке

ADD

Да, и
Код:
for I := Form1.ADOQuery1.RecNo to Form1.ADOQuery1.RecordCount do
очень плохой способ организации цикла по набору. Лучше
Код:
while not Form1.ADOQuery1.Eof do
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.01.2013 в 23:34.
Аватар вне форума Ответить с цитированием
Старый 13.01.2013, 11:16   #10
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Цитата:
Сообщение от Аватар Посмотреть сообщение
...
3. В DBEdit9, который расположен фиг его знает где пришло такое сообщение. Что он делает? Ищет в полях набора поле, которое в нем указано и не находит в данном случае. Что делает? Подымает исключение. И что? На команде Form1.ADOQuery1.Active := true; вываливается сообщение об ошибке...
А почему не находит это поле? Я же соединил DBEdit9,
через DataSource и DataFild, с полем "ПАдрес". С помощью формы ввода, и формы редактирования, через DBEdit9, я могу вводить информацию, и редактировать ее, и никаких ошибок не возникает.
Что еще надо сделать чтоб ADOQuery1, при выводе в цикле, находила это поле?
Женя32 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сосчитать общую сумму, взяв данные из одной таблици и вывести сумм в др? Ol'ga БД в Delphi 3 10.06.2012 23:42
вывести таблици в dbedit delfin07 БД в Delphi 8 20.06.2011 20:37
Проблемы при записи и считыванияиз базы данных Aleksandr Общие вопросы Delphi 5 14.06.2011 23:52
Что делать никак не могу вывести из базы данных значения! pufystyj PHP 4 06.03.2011 12:39
Как вывести в цикле for ... do строки? ViTYAi2007 Помощь студентам 14 27.03.2008 05:47