如何在修改ACCESS表结构的时候,判断表中是否有了要添加的字段(100分)

  • 主题发起人 主题发起人 xt2002xt
  • 开始时间 开始时间
X

xt2002xt

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一表1
字段1 字段2 字段3
现在想利用SQL添加一字段4,但因为不知道表中有没有字段4了(运行完添加字段4的SQL后再运行一次就会提示字段4已经存在的错误)
alter table 表1 add 字段4 string(50)
如何才能避免这样的错误?能否通过SQL来先扫描表结构,后再进行添加?
 
用ADOConnection.GetFieldNames获取表1的字段列表,再在这个列表中检查有没有你要加的字段
 
function IsFieldExists(aADO: TADOConnection; aTable,aField: string): Boolean;
var
AList : TStringList;
begin
Result := False;
if not aADO.Connected then
aADO.Connected := true;
AList := TStringList.Create;
try
AList.Clear;
aADO.GetFieldNames(aTable,AList);
if AList.IndexOf(aField) >= 0 then
Result := True;
finally
FreeAndNil(AList);
end;
end;
你在组织添加字段的SQL语句时,先用此函数进行检查,生成的SQL语句就会不发生冲突了
 
使用
try
execute;
except

end;
运行时如果存在该字段不会引发错误,没有该字段则增加。
 
记得在ORACLE里可以通过一个SELECT语句查询表结构的,ACCESS里不可以的?
 
我说的这个方法没错,我升级数据库就是这么升级的啊。
不过调试状态下还是会显示出错信息。在运行阶段(你可以直接运行工程文件夹内的可执行文件试试)不会显示出错信息
 
楼上是封不是判断
 
我写了一下:
[red]if IsFieldExists(ado1;erw,字段4)=false then[/red]
begin
adoquery1.Close;
adoquery1.sql.clear;
adoquery1.SQL.Add('alter table erw add 字段4 real');
adoquery1.execsql;
end else application.MessageBox('字段4已存在','提示,64');
end;
编译时出错:提示第一行‘Not enough actual parameters’
该怎么办呢?
 
谢谢大家 我目前是通过bjaman的方法实现的
 
先判断有没有这个字段。判断可以直接根据系统表sysobjects和syscolumns的id连接。
 
bjaman的方法,我试了一下,不行。有没有人路过。帮忙一下。谢谢。
if IsFieldExists(ADO , Table1, '学号' ) then
showmessage('存在');
提示:[Error] Unit1.pas(53): Incompatible types: 'String' and 'TADOTable'
 
奇怪 ,怎么没加成分呢!呵呵!补上
 
TO : WALIMG
请注意: IsFieldExists(ADO , Table1, '学号' )要该为
IsFieldExists(ADO , 'Table1', '学号' ),请看bjaman的申明是作为STRING的
 
后退
顶部