Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.03;
Скачать: CL | DM;

Вниз

Программное добавление полей в ADOTable1   Найти похожие ветки 

 
Новичок   (2009-03-19 02:32) [0]

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


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

Немного поясню зачем это нужно и почему нельзя сразу же добавить поля в ручную. В книге "Библия 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:="Êëþ÷åâî&#22 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.


 
ЮЮ ©   (2009-03-19 04:34) [2]


> Но я хочу изменить свойства полей, так как их нет в 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 12:32) [3]


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

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


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


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


 
Anatoly Podgoretsky ©   (2009-03-19 14:58) [4]

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

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


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

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


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

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


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

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


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

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


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


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

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


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


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

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


 
ЮЮ ©   (2009-03-20 03:16) [11]

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


 
Palladin ©   (2009-03-20 03:18) [12]

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


 
sniknik ©   (2009-03-20 08:06) [13]

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

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

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


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


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

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


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

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


 
Anatoly Podgoretsky ©   (2009-03-20 16:31) [15]

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

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



Страницы: 1 вся ветка

Текущий архив: 2009.05.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
2-1237962304
Zalum
2009-03-25 09:25
2009.05.03
TreeView


2-1237732684
madmech
2009-03-22 17:38
2009.05.03
Как запретить добавлять записи в DBGrid?


15-1236147118
Dennis I. Komarov
2009-03-04 09:11
2009.05.03
из avi -> vaw(mp3,...)


15-1236071588
Анна
2009-03-03 12:13
2009.05.03
проверка запуска одного экземпляра приложения


2-1237296884
SP
2009-03-17 16:34
2009.05.03
Как правильно присвоить значения сразу же после создания объекта?