如何从SQL生成的Identity中获取结果?

时间:2013-01-15 07:57:47

标签: sql-server delphi delphi-2007

  

可能重复:
  SQL Server - Return value after INSERT

我是SQL和SQL Server的初学者。我有一个有2列的表。

CREATE TABLE [dbo].[Log](
    [FileName] [varchar](100) NOT NULL,
    [FileID] [int] IDENTITY(1,1) NOT NULL,
 CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
(
    [FileID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

因此,如果我向Filename插入一个字符串,则会自动生成FileID。它可以在SQL Studio中正常工作,但不能从代码中工作。

function TfrmMainForm.SaveFileNameToDB(const aName: String): Integer;
var
  vResult: Variant;
begin
  SQLQuery.Close;
  SQLQuery.SQL.Text := Format('INSERT INTO Log (FileName) VALUES(''%s'')', [aName]);
  SQLQuery.ExecSQL;

  SQLQuery.Close;
  SQLQuery.SQL.Text := Format('SELECT FileID FROM Log WHERE FileName = ''%s''', [aName]);
  SQLQuery.Open;
  SQLQuery.First;
  vResult := SQLQuery.FieldValues['FileID'];
  if VarIsNull(vResult) then  
    Result := -1
  else
    Result := vResult;
end;

此方法的结果始终为-1。这有什么不对?

0 个答案:

没有答案