Changeset 13 for trunk/DbEngines
- Timestamp:
- Mar 17, 2015, 12:09:11 AM (10 years ago)
- Location:
- trunk/DbEngines
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/DbEngines/UEngineMySQL.pas
r12 r13 14 14 TDatabaseMySQL = class(TDatabaseClient) 15 15 private 16 procedure LoadFields(Table: TTable); 16 17 procedure LoadTables; 17 18 public 18 19 SqlDatabase: TSqlDatabase; 20 procedure Query(DbRows: TDbRows; Text: string); override; 19 21 constructor Create; override; 20 22 destructor Destroy; override; … … 27 29 { TDatabaseMySQL } 28 30 31 procedure TDatabaseMySQL.LoadFields(Table: TTable); 32 var 33 DbRows: TDbRows; 34 NewField: TField; 35 I: Integer; 36 DataType: Integer; 37 begin 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; 55 end; 56 29 57 procedure TDatabaseMySQL.LoadTables; 30 58 var 31 59 DbRows: TDbRows; 60 DbRows2: TDbRows; 32 61 NewTable: TTable; 33 62 I: Integer; … … 35 64 DbRows := TDbRows.Create; 36 65 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`'); 38 67 for I := 0 to DbRows.Count - 1 do begin 39 68 NewTable := TTable.Create; 69 NewTable.Id := StrToInt(TDictionaryStringString(DbRows[I]).Values['Id']); 40 70 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; 43 82 Database.Tables.Add(NewTable); 44 83 end; … … 46 85 DbRows.Free; 47 86 end; 87 end; 88 89 procedure TDatabaseMySQL.Query(DbRows: TDbRows; Text: string); 90 begin 91 SqlDatabase.Query(DbRows, Text); 48 92 end; 49 93 -
trunk/DbEngines/UEngineXML.pas
r12 r13 7 7 uses 8 8 Classes, SysUtils, DOM, XMLRead, XMLWrite, UDatabase, UXMLUtils, FileUtil, 9 UHtmlClasses ;9 UHtmlClasses, USqlDatabase, SpecializedDictionary; 10 10 11 11 type … … 29 29 procedure LoadFromFile(FileName: string); 30 30 procedure SaveToFile(FileName: string); 31 function GetNextPart(var Text: string): string; 31 32 public 33 procedure Query(DbRows: TDbRows; Text: string); override; 32 34 procedure Load; override; 33 35 procedure Save; override; … … 280 282 end; 281 283 284 function TDatabaseXML.GetNextPart(var Text: string): string; 285 begin 286 if Pos(' ', Text) > 0 then begin 287 Result := Trim(Copy(Text, 1, Pos(' ', Text) - 1)); 288 Delete(Text, 1, Pos(' ', Text)); 289 end else begin 290 Result := Text; 291 Text := ''; 292 end; 293 end; 294 295 procedure TDatabaseXML.Query(DbRows: TDbRows; Text: string); 296 var 297 Command: string; 298 Columns: string; 299 TableName: string; 300 Table: TTable; 301 NewRecord: TDictionaryStringString; 302 I: Integer; 303 F: Integer; 304 begin 305 Command := GetNextPart(Text); 306 if Command = 'SELECT' then begin 307 Columns := GetNextPart(Text); 308 Command := GetNextPart(Text); 309 if Command = 'FROM' then begin 310 TableName := GetNextPart(Text); 311 end; 312 Table := Database.Tables.SearchByName(TableName); 313 if Assigned(Table) then begin 314 DbRows.Count := 0; 315 if Columns = '*' then begin 316 for I := 0 to Table.Records.Count - 1 do begin 317 NewRecord := TDictionaryStringString.Create; 318 for F := 0 to Table.Fields.Count - 1 do 319 NewRecord.Add(TField(Table.Fields[F]).Name, TValue(TRecord(Table.Records[I]).Values[I]).GetString); 320 DbRows.Add(NewRecord); 321 end; 322 end else 323 if Columns = 'COUNT(*)' then begin 324 NewRecord := TDictionaryStringString.Create; 325 NewRecord.Add('COUNT(*)', IntToStr(Table.Records.Count)); 326 DbRows.Add(NewRecord); 327 end else raise Exception.Create('Unsupported columns ' + Columns + ' specification'); 328 end else raise Exception.Create('Table ' + TableName + ' not found.'); 329 end else raise Exception.Create('Unsupported SQL command ' + Command); 330 end; 331 282 332 procedure TDatabaseXML.Load; 283 333 begin
Note:
See TracChangeset
for help on using the changeset viewer.