Moin,
also das jetzt gleich in Zeos einzuordnen dürfte aufgrund meines etwas veralteten Standes so wohl nich sinnig sein. Aber so kommt zunächst meine angeflanschte Minikomponente:
Delphi-Quellcode:
unit UNIT_TzEnhDataset;
{ }
{ }
interface uses
ZIbSqlQuery, dialogs, Classes, SysUtils,
DB, DBCommon;
type
{ }
{ }
TzEnhDataset =
class( TZCustomIbSqlDataset )
private { }
FGeneratorName :
String;
function Get_New_PID :
string;
public { }
constructor Create
( AOwner : TComponent);
override;
destructor Destroy;
override;
procedure DoBeforeInsert;
override;
published { }
property GeneratorName :
String
read FGeneratorName
write FGeneratorName;
end;
{ }
TEnh_TZQuery =
class(TzEnhDataset)
public { }
property MacroCount;
property ParamCount;
published { }
property MacroChar;
property Macros;
property Params;
property ParamCheck;
property DataSource;
property Sql;
property RequestLive;
property Active;
end;
{ }
implementation
{ }
{ TzEnhDataset }
{ } constructor TzEnhDataset.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
{ } destructor TzEnhDataset.Destroy;
begin
inherited Destroy;
end;
{ } function TzEnhDataset.Get_New_PID :
string;
var
PIQ : TEnh_TZQuery;
begin
Result := '
0';
if ( OV_PID_Insert )
and ( OV_PID_Insert_SQL.Text <> '
' )
and ( Database <>
nil )
then
begin
PIQ := TCR_Query.Create(
nil);
PIQ.Database := Database;
PIQ.sql.text := '
SELECT GEN_ID(' + FGeneratorName + '
, 0) FROM RDB$DATABASE';
PIQ.active := true;
Result := PIQ.FieldList.Fields[0].AsString;
PIQ.Active := false;
PIQ.destroy;
end;
end;
{ } procedure TzEnhDataset.DoBeforeInsert;
begin
Edit;
{Zu Testzwecken wird davon ausgegangen das PID das erst Feld ist}
FieldList.fields[0].AsString := Get_New_PID;
inherited DoBeforeInsert;
end;
{ }
end.
Mit Unterstützung ist soetwas sicherlich in Zeos einzuordnen und sicherlich aus dem Rohzustand zu bekommen.
Muß mir heute Mittag mal das
CVS mal installieren. Soweit stelle ich das zunächst mal zur Diskussion
Einen Haken hat das allerdings noch. Das Lesen des Generators erhöht ihn leider nicht, sondern erst der Post.
Das hat einige Milisekunden Unsicherheit. Vielleicht hat Marabu da noch eine Idee.
Grüße // Martin