Форум: "Начинающим";
Текущий архив: 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:="Êëþ÷åâî 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