C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Доступ к элементам DBGrid
AleksP
Отправлено: 23.01.2007, 13:02


Дежурный стрелочник

Группа: Участник
Сообщений: 34



1) Как получить доступ к элементам DBGrid с целью последующего вывода в текстовых полях (например, TEdit, TLable)? DBGrid заполняется из mdb файла через ADOTable.
2) Как сформировать DataSource для DBGrid, например, из таблицы, которая содержится в текстовом файле?
Valdemar
Отправлено: 23.01.2007, 14:42


Мастер участка

Группа: Участник
Сообщений: 433



1. Вы не путайте средства отображения данных (DBGrid) и источник данных (Table, Query и т.п.). Если нужно получить данные, то обращайтесь к соответствующим полям источника данных.
Для отображения и редактирования данных из БД есть специальные копоненты, например, на закладке Data Controls.
2. Считать данные из таблицы в текстовом файле по простому врядли удастся. Скорее всего все придется делать вручную.
Tantos
Отправлено: 23.01.2007, 15:28


Станционный диспетчер

Группа: Участник
Сообщений: 108



2. Теоретически можно повозиться TADOCOnnection::ConnectionString. Помнится, кто-то XPortal'e делал БД на файлах Excel. Но, ИМХО, это конкретный гимор.
AleksP
Отправлено: 23.01.2007, 17:19


Дежурный стрелочник

Группа: Участник
Сообщений: 34



Как можно сформировать из данных DataSource, если они уже считаны из файла и преобразованы, например, в массив?
Tantos
Отправлено: 24.01.2007, 04:28


Станционный диспетчер

Группа: Участник
Сообщений: 108



Массив вариантный или обычный? Динамический или статический? Если обычный статический, то что-то вроде этого:
CODE

int i = 0;
int array[10];

while( !DataSet->Eof || i<10 )
{
array[i] = DataSet->FieldByName("F1")->AsInteger;
i++;
DataSet->Next();
}

Кстати, попробуй посмотреть в сторону std::vector для этой цели.
AVC
Отправлено: 24.01.2007, 09:12


Ветеран

Группа: Модератор
Сообщений: 1583



2Tantos
Если я правильно понял, то вопрос был прямо противоположным. Есть массив и нужно из него сделать DataSet.
Этим умеет заниматься MemTableEh, но это уже хлеб olegenty smile.gif .
AleksP
Отправлено: 24.01.2007, 11:53


Дежурный стрелочник

Группа: Участник
Сообщений: 34



To AVC: Да, именно так... из массива нужно сделать DataSource. smile.gif
Илшат
Отправлено: 26.01.2007, 16:45


Ученик-кочегар

Группа: Участник
Сообщений: 2



Как записать данные для не активной записи, или значение поля в DBGrid?
Tantos
Отправлено: 27.01.2007, 03:15


Станционный диспетчер

Группа: Участник
Сообщений: 108



DBGrid — средство для отображения данных. В него ничего не записывают! Что касается внесения изменений в неактивную запись, то уточни, с чем ты работаешь. Обычно обновление происходит на основе первичного ключа таблицы:
CODE

Update tbl1 set field1=:field1 where id=:id


Отредактировано Tantos — 30.01.2007, 09:01
nawok78
Отправлено: 29.01.2007, 15:23


Станционный диспетчер

Группа: Участник
Сообщений: 115



Если Таблица уже создана то приблизительно так:
CODE

void ClearDataSet (TDataSet *ds)
{
 ds->First;
 while(!ds->Eof)
{
 ds->Delete();
}
}
void ArrayToDataSet (TRecord *ArrayOfRecrds, int Count, TDataSet *ds)
{
ClearDataSet (ds);//Если надо обнулить
for (i=0; i<Count; i++)
{
  ds->Append();
  ds->FieldByName('A')->AsInteger= ArrayOfRecrds[i].A;
  ds->FieldByName('B')->AsFloat= ArrayOfRecrds[i].B;
  ds->FieldByName('C')->AsString= ArrayOfRecrds[i].C;
}
}

Вернуться в Работа с базами данных в C++Builder