Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 2 of 2 total
Thread Why does this not work
Tue, Mar 6 2007 1:52 PMPermanent Link

"Mike Saunders"
procedure CreateMemTable(nameoftable :string; Defns: array of Tfield);

var i: integer; TableToCreate: TDBISAMTable;
begin
 ClearMemTable;
 TableToCreate:=TDBISAMTable.Create(Application);
 try
   with TableToCreate do
     begin
       DatabaseName:='Memory';
       TableName:= nameoftable;
       Active := False;
       Exclusive:=True;


       //why does this not work?    

       for i := Low(Defns) to High(Defns) do   
         begin
           FieldDefs.AddFieldDef.Name := Defns[i].FieldName;
           FieldDefs.AddFieldDef.datatype := Defns[i].datatype;
           FieldDefs.AddFieldDef.size := Defns[i].size;
           FieldDefs.AddFieldDef.Required := False;
         end;}

      // but this does

       for i := Low(Defns) to High(Defns) do  
         FieldDefs.Add(Defns[i].FieldName,Defns[i].datatype,Defns
[i].size,False);

       if not Exists then
         CreateTable;
     end
 finally
   TableToCreate.Free;
 end;
end;


Thanks

Mike
Tue, Mar 6 2007 1:57 PMPermanent Link

Sean McCall
FieldDefs.AddFieldDef is creating a new field definition each time you
call the method. Try:

AFieldDef := FieldDefs.AddFieldDef;
AFieldDef.Name := AName;
AFieldDef.DataType := AType;

etc.

Sean

> procedure CreateMemTable(nameoftable :string; Defns: array of Tfield);
>
> var i: integer; TableToCreate: TDBISAMTable;
> begin
>   ClearMemTable;
>   TableToCreate:=TDBISAMTable.Create(Application);
>   try
>     with TableToCreate do
>       begin
>         DatabaseName:='Memory';
>         TableName:= nameoftable;
>         Active := False;
>         Exclusive:=True;
>
>
>         //why does this not work?    
>
>         for i := Low(Defns) to High(Defns) do   
>           begin
>             FieldDefs.AddFieldDef.Name := Defns[i].FieldName;
>             FieldDefs.AddFieldDef.datatype := Defns[i].datatype;
>             FieldDefs.AddFieldDef.size := Defns[i].size;
>             FieldDefs.AddFieldDef.Required := False;
>           end;}
>
>        // but this does
>
>         for i := Low(Defns) to High(Defns) do  
>           FieldDefs.Add(Defns[i].FieldName,Defns[i].datatype,Defns
> [i].size,False);
>
>         if not Exists then
>           CreateTable;
>       end
>   finally
>     TableToCreate.Free;
>   end;
> end;
>
>
> Thanks
>
> Mike
>
Image