Einzelnen Beitrag anzeigen

Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#28

Re: Autowerte bei Firebird setzen

  Alt 13. Jun 2005, 10:54
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
Martin Schaefer
  Mit Zitat antworten Zitat