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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2011, 17:59   #1
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
Восклицание Обращение к ~.mdb через AdoTable

Как мне скопировать название Столбца из ~.mdb в StringGrid1, если я работаю через AdoTable1 с данной базой - нужно просто присвоить StringGrid1.Cells[1,0] ИМЯ данного столбца базы данных ~.mdb

Безымянный.png
http://www.programmersforum.ru/attac...1&d=1316095081

заранее благодарен, Алексей.
Apostol13 вне форума Ответить с цитированием
Старый 15.09.2011, 21:08   #2
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

омг , назовите поля в базе по-английски, имхо потом проблем меньше будет

за название отвечает displayLabel в свойствах полей ADOTable

в DbGrid за название отвечает columns.title.caption

Последний раз редактировалось Lesha; 15.09.2011 в 21:13.
Lesha вне форума Ответить с цитированием
Старый 15.09.2011, 21:14   #3
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от Apostol13 Посмотреть сообщение
просто присвоить StringGrid1.Cells[1,0] ИМЯ данного столбца базы данных ~.mdb
надеюсь точно StringGrid нужен.

вот например следующий код по выбору в комбобоксе определенной таблицы запрашивает у компонента ADOConnection список имен полей указанной таблицы и помещает его в Items ListBox'а:
Код:
procedure TMainForm.cbADOAvailTablesClick(Sender: TObject);
var
  tablenamestr:string;
begin
  MainADOTable.Active:=false;
  tablenamestr:='';
  tablenamestr:=cbADOAvailTables.Items[cbADOAvailTables.ItemIndex];
  MainADOTable.TableName:=tablenamestr;
  try
   MainADOTable.Active:=true;
  except
   Application.MessageBox(Pchar('Не удалось подключить выбранную таблицу '+tablenamestr),PCHAR('ИМПОРТЕР'),MB_OK);
  end;
if MainADOTable.Active=true then
 begin
   ADOConnection.GetFieldNames(MainADOTable.TableName,cbADOAvailFields.Items);
   lstbADOFields.Items.Clear;
 end;
end;
Еще можно получить имя по номеру поля, например при обходе в цикле:
Код:
...
var
stringfieldname:string;
...
stringfieldname:=MainADOTable.Fields[i].FieldName;
...
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 15.09.2011, 21:16   #4
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от Lesha Посмотреть сообщение
омг , назовите поля в базе по-английски, имхо потом проблем меньше будет
кстати да, совершенно согласен
Цитата:
Сообщение от Lesha Посмотреть сообщение
за название отвечает displayLabel в свойствах полей ADOTable
все-же DisplayLabel - лишь отображаемая надпись, не всегда соответствующая имени поля.
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 16.09.2011, 00:04   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
все-же DisplayLabel - лишь отображаемая надпись, не всегда соответствующая имени поля.
Разумеется. А за название поля отвечает свойство FieldName.
_SERGEYX_ вне форума Ответить с цитированием
Старый 16.09.2011, 00:58   #6
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
По умолчанию

Всем спасибо за участие - методом тыка нашел то, что нужно и этим чем то была строчка:

Код:
StringGrid1.Cells[x,y]:=AdoTable1.Fields[1].FieldName;
а в чем разница в использовании BDGrid и StringGrid ? если работа осуществляеца только с базами ~.mdb ?
Apostol13 вне форума Ответить с цитированием
Старый 16.09.2011, 01:05   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну вообще-то с DBGrid c данными из базы горазду удобнее работать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.09.2011, 11:42   #8
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от Apostol13 Посмотреть сообщение
а в чем разница в использовании BDGrid и StringGrid ? если работа осуществляеца только с базами ~.mdb ?
Кх-м вопрос с подвохом что-ли?
DBGrid - прицепляется к datasource и отображает данные из его dataset(запрос, таблица не суть), данные организованы в Columns являющиеся отображением Fields со всеми их ограничениями.
А StringGrid - более "вольный стрелок", отображает что хочешь без ограничений, но лишь отображает, читать и писать данные надо самостоятельно.
Как-то так...
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 22.09.2011, 14:23   #9
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
По умолчанию

Код:
n:=4;
    AdoTable1.First;

    for colnum:=StrToInt(Edit1.Text) to (StrToInt(Edit2.Text)) do
        begin
        AdoTable1.Append;
        AdoTable1.Fields.Fields[n].FieldName:=IntToStr(colnum)+' - '+IntToStr(colnum);
        n:=n+1;
        AdoTable1.Post;
        end;
В Edit1 и Edit2 пишем интервал например [3,5] и в БД формируются столбцы с именами соответственно заданному интервалу. Но я что то не так делаю.
Apostol13 вне форума Ответить с цитированием
Старый 22.09.2011, 15:23   #10
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от Apostol13 Посмотреть сообщение
Код:
n:=4;
    AdoTable1.First;

    for colnum:=StrToInt(Edit1.Text) to (StrToInt(Edit2.Text)) do
        begin
        AdoTable1.Append;
        AdoTable1.Fields.Fields[n].FieldName:=IntToStr(colnum)+' - '+IntToStr(colnum);
        n:=n+1;
        AdoTable1.Post;
        end;
В Edit1 и Edit2 пишем интервал например [3,5] и в БД формируются столбцы с именами соответственно заданному интервалу. Но я что то не так делаю.
Как-то справку читать надо :"TFields holds the field (TField) objects that represent the physical fields underlying a dataset or an object field such as TADTField and TArrayField.".
Не должен этот фокус проканать.

А вообще зачем это???????? Имена полям присваиваются же не просто так? При разработке базы. Если она вообще была...
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не копируется MDB файл через CopyFile artemavd Общие вопросы Delphi 4 02.12.2010 08:44
Обращение к элементам массива через указатель Miha85193 Общие вопросы Delphi 21 19.07.2010 18:43
Обращение к переменной через другую переменную tae1980 Microsoft Office Excel 2 22.03.2010 00:52
Обращение через TComponent Marsel737 Общие вопросы Delphi 6 08.12.2009 21:54
Обращение к элементам массива через указатель в С++ серг Помощь студентам 1 24.11.2009 01:30