Changeset 29 for trunk/UDatabase.pas


Ignore:
Timestamp:
Sep 10, 2022, 10:54:56 PM (2 years ago)
Author:
chronos
Message:
  • Fixed: Load table fields in records list and record edit form.
  • Fixed: Record add needs to insert new row into database.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UDatabase.pas

    r28 r29  
    44
    55uses
    6   Classes, SysUtils, ExtCtrls, dialogs, USqlDatabase, URegistry, UGenerics,
     6  Classes, SysUtils, ExtCtrls, Dialogs, USqlDatabase, URegistry, UGenerics,
    77  Generics.Collections;
    88
     
    7676    procedure Assign(Source: TFields);
    7777    function AddNew(Name: string; DataType: TDataType): TField;
     78    procedure Load;
    7879  end;
    7980
     
    8182
    8283  TRecord = class
    83     Parent: TTable;
     84    Table: TTable;
    8485    Values: TValues;
    8586    function Match(AValues: TStrings): Boolean;
     
    9394
    9495  TRecords = class(TObjectList<TRecord>)
    95     Parent: TTable;
     96    Table: TTable;
    9697    procedure Assign(Source: TRecords);
    9798    function SearchByValue(Name, Value: string): TRecord;
    9899    function SearchByValues(Values: TStrings): TRecord;
    99100    function AddNew: TRecord;
     101    procedure Load;
    100102  end;
    101103
     
    110112    DbClient: TDbClient;
    111113    RecordsCount: Integer;
    112     procedure LoadRecords;
    113114    procedure LoadRecordsCount;
    114115    procedure Assign(Source: TTable);
     
    594595begin
    595596  Result := nil;
    596   Field := Parent.Fields.SearchByName(Name);
     597  Field := Table.Fields.SearchByName(Name);
    597598  if Assigned(Field) then begin
    598     FieldIndex := Parent.Fields.IndexOf(Field);
     599    FieldIndex := Table.Fields.IndexOf(Field);
    599600    I := 0;
    600601    while (I < Count) and (Items[I].Values[FieldIndex].GetString <> Value) do Inc(I);
     
    618619begin
    619620  Result := TRecord.Create;
    620   Result.Parent := Parent;
     621  Result.Table := Table;
    621622  Result.InitValues;
    622623  Add(Result);
     624end;
     625
     626procedure TRecords.Load;
     627var
     628  DbRows: TDbRows;
     629  I: Integer;
     630  F: Integer;
     631  NewRecord: TRecord;
     632  NewValue: TValue;
     633  Value: string;
     634begin
     635  Clear;
     636  DbRows := TDbRows.Create;
     637  try
     638    Table.DbClient.Query('SELECT * FROM ' + Table.Name, DbRows);
     639    for I := 0 to DbRows.Count - 1 do begin
     640      NewRecord := TRecord.Create;
     641      for F := 0 to Table.Fields.Count - 1 do begin
     642        NewValue := Table.Fields[F].GetValueClass.Create;
     643        if DbRows[I].TryGetValue(Table.Fields[F].Name, Value) then begin
     644          NewValue.SetString(Value);
     645          NewRecord.Values.Add(NewValue);
     646        end else begin
     647          //NewValue.SetString('');
     648          NewRecord.Values.Add(NewValue);
     649        end;
     650      end;
     651      Add(NewRecord);
     652    end;
     653  finally
     654    DbRows.Free;
     655  end;
    623656end;
    624657
     
    658691end;
    659692
     693procedure TFields.Load;
     694var
     695  DbRows: TDbRows;
     696  NewField: TField;
     697  I: Integer;
     698begin
     699  Clear;
     700  DbRows := TDbRows.Create;
     701  try
     702    Table.DbClient.Query('SELECT * FROM ModelField WHERE Model = ' + Table.Name, DbRows);
     703    for I := 0 to DbRows.Count - 1 do begin
     704      NewField := AddNew(DbRows[I].Items['Name'],
     705        Table.DbClient.DbManager.DataTypes.SearchByName(DbRows[I].Items['DataType']));
     706      NewField.TextBefore := DbRows[I].Items['Caption'];
     707    end;
     708  finally
     709    DbRows.Free;
     710  end;
     711end;
     712
    660713{ TRecord }
    661714
     
    668721  Result := True;
    669722  for I := 0 to aValues.Count - 1 do begin
    670     Field := Parent.Fields.SearchByName(AValues.Names[I]);
    671     FieldIndex := Parent.Fields.IndexOf(Field);
     723    Field := Table.Fields.SearchByName(AValues.Names[I]);
     724    FieldIndex := Table.Fields.IndexOf(Field);
    672725    if Assigned(Field) then begin
    673726      if Values[FieldIndex].GetString <> AValues.ValueFromIndex[I] then begin
     
    684737begin
    685738  Values.Clear;
    686   for I := 0 to Parent.Fields.Count - 1 do
    687     Values.Add(Parent.Fields[I].GetValueClass.Create);
     739  for I := 0 to Table.Fields.Count - 1 do
     740    Values.Add(Table.Fields[I].GetValueClass.Create);
    688741end;
    689742
     
    781834end;
    782835
    783 { TTable }
    784 
    785 procedure TTable.LoadRecords;
    786 var
    787   DbRows: TDbRows;
    788   I: Integer;
    789   F: Integer;
    790   NewRecord: TRecord;
    791   NewValue: TValue;
    792   Value: string;
    793 begin
    794   Records.Clear;
    795   DbRows := TDbRows.Create;
    796   try
    797     DbClient.Query('SELECT * FROM ' + Name, DbRows);
    798     for I := 0 to DbRows.Count - 1 do begin
    799       NewRecord := TRecord.Create;
    800       for F := 0 to Fields.Count - 1 do begin
    801         NewValue := Fields[F].GetValueClass.Create;
    802         if DbRows[I].TryGetValue(Fields[F].Name, Value) then begin
    803           NewValue.SetString(Value);
    804           NewRecord.Values.Add(NewValue);
    805         end else begin
    806           //NewValue.SetString('');
    807           NewRecord.Values.Add(NewValue);
    808         end;
    809       end;
    810       Records.Add(NewRecord);
    811     end;
    812   finally
    813     DbRows.Free;
    814   end;
    815 end;
    816 
    817836procedure TTable.LoadRecordsCount;
    818837var
     
    842861begin
    843862  Records := TRecords.Create;
    844   Records.Parent := Self;
     863  Records.Table := Self;
    845864  Fields := TFields.Create;
    846865  Fields.Table := Self;
Note: See TracChangeset for help on using the changeset viewer.