dbExpress フレームワークでジェネレータの値を変更するには? RDBMS側でストアドプロシージャなどを書かずに、dbExpressで直接ジェネレータの値を変更したいのですが、その方法を教えてください。
質問する
508 次
2 に答える
1
パラメータ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;
于 2012-12-31T19:33:11.673 に答える
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;
(このウィンドウに直接書かれたテストされていないコード)
于 2012-12-08T21:07:00.763 に答える