Ignore:
Timestamp:
Mar 17, 2015, 12:09:11 AM (9 years ago)
Author:
chronos
Message:
  • Modified: Now records are loaded from SQL database using SQL query. The query is parsed also by XML database client to load records from XML file.
  • Added: Packages Network and Synapse.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/DbEngines/UEngineMySQL.pas

    r12 r13  
    1414  TDatabaseMySQL = class(TDatabaseClient)
    1515  private
     16    procedure LoadFields(Table: TTable);
    1617    procedure LoadTables;
    1718  public
    1819    SqlDatabase: TSqlDatabase;
     20    procedure Query(DbRows: TDbRows; Text: string); override;
    1921    constructor Create; override;
    2022    destructor Destroy; override;
     
    2729{ TDatabaseMySQL }
    2830
     31procedure TDatabaseMySQL.LoadFields(Table: TTable);
     32var
     33  DbRows: TDbRows;
     34  NewField: TField;
     35  I: Integer;
     36  DataType: Integer;
     37begin
     38  DbRows := TDbRows.Create;
     39  try
     40    SqlDatabase.Query(DbRows, 'SELECT * FROM `ModelField` WHERE `Model` = ' + IntToStr(Table.Id) + '');
     41    for I := 0 to DbRows.Count - 1 do begin
     42      NewField := TField.Create;
     43      NewField.Table := Table;
     44      NewField.Name := TDictionaryStringString(DbRows[I]).Values['Name'];
     45      NewField.TextBefore := TDictionaryStringString(DbRows[I]).Values['Title'];
     46      DataType := StrToInt(TDictionaryStringString(DbRows[I]).Values['DataType']);
     47      NewField.DataType := Table.Database.Engine.DataTypes.FindByType(TFieldType(DataType));
     48      if not Assigned(NewField.DataType) then
     49        NewField.DataType := Table.Database.Engine.DataTypes.FindByType(ftString);
     50      Table.Fields.Add(NewField);
     51    end;
     52  finally
     53    DbRows.Free;
     54  end;
     55end;
     56
    2957procedure TDatabaseMySQL.LoadTables;
    3058var
    3159  DbRows: TDbRows;
     60  DbRows2: TDbRows;
    3261  NewTable: TTable;
    3362  I: Integer;
     
    3564  DbRows := TDbRows.Create;
    3665  try
    37     SqlDatabase.Query(DbRows, 'SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = "' + SqlDatabase.Database + '"');
     66    SqlDatabase.Query(DbRows, 'SELECT `Id`,`Name`,`Title` FROM `Model`');
    3867    for I := 0 to DbRows.Count - 1 do begin
    3968      NewTable := TTable.Create;
     69      NewTable.Id := StrToInt(TDictionaryStringString(DbRows[I]).Values['Id']);
    4070      NewTable.Database := Database;
    41       NewTable.Name := (TDictionaryStringString(DbRows[I])[0]).Value;
    42       NewTable.Caption := NewTable.Name;
     71      NewTable.Name := TDictionaryStringString(DbRows[I]).Values['Name'];
     72      NewTable.Caption := TDictionaryStringString(DbRows[I]).Values['Title'];
     73      LoadFields(NewTable);
     74      DbRows2 := TDbRows.Create;
     75      try
     76        SqlDatabase.Query(DbRows2, 'SELECT COUNT(*) FROM `' + NewTable.Name + '`');
     77        if DbRows2.Count = 1 then
     78          NewTable.RecordsCount := StrToInt(DbRows2[0].Values['COUNT(*)']);
     79      finally
     80        DbRows2.Free;
     81      end;
    4382      Database.Tables.Add(NewTable);
    4483    end;
     
    4685    DbRows.Free;
    4786  end;
     87end;
     88
     89procedure TDatabaseMySQL.Query(DbRows: TDbRows; Text: string);
     90begin
     91  SqlDatabase.Query(DbRows, Text);
    4892end;
    4993
Note: See TracChangeset for help on using the changeset viewer.