You are not logged in.
Pages: 1
Sorry, some basic questions here.
type
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
TSQLparents = class(TSQLRecord)
private
fname: RawUTF8;
published
property pnt_name: RawUTF8 read fname write fname;
end;
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
TSQLkids = class(TSQLRecord)
private
fname: RawUTF8;
fbirthdate: TDateTime;
fparent1: TRecordReference;
published
property kid_name: RawUTF8 read fname write fname;
property kid_birthdate: TDateTime read fbirthdate write fbirthdate;
property kid_parent1: TRecordReference read fparent1 write fparent1;
end;
...
The database looks fine, with two tables.
I can read it fine with:
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
procedure ShowChildren(Database: TSQLRest);
var
kid: TSQLkids;
parent: TSQLparents;
parentname: string;
wildcard: RawUTF8;
begin
writeln('ShowChildren');
writeln('============');
wildcard := StringToUTF8('%');
kid := TSQLkids.Create(Database, 'kid_name LIKE ? ', [wildcard]);
parent := TSQLparents.Create;
try
if kid.id > 0 then
begin
// load the parent record... always check if it exists
if Database.Retrieve(kid.kid_parent1, parent, false) then
parentname := parent.pnt_name
else
parentname := 'N/A';
writeln(' ID=', kid.id, ' Name= ', kid.kid_name, ' Parent1= ', parentname);
end;
finally
kid.Free;
parent.Free;
end;
end;
But I'm forced to do the extra retrieve( kid, kid_parent1, parent, false ) is there a way to inherently
get that information
BTW, I've got a large legacy database to support, I cannot change the structure.
According to the mORMot web pages I can specify joins like:
aProd := TSQLProduct.CreateAndFillPrepareMany(Database,
'Owner=? and Categories.Dest.Name=? and (Sizes.Dest.Name=? or Sizes.Dest.Name=?)',[],
['mark','for boy','small','medium']);
if aProd<>nil then
try
while aProd.FillOne do
// here e.g. aProd.Categories.Dest are instantied (and Categories.Source=aProd)
writeln(aProd.Name,' ',aProd.Owner,' ',aProd.Categories.Dest.Name,' ',aProd.Sizes.Dest.Name);
// you may also use aProd.FillTable to fill a grid, e.g.
// (do not forget to set aProd.FillTable.OwnerMustFree := false)
finally
aProd.Free; // will also free aProd.Categories/Sizes instances
end;
but what is aProd . Categories . Dest . Name
there is no definition which shows what Categories and Dest are defined as. I'm assuming
TSQLDest = class( TSQLrecord )
Name : RawUTF8
end
TSQLCategories = class( TSQLRecord )
Dest : TSQLdest ;
end
TSQLProduct = class( TSQLRecord )
Categories : TSQLCategories;
end;
but doesn't that mean it all gets stored in one big TSQLproduct table, not across multiple tables.
Any clues would help.
Erick
Offline
Okay, I think I've figured it out. Trying the above and dumping the database confirmed that the entries were in separate tables like I wanted.
Offline
Pages: 1