我有一个德尔福与LiveBindings的XE3火猴应用程序到SQL Server。我可以连接并查看网格上的所有数据。我有一个字段("id"),它是SQL上的“标识字段”(通常称为AutoInc)。
当我尝试添加一条记录时,我得到“字段'id‘必须有一个值”。
在过去,解决这个问题的方法是关闭必需的boolean字段。(例如,使用DBISAM时,您可以使数据库本身中的字段不是必需的,并在数据库引擎到达数据库时填充该字段,但是您不能在MSSQL中使标识字段不是必需的。)
我已经关闭了对TField本身的要求,但这没有任何效果。
发布于 2012-11-06 19:32:05
我的应用程序也遇到了同样的问题。这个问题的解决方案有点棘手。首先,您必须将IDENTITY_INSERT设置为ON。
procedure TdmUnit1.Identity(Table: string; OnOff: boolean);
var s: string;
begin
if OnOff = true then
s := 'ON'
else
s := 'OFF';
s := 'SET IDENTITY_INSERT ' + '[dbo].[' + Table + '] ' + s;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(s);
SQLQuery1.ExecSQL;
end;然后,您必须在表中查找最高的索引。这可以通过OnNewRecord-Event实现:
procedure TdmUnit1.ClientDataSet1NewRecord(DataSet: TDataSet);
var
s: string;
i: integer;
begin
s := 'SELECT IDENT_CURRENT(''AnyTable'')';
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(s);
SQLQuery1.ExecSQL;
SQLQuery1.Active := true;
i := SQLQuery1.Fields[0].AsInteger;
ClientDataSet1.FieldByName('DB_IDX').AsInteger := i+1;
SQLQuery1.Active := false;
end;在ApplyUpdates(0)之后,您必须关闭IDENTITY_INSERT。
https://stackoverflow.com/questions/12305384
复制相似问题