![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программное добавление полей в 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.