ACCESS中动态建表(50分)

  • 主题发起人 主题发起人 wjing
  • 开始时间 开始时间
W

wjing

Unregistered / Unconfirmed
GUEST, unregistred user!
ACCESS中有一个字段类型为自动累加,请各位高手指教如何在代码中实现。

 
select sum()
insert into
 
不用给它赋值,是自动添加的
 
感谢各位的关注.
也许是我未写清楚,我是想利用代码建立这种类型的字段,
而不是利用代码实现这种功能.
例如:access中有日期型的字段,我只要动态建表中建立这种类型的字段就可以,
同样access中有自动累加型的字段,如何在动态建表中建立这种类型的字段.
 
td.Fields['ID'].Set_Attributes(dbAutoIncrField);

//DELPHI 支持的DAO数据格式
td.Fields.Append(td.CreateField ('dbBoolean',dbBoolean,0));
td.Fields.Append(td.CreateField ('dbByte',dbByte,0));
td.Fields.Append(td.CreateField ('dbInteger',dbInteger,0));
td.Fields.Append(td.CreateField ('dbLong',dbLong,0));
td.Fields.Append(td.CreateField ('dbCurrency',dbCurrency,0));
td.Fields.Append(td.CreateField ('dbSingle',dbSingle,0));
td.Fields.Append(td.CreateField ('dbDouble',dbDouble,0));
td.Fields.Append(td.CreateField ('dbDate',dbDate,0));
td.Fields.Append(td.CreateField ('dbBinary',dbBinary,0));
td.Fields.Append(td.CreateField ('dbText',dbText,0));
td.Fields.Append(td.CreateField ('dbLongBinary',dbLongBinary,0));
td.Fields.Append(td.CreateField ('dbMemo',dbMemo,0));


动态建表?
var
dbname: string;
db: Database;
td: TableDef;
idx: Index;
rel: Relation;
begin
if InputQuery ('Database name', 'Enter database name', dbname) then
begin
if __DBEngine35 = nil then CreateEngine (Dao35, '');

db := __DBEngine35.CreateDatabase (ExtractFilePath (Application.ExeName) + dbname, ';LANGID=0x0409;CP=1252;COUNTRY=0', 0);

td := db.CreateTableDef ('Orders', 0, '', '');
td.Fields.Append (td.CreateField ('Order_ID', dbInteger, 0));
td.Fields.Append (td.CreateField ('Order_DATE', dbDate, 0));
td.Fields.Append (td.CreateField ('Order_CLIENT', dbText, 50));
td.Fields.Append (td.CreateField ('Order_TOTAL', dbCurrency, 0));

idx := td.CreateIndex ('Primary');
idx.Primary := True;
idx.Fields.Append (idx.CreateField ('Order_ID', dbInteger, 0));
td.Indexes.Append (idx);

idx := td.CreateIndex ('By_Client');
idx.Fields.Append (idx.CreateField ('Order_CLIENT', dbText, 50));
td.Indexes.Append (idx);
db.TableDefs.Append (td);

td := db.CreateTableDef ('Items', 0, '', '');
td.Fields.Append (td.CreateField ('Item_ID', dbInteger, 0));
td.Fields.Append (td.CreateField ('Order_ID', dbInteger, 0));
td.Fields.Append (td.CreateField ('Item_NAME', dbText, 40));
td.Fields.Append (td.CreateField ('Item_COUNT', dbInteger, 0));
td.Fields.Append (td.CreateField ('Item_PRICE', dbCurrency, 0));

idx := td.CreateIndex ('Primary');
idx.Primary := True;
idx.Fields.Append (idx.CreateField ('Item_ID', dbInteger, 0));
td.Indexes.Append (idx);

idx := td.CreateIndex ('By_Order');
idx.Fields.Append (idx.CreateField ('Order_ID', dbInteger, 0));
td.Indexes.Append (idx);

db.TableDefs.Append (td);

rel := db.CreateRelation ('ItemsOrders', 'Orders', 'Items', dbRelationUpdateCascade);
rel.Fields.Append (rel.CreateField ('Order_ID', dbInteger, 0));
rel.Fields ['Order_ID'].ForeignName := 'Order_ID';
db.Relations.Append (rel);

db.Close;
end;
end;
 
房客:
不知您可试过这句赋值语句:
td.Fields['ID'].Set_Attributes(dbAutoIncrField);
你后面的是不是copy diamond的实例.
我试过运行这句必然出错,不知是放的地方不对,还是这法子行不通.
敬请指出!!!
 
dbAutoIncrField是类型啊
那就试试
td.Fields.Append(td.CreateField ('dbAutoIncrField',dbAutoIncrField,0));
后边的是啊
 
用SQL语句,例如:
AA.SQL.Clear;
AA.SQL.Add('CREATE TABLE ABC(A1 IDENTITY(1,1) PRIMARY KEY,A2 VARCHAR(10) NOT NULL )');
AA.ExecSQL
试一下吧!!
 
还是不行啊!!!
还请各位高手在想想其他办法!!
 
用Ttable的就可以
 
用SQL语句,例如:
AA.SQL.Clear;
AA.SQL.Add('CREATE TABLE ABC(A1 IDENTITY(1,1) PRIMARY KEY,A2 VARCHAR(10) NOT NULL )');
AA.ExecSQL
试一下吧!!
其中aa是QUERY控件!!
 
同意楼上的。
这种东西已经做过很多了,用SQL绝对没问题,而且方便。
 
谁能帮我回答一下我的问题啊?高手们?
好几天了,没有一位高手愿意回答!
我的问题题目是“我还是痛苦”
 
sql在delphi的ado中可以,但是我在diamond access1。8版中无法实现。

delphiasp你好不知能否给出原码。
 
wjing:你好,在下遇上和你一样的问题,很痛苦,
不知你这个问题解决没有,jack9999的
CREATE TABLE ABC(A1 IDENTITY(1,1) PRIMARY KEY,A2 VARCHAR(10) NOT NULL )
是SQL的解决方案,不是ACCESS的,希望你能够帮我。
我的EMAIL:djjsl@263.net.
 
后退
顶部