Astuces Delphi

Déclencher une action au démarrage de l’application

procedure TFMain.FormShow(Sender: TObject);
begin
  PostMessage(Button1.Handle,WM_LBUTTONDOWN,0,0);
  PostMessage(Button1.Handle,WM_LBUTTONUP,0,0);
end;

Créer des listes d’objets avec TObjectList

uses Contnrs;

Dans l’interface :

TSQLColumn = Class
  name     : string;
  typ      : string;
  // ...autres champs...
End;
TSqlColumnList = class(TObjectList)
  private
    function GetItem(Index: Integer): TSQLColumn;
    procedure SetItem(Index: Integer; const Value: TSQLColumn);
  public
    property Items[Index: Integer]: TSQLColumn read GetItem write SetItem; default;
end;

Dans l’implémentation :

{ TSqlColumnList }

function TSqlColumnList.GetItem(Index: Integer): TSQLColumn;
begin
  Result:=TSqlColumn(inherited GetItem(Index));
end;

procedure TSqlColumnList.SetItem(Index: Integer; const Value: TSQLColumn);
begin
  inherited setItem(index, value);
end;

Utilisation :

TMyClass = Class
  FColumns        : TSqlColumnList;
  Constructor Create;
  Destructor Destroy; reintroduce;
End;

{ TcatRequete }

constructor TcatRequete.Create;
begin
  FColumns := TSqlColumnList.Create;
end;

destructor TcatRequete.Destroy;
begin
  FColumns.Free;
end;

Et pour remplir la liste :

Var column : TSqlColumn;
begin
  FColumns.Clear;
  // Ajouter un élément
  column:=TSqlColumn.Create;
  FColumns.Add(Column);
  With column do begin
    name := 'xxx';
  end;
end;

NexusDB

LastAutoInc

START TRANSACTION;
insert into titres (nom) values ('test IDENTITY');
SELECT LASTAUTOINC;
COMMIT;

Dans du Delphi, ça donne :

q:=TNxQuery.Create(application);
try
  q.Database:=dm.dbinpro;
  q.sql.text:='START TRANSACTION; '+
              'INSERT INTO titres (isrc,nom,interprete) values (:isrc,:titre,:interprete); ';
              'SELECT LASTAUTOINC; '+
              'COMMIT; ';
  q.ParamByName('titre').AsString:=LTitre.Caption;
  q.ParamByName('isrc').AsString:=LIsrc.Caption;
  q.ParamByName('interprete').AsString:=LArtistes.Caption;
  q.Open;
  i:=q.FieldValues['LastAutoInc'];
finally
  q.free;
end;

Insérer des valeurs nulles

with q.ParamByName('idtitre') do Begin
  Clear;
  Bound:=True;
  DataType:=ftString;
End;