Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Заполнение элемента ListBox из таблицы.

4.5K
31 октября 2004 года
NightSleeper
43 / / 09.10.2004
Помогите пожалуйста разобраться, не получается сабж. P(
Пусть на форме имеется две компонеты:

Код:
object ListBox1: TListBox
    Left = 184
    Top = 16
    Width = 169
    Height = 201
    ItemHeight = 13
    TabOrder = 2
  end
  object Table1: TTable
    DatabaseName = 'BCDEMOS'
    TableName = 'parts.db'
    Left = 600
  end


и такой код

Код:
__fastcall TfrmTimeSheet::TfrmTimeSheet(TComponent* Owner)
    : TForm(Owner)
{
   Table1->Open();
   char * myData;
   for (int i=1; i<=Table1->RecordCount; i++)
   {
        Table1->GetFieldData( 2, myData);
        ListBox1->Items->Add((AnsiString)myData);
        Table1->Next();
   }
   Table1->Close();
}


Почему-то не работает метод GetFieldData, в описании говорится что результат должен быть в myData, но возвращается Null...
Может быть имеется другое решение, подскажите?
368
31 октября 2004 года
rostyslav
629 / / 13.07.2004
Под myData нужно бы отвести память.
4.5K
31 октября 2004 года
NightSleeper
43 / / 09.10.2004
Если создавать свой буфер, то вызвается исключение, программа выдает ощибку выполнения на строке вызова метода, что-то типа access denied.
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)
310
31 октября 2004 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by NightSleeper
Если создавать свой буфер, то вызвается исключение, программа выдает ощибку выполнения на строке вызова метода, что-то типа access denied.
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)



Цитата из хелпа по GetFieldData: "Most applications do not need to call GetFieldData. TField objects call this method to implement their GetData method"

Таким образом, можно взять свойство Fields, и для каждого из полей получить данные его собственным GetData

270
31 октября 2004 года
Drew
265 / / 20.07.2000
Цитата:
Originally posted by fellow


Цитата из хелпа по GetFieldData: "Most applications do not need to call GetFieldData. TField objects call this method to implement their GetData method"

Таким образом, можно взять свойство Fields, и для каждого из полей получить данные его собственным GetData



я тоже не понимаю... у Table есть коллекция Fields и данные лучше брать прямо из БД.

368
31 октября 2004 года
rostyslav
629 / / 13.07.2004
Код:
__fastcall TfrmTimeSheet::TfrmTimeSheet(TComponent* Owner)
    : TForm(Owner)
{
  Table1->Open();
  for (int i=0; i<Table1->RecordCount; i++)
  {
    AnsiString s = Table1->Fields->FieldByNumber(2)->AsString;        
    ListBox1->Items->Add(s);
    Table1->Next();
  }
  Table1->Close();
}

но вместо RecordCount, лучше было бы
while(!Table1->Eof), хотя большой разницы нет.
А вместо FieldByNumber, лучше бы использовать FieldByName. Если меняется структура таблицы, не нужно будет менять код.
10
31 октября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by NightSleeper
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)


GetFieldData - низкоуровневый метод, который используется только при разработке собственных компонентов - наследников TDataSet.

В прикладной программе надо пользоваться соответствующими методами или свойствами TField.

4.5K
01 ноября 2004 года
NightSleeper
43 / / 09.10.2004
Благодарю всех за ответы, отдельное спасибо rostyslavу! :)

p.s. А FieldByNumber я использую чтобы потом заменить его int-переменной, во время выполнения программы юзер будет менять номер столбца, хотя большой разницы нет.
270
01 ноября 2004 года
Drew
265 / / 20.07.2000
Цитата:
Originally posted by NightSleeper
Благодарю всех за ответы, отдельное спасибо rostyslavу! :)

p.s. А FieldByNumber я использую чтобы потом заменить его int-переменной, во время выполнения программы юзер будет менять номер столбца, хотя большой разницы нет.



а вот ориентироваться на НОМЕР поля - практика не из лучших

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог