在程序中如何修改表的结构?(100分)

  • 主题发起人 主题发起人 jammi
  • 开始时间 开始时间
J

jammi

Unregistered / Unconfirmed
GUEST, unregistred user!
设计一程序,判断表中是否已有'issue'字段,若没有就增加字段
procedure Tmain.FormActivate(Sender: TObject);
begin
DataModule1.Table1.open;
IF DataModule1.Table1.FindField('issue')=NIL Then
With DataModule1 do
Begin
Table1.Close;
Query1.ExecSQL;
Table1.Open
End;
end;
运行时出现错误:Key violation,File must be opened Exclusively.
请问为什么?Table1的exclusive 为True.
Table1 连接欲修改的表
Query1中的SQL语句为:Alter Table person Add issue char(6)
另外我在过程中定义:Var MyField:Tfield;编译时总报错?
 
定义Var MyField:Tfield;的时候,再use中加入db单元...
出现Key violation,File must be opened Exclusively.
说明你的数据库文件被另外一个程序访问,你仔细检查一下,
看看有没有别的程序正在读此文件...实在不行,重起机器试试...
 
修改表结构后,基本上要:
database.close;
database.open;
然后,再将table.open

try it?
 
不知你用的是什么数据库,若用的是.db库,把Table1的exclusive 为false就可以了
 
呵呵
你是在调试环境下用的吧?当时这个表在IDE中还打开着呢,呵呵。
关掉项目,在资源管理器下调试。
 
我的做法是根本不判断字段是否存在,都改一下表结构,但是把
由于字段存在出错处理掉。

procedure Tmain.FormActivate(Sender: TObject);
begin
With DataModule1 do
try
Table1.Close;
Query1.ExecSQL;
Table1.Open
except

End;
end;

当然,在处理前必须把所有与该表有关的TABLE和QUERY都CLOSE掉。
更加保险的做法是把TDATABASE CLOSE一下,然后再OPEN,这样保证
所有的表格都关一次。
 
多人接受答案了。
 
后退
顶部