4
février
2009
Persistance des objets par SQL : insertion
février
2009
Un article de erca57
Pas de commentaires
15e épisode
2.2.5 – Visiteur TSQLInsertPerson
L’insertion dans la base d’un nouvel objet TPerson ne différe pas beaucoup de la mise à jour.
{
******************************* TSQLInsertPerson *******************************
}
procedure TSQLInsertPerson.Init;
begin
FQuery.SQL.Clear;
FQuery.SQL.Add('INSERT INTO PEOPLE VALUES (');
FQuery.SQL.Add(':OID,');
FQuery.SQL.Add(':LastName,');
FQuery.SQL.Add(':FirstName,');
FQuery.SQL.Add(':BirthDate);');
end;
procedure TSQLInsertPerson.SetupParams;
var
IData: TPerson;
begin
IData := TPerson(FVisited);
FQuery.Params.ParamByName('OID').AsInteger := IData.OID;
FQuery.Params.ParamByName('LastName').AsString := IData.LastName;
FQuery.Params.ParamByName('FirstName').AsString := IData.FirstName;
FQuery.Params.ParamByName('BirthDate').AsDateTime := IData.BirthDate;
end;
******************************* TSQLInsertPerson *******************************
}
procedure TSQLInsertPerson.Init;
begin
FQuery.SQL.Clear;
FQuery.SQL.Add('INSERT INTO PEOPLE VALUES (');
FQuery.SQL.Add(':OID,');
FQuery.SQL.Add(':LastName,');
FQuery.SQL.Add(':FirstName,');
FQuery.SQL.Add(':BirthDate);');
end;
procedure TSQLInsertPerson.SetupParams;
var
IData: TPerson;
begin
IData := TPerson(FVisited);
FQuery.Params.ParamByName('OID').AsInteger := IData.OID;
FQuery.Params.ParamByName('LastName').AsString := IData.LastName;
FQuery.Params.ParamByName('FirstName').AsString := IData.FirstName;
FQuery.Params.ParamByName('BirthDate').AsDateTime := IData.BirthDate;
end;
Ce nouveau visiteur est appliqué à l’objet TPerson comme suit :
procedure TFormRepert.aCreateExecute(Sender: TObject);
var
newPerson: TPerson;
Visitor: TSQLInsertPerson;
begin
newPerson := TPerson.Create;
TFormPerson.Execute(newPerson);
if newPerson = nil then
Exit;
if newPerson.Dirty then
begin
if not(ExtractFileExt(CurrentFileName) = '.fdb') then
newPerson.Dirty := False
else begin
Visitor := TSQLInsertPerson.Create(CurrentFileName);
try
newPerson.AcceptBizObjVisitor(Visitor);
finally
Visitor.Free;
end;
end;
if not newPerson.Dirty then
People.Add(newPerson);
DisplayList;
end
else
newPerson.Free;
end;
var
newPerson: TPerson;
Visitor: TSQLInsertPerson;
begin
newPerson := TPerson.Create;
TFormPerson.Execute(newPerson);
if newPerson = nil then
Exit;
if newPerson.Dirty then
begin
if not(ExtractFileExt(CurrentFileName) = '.fdb') then
newPerson.Dirty := False
else begin
Visitor := TSQLInsertPerson.Create(CurrentFileName);
try
newPerson.AcceptBizObjVisitor(Visitor);
finally
Visitor.Free;
end;
end;
if not newPerson.Dirty then
People.Add(newPerson);
DisplayList;
end
else
newPerson.Free;
end;