Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.03;
Скачать: [xml.tar.bz2];

Вниз

Программное добавление полей в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
2-1237265570
petvv
2009-03-17 07:52
2009.05.03
Вопрос по потокам


2-1237613234
Cabyrc
2009-03-21 08:27
2009.05.03
Могу ли я извлечь данные, из БД не зная напрямую название имеющей


15-1235975335
QuickReport
2009-03-02 09:28
2009.05.03
QuickReport в Delphi 2009


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


15-1235468752
axis_of_evil
2009-02-24 12:45
2009.05.03
об интегрированных видеокартах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский