谁能回答我的问题可加分,通过ADO在Paradox数据库中增加字段报错? (100分)

  • 主题发起人 yaminboy
  • 开始时间
Y

yaminboy

Unregistered / Unconfirmed
GUEST, unregistred user!
通过ADO在Paradox数据库(zzry)中增加"sfid"字段报错。
错误提示是:
[Microsoft][ODBC Paradox 驱动程序] 含有数据的表不支持的操作。
我的程序是:
procedure TfrmChild1.BitBtn1Click(Sender: TObject);
begin
with Datamodule1.ADOQuery4 do
begin
with sql do begin
clear;
add('alter table "zzry.db" add column');
add('sfid');
add('char(18)');
end;
Datamodule1.ADOQuery4.ExecSQL;
end;
end.
 
我试了一下,BDE,ADO都没问题,是不是你的数据库连接有问题!!

procedure TForm1.Button4Click(Sender: TObject);
begin
with adoquery1 do
begin
with sql do begin
clear;
add('alter table "aa.db" add column');
add('sfid');
add('char(18)');
end;
execsql;
end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
with Adoquery1 do
begin
sql.Add('create table aa(aa integer,bb char(10))');
execsql;
end;

end;
 
我是通过数据模块中ADOConnetion1组件连接数据库是测试正常,而且通过ADOTable1
可以看到数据的。
 
如果已经有该字段,不能再添加同名字段。
查一下是什么错。

63. Delphi中获得BDE、ADO的错误号
Delphi的数据库对象,如Ttable和TadoTable有以下一些Error事件:OnDeleteError、OnDeleteErro、OnPostError。这些事件的定义如下,都是数据集错误:
type TDataSetErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction) of object;
property OnPostError: TDataSetErrorEvent;

在这些事件在EdatabaseError中是无法得到错误号的,其中只有Message属性。在发生BDE错误时可如下得到错误号:
if E is EDBEngineError then
showmessage(inttostr(EDBEngineError(E).Errors[0].ErrorCode));
也可以这么写:
if E is EDBEngineError then
showmessage(inttostr((E As EDBEngineError).Errors[0].ErrorCode));
但在发生ADO错误时不能这样: E is EadoError。
其实Ado错误在数据集相应的数据库连接中都有:TadoConnection.Errors。
procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
var
i:integer;
begin
memo1.Lines.Add(inttostr(table1.Connection.errors.count ));
for i:=0 to AdoConnection1.errors.count-1 do
begin
memo1.Lines.Add('number:'+inttohex(AdoConnection1.errors.Number,8 ));
memo1.Lines.Add('NativeCode:'+inttostr(AdoConnection1.errors.NativeError ));
memo1.Lines.Add(inttostr(AdoConnection1.errors.HelpContext ));
memo1.Lines.Add(AdoConnection1.errors.Source );
memo1.Lines.Add(AdoConnection1.errors.SQLState );
memo1.Lines.Add('Description:'+AdoConnection1.errors.Description );
end;
memo1.Lines.Add('error Msg :'+e.message);
end;
NativeError是Foxpro的原生错误号,非常详细,一般用这个来判断发生的错误。Number是Sql错误号,是大的分类,一般一个Number和多个NativeError对应。
这些错误码的信息在文档Drvvfp.hlp中都有。

 
  程序原来是在bde驱动下编绎的,能够顺利运行,并增加该字段。现在改用ADO就出
现此错误。运行后的完整错误提示是:
Project Project1.exe raised exception class EOleException with message
'[Microsoft][ODBC Paradox 驱动程序] 含有数据的表不支持的操作。'.Process
stopped.Use Step or Run to continue.

上面仁兄所说是否已经有该字段,这个可以说是肯定没有该字段,我已经查看过数据库了。
 
with Datamodule1.ADOQuery4 do
begin
with sql do begin
clear;
add('alter table "zzry.db" add column sfid char(18)');
end;
Datamodule1.ADOQuery4.ExecSQL;
end;
没问题
 
自己问题解决了(改变做法),但提出的问题依旧,谁能真正答对银子照给。
 
顶部