如何在不使用存储过程的情况下使用dbExpress框架更改生成器值?

时间:2012-12-08 17:39:57

标签: delphi firebird dbexpress

如何使用dbExpress框架更改生成器值?我想直接用dbExpress更改生成器值,而无需在RDBMS端等编写存储过程。 请帮助我这样做。

2 个答案:

答案 0 :(得分:1)

AFAIK DBExpress没有专门处理序列/生成器的任何类。

您仍然可以使用标准TSQLQuery来指示dbEngine更改生成器值,如下所示:

procedure TMyDataModule.RestartMyGenerator;
begin
  Q := TSQLQuery.Create;
  try
    Q.SQLConnection := MyConnection;
    //compatible with firebird 1.x and 2.x
    //Q.SQL.Text := 'set generator mygenerator to 0';  
    //better alternative, but compatible only with firebird 2.x
    Q.SQL.Text := 'alter sequence mygenerator restart with 0';
    Q.ExecSQL;
  finally
    Q.Free;
  end;
end;

(未经测试的代码,直接在此窗口中编写)

答案 1 :(得分:1)

param TableName 的函数返回下一个Generator值

function TDM.GenID(TableName: string): Integer;
var
  Qry: TSQLQuery;
begin
  Qry := TSQLQuery.Create(Self);
  try
    Qry.SQLConnection := SQLConnection;
    Qry.SQL.Add('SELECT GEN_ID(GEN_' + TableName + '_ID' + ', 1) ' +
                'FROM RDB$DATABASE');
    Qry.Open;
    Result := Qry.Fields[0].AsInteger;
  finally
    Qry.Free;
  end;
end;