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
Заполнение элемента ListBox из таблицы.
Пусть на форме имеется две компонеты:
Код:
и такой код
Код:
__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();
}
: 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...
Может быть имеется другое решение, подскажите?
Под myData нужно бы отвести память.
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)
Цитата:
Originally posted by NightSleeper
Если создавать свой буфер, то вызвается исключение, программа выдает ощибку выполнения на строке вызова метода, что-то типа access denied.
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)
Если создавать свой буфер, то вызвается исключение, программа выдает ощибку выполнения на строке вызова метода, что-то типа access denied.
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)
Цитата из хелпа по GetFieldData: "Most applications do not need to call GetFieldData. TField objects call this method to implement their GetData method"
Таким образом, можно взять свойство Fields, и для каждого из полей получить данные его собственным GetData
Цитата:
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
Цитата из хелпа по GetFieldData: "Most applications do not need to call GetFieldData. TField objects call this method to implement their GetData method"
Таким образом, можно взять свойство Fields, и для каждого из полей получить данные его собственным GetData
я тоже не понимаю... у Table есть коллекция Fields и данные лучше брать прямо из БД.
Код:
__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();
}
: 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. Если меняется структура таблицы, не нужно будет менять код.
Цитата:
Originally posted by NightSleeper
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)
В описании метода GetFieldData сказано, что этот буфер организуется самим методом, если я правильно перевёл (описание на англ.)
GetFieldData - низкоуровневый метод, который используется только при разработке собственных компонентов - наследников TDataSet.
В прикладной программе надо пользоваться соответствующими методами или свойствами TField.
p.s. А FieldByNumber я использую чтобы потом заменить его int-переменной, во время выполнения программы юзер будет менять номер столбца, хотя большой разницы нет.
Цитата:
Originally posted by NightSleeper
Благодарю всех за ответы, отдельное спасибо rostyslavу! :)
p.s. А FieldByNumber я использую чтобы потом заменить его int-переменной, во время выполнения программы юзер будет менять номер столбца, хотя большой разницы нет.
Благодарю всех за ответы, отдельное спасибо rostyslavу! :)
p.s. А FieldByNumber я использую чтобы потом заменить его int-переменной, во время выполнения программы юзер будет менять номер столбца, хотя большой разницы нет.
а вот ориентироваться на НОМЕР поля - практика не из лучших