Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программное добавление полей в ADOTable1 [D6, XP]


Новичок ©   (2009-03-19 02:32:00) 

Подскажите пожалуйста, как можно программно добавить поля в ADOTable1? Не через окно редактирования полей базы данных, а каким кодом это можно сделать? Или как можно обращаться к полям базы данных которых нет в окне редактирования базы данных, но есть в самой базе данных Access, да и в DBGrid отображаются поля нормально.


Anatoly Podgoretsky   (2009-03-20 16:31:00) [1]

> Новичок  (20.03.2009 0:31:06)  [6]

Для начала изничтожь ТADOTable


Новичок   (2009-03-20 12:16:00) [2]


> проверь ADOTable1.FieldCount и ADOTable1.Fields[]

сработало, спасибо


> не к их. там есть колонки, если ты их создашь сам то доступ
> к ним появится сразу, если ждать автосоздания то после открытия
> связанного датасета.

пытался обращаться к ним до открытия связанного датасета, всё работает, спасибо


sniknik   (2009-03-20 08:06:00) [3]

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

или "не могу" означает что то другое? не "не знаю как" а что то вроде "физически неспособен. как только начинаю обращаться жена выгоняет изза компьютера"...
т.е.
> А по понятнее можно
??? где, и в чем у тебя проблемы?

> но как изменить это отображение?
меняя соответствующие проперти у колонки. либо, частично, у поля т.к. см. [4] свойства делегируются. те что есть.


Palladin   (2009-03-20 03:18:00) [4]

доступные стены есть? бегать умеешь?


ЮЮ   (2009-03-20 03:16:00) [5]

после открытия ADOTable1 они уже есть:
проверь ADOTable1.FieldCount и ADOTable1.Fields[]


Новичок   (2009-03-20 02:21:00) [6]


> А в DBGrid нет "полей"!

зато в базе данных Access есть и они отображаются в DBGrid, но как изменить это отображение? Неужели не понятен вопрос?


Германн   (2009-03-20 02:13:00) [7]


> Новичок   (20.03.09 01:40) [8]
>
> Вродебы и так понятно (хотя может что-то и не допонимаю),
>  но как изменить отображение полей в DBGrid1, если не могу
> обратиться к их свойствам?

А в DBGrid нет "полей"!


Новичок   (2009-03-20 01:40:00) [8]

Вродебы и так понятно (хотя может что-то и не допонимаю), но как изменить отображение полей в DBGrid1, если не могу обратиться к их свойствам? Так вопрос корректнее?


sniknik   (2009-03-20 00:45:00) [9]

> Неужели никто не сталкивался с такой проблемой?
ну, а проблемы то и нет... чего с ней сталкиваться? это все только путаница у тебя в голове, путаешь наличие(существование) полей, и их отображение. а это далеко не одно и тоже.
как только поймешь, все встанет на свои места. и помедитируй над [4], должно помочь.


Новичок   (2009-03-20 00:31:00) [10]

Неужели никто не сталкивался с такой проблемой?


Новичок   (2009-03-19 16:40:00) [11]

А по понятнее можно


Anatoly Podgoretsky   (2009-03-19 14:58:00) [12]

> Новичок  (19.03.2009 12:32:03)  [3]

Поля это невидимое, но свойство есть, для делегации
В DBGrid1 нет данных
Размер колонок в DBGrid не связан с количеством символов


Новичок   (2009-03-19 12:32:00) [13]


> Вместо строк в коде предоставить интерфейс пользователю,
>  где тот определит количество полей, заполнит наименования
> и типы полей, а по окончании ты и выполнишь данный код для
> каждого определенного пользователем поля.

Это всё будет, только вот проблема какая, делаю ключевое поле key1, но мне нужно его сделать невидимым, а как обратиться к его свойству visible? Или скажем мне нужно для поля 'Фамилия' отвести 30 символов, но в DBGrid1 это поле должно быть меньше, видимая часть только 15 символов, опять же нуно использовать свойства полей, но я не могу к ним обращаться. Как это можно осуществить?


> З.Ы. Неужели Access найти сложно для создания таблиц нужной
> структуры?


Нет, не сложно, он даже у меня установлен на компьютере, но хочется именно научиться создавать программно.


ЮЮ   (2009-03-19 04:34:00) [14]


> Но я хочу изменить свойства полей, так как их нет в ADOTable1
> то сделать это не могу, подскажите пожалуйста как это можно
> осуществить?


Так и таблицы тоже нет.

А изменять надо код:

with Table.Columns do
begin
Append('Ôàìèëèÿ',adVarWChar,50);
Append('Èìÿ',adVarWChar,50);
Append('Òåëåôîí',adVarWChar,15);
Append('Àäðåñ',adVarWChar,255);
Append('Âîçðàñò',adInteger,100);
end;

Вместо строк в коде предоставить интерфейс пользователю, где тот определит количество полей, заполнит наименования и типы полей, а по окончании ты и выполнишь данный код для каждого определенного пользователем поля.

З.Ы. Неужели Access найти сложно для создания таблиц нужной структуры?


Новичок   (2009-03-19 03:44:00) [15]

Немного поясню зачем это нужно и почему нельзя сразу же добавить поля в ручную. В книге "Библия Delphi" нашёл пример работы с ADO Extension, создал на его основе базу данных формата Access, вот код:

procedure TForm1.Button1Click(Sender: TObject);
var
Table:_Table;
Column:_Column;
begin
Catalog:=CoCatalog.Create;
if FileExists('db.mdb') then
DeleteFile('db.mdb');
Catalog.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb');
Catalog.Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb');
Table:=CoTable.Create;
Table.Name :='Ìîè äðóçüÿ';
Table.ParentCatalog:=Catalog;

Column:=CoColumn.Create;
with Column do
begin
 ParentCatalog:=Catalog;
 Name:='Key1';
 Type_:=adInteger;
 Properties['Autoincrement'].Value:=true;
 Properties['Description'].Value:='Êëþ÷åâî 9; ïîëå';
 end;
Table.Columns.Append(Column,0,0);
Column:=Nil;

with Table.Columns do
begin
 Append('Ôàìèëèÿ',adVarWChar,50);
 Append('Èìÿ',adVarWChar,50);
 Append('Òåëåôîí',adVarWChar,15);
 Append('Àäðåñ',adVarWChar,255);
 Append('Âîçðàñò',adInteger,100);
end;
Catalog.Tables.Append(Table);
end; //(полностью взят из книги)

Решил поэкспериментировать и подключить созданную базу данных к программе, поставил нужные компоненты: ADOConnection1, DataSource1, ADOTable1, DBGrid1, настроил,поставил кнопку и написал следующее:
procedure TForm1.Button2Click(Sender: TObject);
var
Table:_Table;
Column:_Column;
begin
if OpenDialog1.Execute then
begin
 DataModule1.ADOConnection1.Close;
 DataModule1.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'
 +'Data Source='+OpenDialog1.FileName+
 ';Persist Security Info=false ';
 DataModule1.ADOConnection1.Open;
end;

DataModule1.ADOTable1.TableName:='Ìîè äðóçüÿ';
DataModule1.ADOTable1.Active:=true;
end; //(подобный код тоже был взят из книги)

В результате создаётся база данных по нажатии на одну кнопку, подключается по нажатии на другую, отображаются поля в DBGrid1, можно добавлять, удалять, редактировать. Но я хочу изменить свойства полей, так как их нет в ADOTable1 то сделать это не могу, подскажите пожалуйста как это можно осуществить? Как к ним обращаться, когда их нет?

Попытался обращаться стандортно:
DataModule1.ADOTable1.FieldValues['Key1'].Visible:=false;
но так не получается, выдаёт ошибку о несуществующем поле key1.


Наверх

Титульная страница Поиск, карта сайта Написать письмо