Explorar el Código

Consolidate common includes/constants. Rename and harden ChangeQueryToUpdatable (it is not Bidi mode as unidirectional is a specific term regarding datasets: it means forward only)

Reinier Olislagers hace 11 años
padre
commit
b824f53251
Se han modificado 8 ficheros con 62 adiciones y 126 borrados
  1. 6 1
      TurboBird.lpi
  2. 1 24
      about.pas
  3. 2 2
      editdatafullrec.pas
  4. 6 7
      edittable.lfm
  5. 29 27
      edittable.lrs
  6. 8 13
      edittable.pas
  7. 9 28
      main.pas
  8. 1 24
      update.pas

+ 6 - 1
TurboBird.lpi

@@ -100,7 +100,7 @@
         <PackageName Value="LCL"/>
       </Item6>
     </RequiredPackages>
-    <Units Count="39">
+    <Units Count="40">
       <Unit0>
         <Filename Value="TurboBird.lpr"/>
         <IsPartOfProject Value="True"/>
@@ -394,6 +394,11 @@
         <IsPartOfProject Value="True"/>
         <UnitName Value="UnitFirebirdServices"/>
       </Unit38>
+      <Unit39>
+        <Filename Value="turbocommon.inc"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="Unit1"/>
+      </Unit39>
     </Units>
   </ProjectOptions>
   <CompilerOptions>

+ 1 - 24
about.pas

@@ -8,30 +8,7 @@ uses
   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
   ExtCtrls, StdCtrls, Buttons, LCLIntf;
 
-const
-  {$IFDEF LINUX}
-   Target = 'Linux';
-  {$ENDIF}
-
-  {$IFDEF WINDOWS}
-   Target = 'Win';
-  {$ENDIF}
-
-  {$IFDEF DARWIN}
-   Target = 'Mac';
-  {$ENDIF}
-
-  {$IFDEF BSD}
-   Target = 'BSD';
-  {$ENDIF}
-
-  {$ifDEF CPU32}
-   Arch = '32';
-  {$ENDIF}
-
-  {$ifDEF CPU64}
-   Arch = '64';
-  {$ENDIF}
+{$i turbocommon.inc}
 
 type
 

+ 2 - 2
editdatafullrec.pas

@@ -94,9 +94,9 @@ begin
 
   sqEditTable.SQL.Text:= 'select * from ' +  ATableName;
 
-  bbSave.Visible:= fmMain.ChangeQueryToBIDirectional(dbIndex, ATableName, sqEditTable);
+  bbSave.Visible:= fmMain.ChangeQueryToUpdatable(dbIndex, ATableName, sqEditTable);
   if not bbSave.Visible then
-    ShowMessage('Primary key is not exist, table can not be edited');
+    ShowMessage('Primary key does not exist; table can not be edited');
   sqEditTable.Open;
 
   ATop:= 70;

+ 6 - 7
edittable.lfm

@@ -10,7 +10,7 @@ object fmEditTable: TfmEditTable
   OnClose = FormClose
   OnCreate = FormCreate
   Position = poScreenCenter
-  LCLVersion = '0.9.31'
+  LCLVersion = '1.2.2.0'
   object Panel1: TPanel
     Left = 0
     Height = 50
@@ -21,20 +21,19 @@ object fmEditTable: TfmEditTable
     ClientWidth = 568
     ParentColor = False
     TabOrder = 0
-    OnClick = Panel1Click
     object Label1: TLabel
       Left = 258
-      Height = 18
+      Height = 13
       Top = 27
-      Width = 62
+      Width = 45
       Caption = 'Record #'
       ParentColor = False
     end
     object laPos: TLabel
       Left = 326
-      Height = 18
+      Height = 13
       Top = 27
-      Width = 9
+      Width = 6
       Caption = '0'
       Font.Color = 11610912
       ParentColor = False
@@ -86,7 +85,7 @@ object fmEditTable: TfmEditTable
     TitleStyle = tsNative
     OnTitleClick = DBGrid1TitleClick
   end
-  object Datasource1: TDatasource
+  object Datasource1: TDataSource
     DataSet = sqEditTable
     left = 472
     top = 48

+ 29 - 27
edittable.lrs

@@ -1,34 +1,36 @@
+{ This is an automatically generated lazarus resource file }
+
 LazarusResources.Add('TfmEditTable','FORMDATA',[
   'TPF0'#12'TfmEditTable'#11'fmEditTable'#4'Left'#3'Z'#2#6'Height'#3','#1#3'Top'
   +#3#148#1#5'Width'#3'8'#2#13'ActiveControl'#7#6'Panel1'#7'Caption'#6#11'fmEdi'
   +'tTable'#12'ClientHeight'#3','#1#11'ClientWidth'#3'8'#2#7'OnClose'#7#9'FormC'
   +'lose'#8'OnCreate'#7#10'FormCreate'#8'Position'#7#14'poScreenCenter'#10'LCLV'
-  +'ersion'#6#6'0.9.31'#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6'Height'#2'2'#3'Top'
+  +'ersion'#6#7'1.2.2.0'#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6'Height'#2'2'#3'Top'
   +#2#0#5'Width'#3'8'#2#5'Align'#7#5'alTop'#12'ClientHeight'#2'2'#11'ClientWidt'
-  +'h'#3'8'#2#11'ParentColor'#8#8'TabOrder'#2#0#7'OnClick'#7#11'Panel1Click'#0#6
-  +'TLabel'#6'Label1'#4'Left'#3#2#1#6'Height'#2#18#3'Top'#2#27#5'Width'#2'>'#7
-  +'Caption'#6#8'Record #'#11'ParentColor'#8#0#0#6'TLabel'#5'laPos'#4'Left'#3'F'
-  +#1#6'Height'#2#18#3'Top'#2#27#5'Width'#2#9#7'Caption'#6#1'0'#10'Font.Color'#4
-  +' +'#177#0#11'ParentColor'#8#10'ParentFont'#8#0#0#12'TDBNavigator'#12'DBNavi'
-  +'gator1'#4'Left'#2#8#6'Height'#2#25#3'Top'#2#21#5'Width'#3#241#0#10'BevelOut'
-  +'er'#7#6'bvNone'#29'ChildSizing.EnlargeHorizontal'#7#14'crsScaleChilds'#27'C'
-  +'hildSizing.EnlargeVertical'#7#14'crsScaleChilds'#28'ChildSizing.ShrinkHoriz'
-  +'ontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChi'
-  +'lds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSiz'
-  +'ing.ControlsPerLine'#2'd'#12'ClientHeight'#2#25#11'ClientWidth'#3#241#0#5'C'
-  +'olor'#4#207#218#221#0#10'DataSource'#7#11'Datasource1'#7'Options'#11#0#11'P'
-  +'arentColor'#8#8'TabOrder'#2#0#0#0#7'TBitBtn'#6'bbSave'#4'Left'#3#224#1#6'He'
-  +'ight'#2#30#3'Top'#2#15#5'Width'#2'K'#7'Caption'#6#4'Save'#7'OnClick'#7#11'b'
-  +'bSaveClick'#8'TabOrder'#2#1#0#0#0#7'TDBGrid'#7'DBGrid1'#4'Left'#2#0#6'Heigh'
-  +'t'#3#250#0#3'Top'#2'2'#5'Width'#3'8'#2#5'Align'#7#8'alClient'#5'Color'#7#8
-  +'clWindow'#7'Columns'#14#0#10'DataSource'#7#11'Datasource1'#10'FixedColor'#4
-  +#207#218#221#0#7'Options'#11#9'dgEditing'#8'dgTitles'#11'dgIndicator'#14'dgC'
-  +'olumnResize'#12'dgColumnMove'#10'dgColLines'#10'dgRowLines'#6'dgTabs'#21'dg'
-  +'AlwaysShowSelection'#15'dgConfirmDelete'#14'dgCancelOnExit'#19'dgHeaderHotT'
-  +'racking'#18'dgHeaderPushedLook'#17'dgAutoSizeColumns'#0#10'Scrollbars'#7#10
-  +'ssAutoBoth'#8'TabOrder'#2#1#10'TitleStyle'#7#8'tsNative'#12'OnTitleClick'#7
-  +#17'DBGrid1TitleClick'#0#0#11'TDatasource'#11'Datasource1'#7'DataSet'#7#11's'
-  +'qEditTable'#4'left'#3#216#1#3'top'#2'0'#0#0#9'TSQLQuery'#11'sqEditTable'#9
-  +'FieldDefs'#14#0#14'AutoCalcFields'#8#11'AfterScroll'#7#22'sqEditTableAfterS'
-  +'croll'#6'Params'#14#0#4'left'#3'e'#1#3'top'#2#20#0#0#0
+  +'h'#3'8'#2#11'ParentColor'#8#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#3
+  +#2#1#6'Height'#2#13#3'Top'#2#27#5'Width'#2'-'#7'Caption'#6#8'Record #'#11'Pa'
+  +'rentColor'#8#0#0#6'TLabel'#5'laPos'#4'Left'#3'F'#1#6'Height'#2#13#3'Top'#2
+  +#27#5'Width'#2#6#7'Caption'#6#1'0'#10'Font.Color'#4' +'#177#0#11'ParentColor'
+  +#8#10'ParentFont'#8#0#0#12'TDBNavigator'#12'DBNavigator1'#4'Left'#2#8#6'Heig'
+  +'ht'#2#25#3'Top'#2#21#5'Width'#3#241#0#10'BevelOuter'#7#6'bvNone'#29'ChildSi'
+  +'zing.EnlargeHorizontal'#7#14'crsScaleChilds'#27'ChildSizing.EnlargeVertical'
+  +#7#14'crsScaleChilds'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'
+  +#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7
+  +#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2'd'#12'C'
+  +'lientHeight'#2#25#11'ClientWidth'#3#241#0#5'Color'#4#207#218#221#0#10'DataS'
+  +'ource'#7#11'Datasource1'#7'Options'#11#0#11'ParentColor'#8#8'TabOrder'#2#0#0
+  +#0#7'TBitBtn'#6'bbSave'#4'Left'#3#224#1#6'Height'#2#30#3'Top'#2#15#5'Width'#2
+  +'K'#7'Caption'#6#4'Save'#7'OnClick'#7#11'bbSaveClick'#8'TabOrder'#2#1#0#0#0#7
+  +'TDBGrid'#7'DBGrid1'#4'Left'#2#0#6'Height'#3#250#0#3'Top'#2'2'#5'Width'#3'8'
+  +#2#5'Align'#7#8'alClient'#5'Color'#7#8'clWindow'#7'Columns'#14#0#10'DataSour'
+  +'ce'#7#11'Datasource1'#10'FixedColor'#4#207#218#221#0#7'Options'#11#9'dgEdit'
+  +'ing'#8'dgTitles'#11'dgIndicator'#14'dgColumnResize'#12'dgColumnMove'#10'dgC'
+  +'olLines'#10'dgRowLines'#6'dgTabs'#21'dgAlwaysShowSelection'#15'dgConfirmDel'
+  +'ete'#14'dgCancelOnExit'#19'dgHeaderHotTracking'#18'dgHeaderPushedLook'#17'd'
+  +'gAutoSizeColumns'#0#10'Scrollbars'#7#10'ssAutoBoth'#8'TabOrder'#2#1#10'Titl'
+  +'eStyle'#7#8'tsNative'#12'OnTitleClick'#7#17'DBGrid1TitleClick'#0#0#11'TData'
+  +'Source'#11'Datasource1'#7'DataSet'#7#11'sqEditTable'#4'left'#3#216#1#3'top'
+  +#2'0'#0#0#9'TSQLQuery'#11'sqEditTable'#9'FieldDefs'#14#0#14'AutoCalcFields'#8
+  +#11'AfterScroll'#7#22'sqEditTableAfterScroll'#6'Params'#14#0#4'left'#3'e'#1#3
+  +'top'#2#20#0#0#0
 ]);

+ 8 - 13
edittable.pas

@@ -26,7 +26,6 @@ type
     procedure DBGrid1TitleClick(Column: TColumn);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure FormCreate(Sender: TObject);
-    procedure Panel1Click(Sender: TObject);
     procedure sqEditTableAfterScroll(DataSet: TDataSet);
   private
     ibConnection: TIBConnection;
@@ -59,10 +58,6 @@ begin
   sqlTrans:= nil;
 end;
 
-procedure TfmEditTable.Panel1Click(Sender: TObject);
-begin
-end;
-
 procedure TfmEditTable.bbSaveClick(Sender: TObject);
 begin
   try
@@ -73,17 +68,18 @@ begin
       sqEditTable.ApplyUpdates;
     if SQLTrans.Active then
       SQLTrans.CommitRetaining;
-
   except
-  on e: exception do
-  begin
-    ShowMessage(e.Message);
-  end;
+    on e: exception do
+    begin
+      ShowMessage(e.Message);
+    end;
   end;
 end;
 
 procedure TfmEditTable.DBGrid1TitleClick(Column: TColumn);
 begin
+  //todo: implement sorting a la
+  //http://wiki.lazarus.freepascal.org/Grids_Reference_Page#Sorting_columns_or_rows_in_DBGrid_with_sort_arrows_in_column_header
 { if sqEditTable.IndexFieldNames = Column.Field.FieldName then
    sqEditTable.IndexFieldNames := Column.Field.FieldName //+ 'DESC'
  else
@@ -106,14 +102,13 @@ begin
     sqEditTable.DataBase:= ibConnection;
   end;
 
-  bbSave.Visible:= fmMain.ChangeQueryToBIDirectional(dbIndex, ATableName, sqEditTable);
+  bbSave.Visible:= fmMain.ChangeQueryToUpdatable(dbIndex, ATableName, sqEditTable);
   if not bbSave.Visible then
-    ShowMessage('Primary key is not found on this table. It can not be edited');
+    ShowMessage('Primary key is not found for this table. It can not be edited.');
 
   sqEditTable.Close;
   sqEditTable.SQL.Text:= 'select * from ' + ATableName;
   sqEditTable.Open;
-
 end;
 
 initialization

+ 9 - 28
main.pas

@@ -9,31 +9,11 @@ uses
   Controls, Graphics, Dialogs, Menus, ComCtrls, Reg, QueryWindow, Grids,
   ExtCtrls, Buttons, StdCtrls, TableManage;
 
-const
-  {$IFDEF LINUX}
-   Target = 'Linux';
-  {$ENDIF}
-
-  {$IFDEF WINDOWS}
-   Target = 'Win';
-  {$ENDIF}
-
-  {$IFDEF DARWIN}
-   Target = 'Mac';
-  {$ENDIF}
-
-  {$IFDEF BSD}
-   Target = 'BSD';
-  {$ENDIF}
+{$i turbocommon.inc}
 
-  {$ifDEF CPU32}
-   Arch = '32';
-  {$ENDIF}
-
-  {$ifDEF CPU64}
-   Arch = '64';
-  {$ENDIF}
+const
   // Some field types used in e.g. RDB$FIELDS
+  //todo: perhaps move to enumeration with fixed constant values
   BlobType = 261;
   CharType = 14;
   CStringType = 40; // probably null-terminated string used for UDFs
@@ -263,7 +243,8 @@ type
       OnCommitProcedure: TNotifyEvent = nil);
     procedure ViewTableFields(ATableName: string; dbIndex: Integer; AStringGrid: TStringGrid);
     procedure ShowIndicesManagement(AForm: TForm; DatabaseIndex: Integer; ATableName: string);
-    function ChangeQueryToBIDirectional(DatabaseIndex: Integer; ATableName: string; sqQuery: TSQLQuery): Boolean;
+    // Taking a normal query, try to make sure the UpdateSQL and InsertSQL work.
+    function ChangeQueryToUpdatable(DatabaseIndex: Integer; ATableName: string; sqQuery: TSQLQuery): Boolean;
     function GetTableNames(dbIndex: Integer): string;
     function CreateNewTrigger(dbIndex: Integer; ATableName: string; OnCommitProcedure: TNotifyEvent = nil): Boolean;
     function AddToSQLHistory(DatabaseTitle: string; SQLType, SQLStatement: string): Boolean;
@@ -4193,7 +4174,7 @@ begin
 end;
 
 
-function TfmMain.ChangeQueryToBIDirectional(DatabaseIndex: Integer; ATableName: string; sqQuery: TSQLQuery): Boolean;
+function TfmMain.ChangeQueryToUpdatable(DatabaseIndex: Integer; ATableName: string; sqQuery: TSQLQuery): Boolean;
 var
   KeyList, FieldsList: TStringList;
   PKName: string;
@@ -4202,6 +4183,7 @@ var
   WhereClause: string;
   ConstraintName: string;
 begin
+  Result:= false;
   SetConnection(DatabaseIndex);
 
   sqQuery.UpdateSQL.Clear;
@@ -4212,8 +4194,7 @@ begin
   FieldsList:= TStringList.Create;
   try
     PKName:= fmMain.GetPrimaryKeyIndexName(DatabaseIndex, ATableName, ConstraintName);
-    Result:= PKName <> '';
-    if Result then
+    if (PKName <> '') then
     begin
       sqPrimaryKey:= TSQLQuery.Create(nil);
       try
@@ -4231,7 +4212,6 @@ begin
             sqQuery.UpdateSQL.Add(',');
           end;
         end;
-
         sqQuery.UpdateSQL.Delete(sqQuery.UpdateSQL.Count - 1); // Delete last comma
 
         // Key where clause
@@ -4269,6 +4249,7 @@ begin
       finally
         sqPrimaryKey.Free;
       end;
+      Result:= true;
     end;
   finally
     KeyList.Free;

+ 1 - 24
update.pas

@@ -8,30 +8,7 @@ uses
   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
   StdCtrls, Buttons, ExtCtrls, httpsend, Process;
 
-const
-  {$IFDEF LINUX}
-   Target = 'Linux';
-  {$ENDIF}
-
-  {$IFDEF WINDOWS}
-   Target = 'Win';
-  {$ENDIF}
-
-  {$IFDEF DARWIN}
-   Target = 'Mac';
-  {$ENDIF}
-
-  {$IFDEF BSD}
-   Target = 'BSD';
-  {$ENDIF}
-
-  {$ifDEF CPU32}
-   Arch = '32';
-  {$ENDIF}
-
-  {$ifDEF CPU64}
-   Arch = '64';
-  {$ENDIF}
+{$i turbocommon.inc}
 
 type