![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление поля в ADOTable [D7]
db_noob © (2005-11-10 09:17:00)Мастера, помогите новичку в БД! Надо в определенной таблице MDB добавить поле типа ftString.
Пробовал вот так:
NewField:=TField.Create(ADOTable1);
NewField.SetFieldType(ftString);
NewField.FieldKind:=fkData;
NewField.FieldName:=edHashColumn.Text;
ADOTable1.Fields.Add(NewField);
поле вроде создается, но тип определяется как ftUnknown :(
и поэтому на ентом коде просто вываливается:
ADOTable1.FieldByName(edHashColumn.Text).AsString:=Hash;
с ошибкой "Cannot access field 'DBControl' as type String"
db_noob (2005-11-11 04:30:00) [1]sniknik © (10.11.05 21:01) [9]
... ADD COLUMN <имя_колонки> <тип> <default> ?
sniknik (2005-11-10 21:01:00) [2]... ADD COLUMN ...
насчет NULL еще не уверен, NOT NULL есть а вот NULL... вообше лучше убери.
Desdechado (2005-11-10 20:57:00) [3]скобки, например, в оракле могут понадобиться
ALTER TABLE xxx ADD ( ... )
синтаксис везде немного разный, смотри в акцессе в справке
db_noob (2005-11-10 19:43:00) [4]Desdechado © (10.11.05 17:56) [5]
я в ентом деле немного нуб ) направление другое.
т.е. юзать ExecSQL? Open вообще тут не нужен? достаточно чтобы ADOQuery1 был завязан через ConnectionString / Connection с базой?
ADOQuery1.SQL.Text:=Format('ALTER TABLE %s ADD %s VARCHAR(100) NULL',[ATableName,AColumnName]);
ADOQuery1.ExecSQL;
вот так? (прошу прощение что переспрашиваю, просто проверить смогу только утром, в общем, на всякий случай :))
з.ы. по поводу скобок: вы что имели в виду?
"ALTER TABLE (...)" ? раз DDL, то наверное аналогично "CREATE TABLE (...)" ? или вы что другое имели в виду...
Dioman © (10.11.05 18:02) [6]
"DDL это как раз и есть alter table, только рекомендуют использовать TAdoCommand .. как раз для этих целей. Попробуй."
спасибо, нашел пару примеров использования DDL + TADOCommand. Спасибо!
"а на создание полей в новой таблице примеров действительно дофига, а вот как создать новое поле ... ???"
угу =(
Dioman (2005-11-10 18:02:00) [5]DDL это как раз и есть alter table, только рекомендуют использовать TAdoCommand .. как раз для этих целей. Попробуй.
а на создание полей в новой таблице примеров действительно дофига, а вот как создать новое поле ... ???
Desdechado (2005-11-10 17:56:00) [6]какой Open для ALTER TABLE?
может, где скобки нужны
db_noob (2005-11-10 17:46:00) [7]Desdechado © (10.11.05 13:07) [3]
ALTER TABLE xxx ADD ...
первым делом попробовал! =( ругается на синтаксис. я думал что тоже самое, что и в MS SQL проканает:
ADOQuery1.SQL.Text:=Format('ALTER TABLE %s ADD %s VARCHAR(100) NULL',[ATableName,AColumnName]);
ADOQuery1.Open;
...
ругается на ALTER TABLE :(
Dioman © (10.11.05 12:34) [2]
спасибо, немного раскрыли глаза... не могли бы подсказать как с помощью DDL модифицировать сию таблицу, видел примеры создания новой таблицы, но не нашел примеров модификации. мне всего то 1 поле добавить надо, а такие проблемы возникают =( заранее, спасибо
Desdechado (2005-11-10 13:07:00) [8]ALTER TABLE xxx ADD ...
Dioman (2005-11-10 12:34:00) [9]Поле то создается. Но не привязывается к данным. Если переоткрыть датасет то получится что он не сможет найти это поле в физической таблице, и выдаст ошибку.
тип fkData к данным привязывается.. то есть поле без физ. поля в таблице не может быть. А вот Calculated какой-нибдуь можно.
SetFieldType в классе TField это пустая заглушка, она ничего не делает и используется в классах потомках.
Если нужно физически модифицировать структуру данных то можно воспользоваться DDL. В TADOCommand. (если для мдб это поддерживается).
Если нужно создать динамическое поле... не автовычисляемое и не лукап, то честно не в курсе как это делать. Может для этого есть какие-то левые компоненты. Хотя можно создать поле в гриде, не привязывать его к данным и модифицировать просто перерисовывая его посе каких-то событий. (я так делал когда нужно было сделать поле Номер по порядку.
Надеюсь помог
db_noob (2005-11-10 09:54:00) [10]Удалено модератором
Примечание: Создание пустых сообщений