From f64f85da78011287e872d1f72b8f354d05c03e4a Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Tue, 20 Sep 2016 12:11:11 +0000 Subject: [PATCH] tvplanit: Activate "Apply to planner" button in sqlite3 datastore demo. Minor changes in some datastore demo project options. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5192 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../examples/datastores/fb/project1.lpi | 3 -- .../examples/datastores/sqlite3/project1.lpi | 3 -- .../examples/datastores/sqlite3/unit1.lfm | 29 ++++++++--- .../examples/datastores/sqlite3/unit1.pas | 49 ++++++++++++++++++- .../examples/datastores/zeos/project1.lpi | 5 ++ 5 files changed, 75 insertions(+), 14 deletions(-) diff --git a/components/tvplanit/examples/datastores/fb/project1.lpi b/components/tvplanit/examples/datastores/fb/project1.lpi index 16d12d9ae..8a182d2f2 100644 --- a/components/tvplanit/examples/datastores/fb/project1.lpi +++ b/components/tvplanit/examples/datastores/fb/project1.lpi @@ -10,9 +10,6 @@ - - - diff --git a/components/tvplanit/examples/datastores/sqlite3/project1.lpi b/components/tvplanit/examples/datastores/sqlite3/project1.lpi index e4adbac99..cc95b68be 100644 --- a/components/tvplanit/examples/datastores/sqlite3/project1.lpi +++ b/components/tvplanit/examples/datastores/sqlite3/project1.lpi @@ -10,9 +10,6 @@ - - - diff --git a/components/tvplanit/examples/datastores/sqlite3/unit1.lfm b/components/tvplanit/examples/datastores/sqlite3/unit1.lfm index 782c9ed77..186d8018d 100644 --- a/components/tvplanit/examples/datastores/sqlite3/unit1.lfm +++ b/components/tvplanit/examples/datastores/sqlite3/unit1.lfm @@ -50,9 +50,9 @@ object Form1: TForm1 Height = 652 Top = 34 Width = 980 - ActivePage = TabSheet1 + ActivePage = TabSheet3 Align = alClient - TabIndex = 0 + TabIndex = 2 TabOrder = 1 OnChange = PageControl1Change object TabSheet1: TTabSheet @@ -270,12 +270,13 @@ object Form1: TForm1 Options = [] TabOrder = 0 end - object Button1: TButton + object BtnApplyToPlanner: TButton Left = 264 Height = 25 Top = 8 Width = 120 Caption = 'Apply to planner' + OnClick = BtnApplyToPlannerClick TabOrder = 1 end object TabControl1: TTabControl @@ -323,7 +324,7 @@ object Form1: TForm1 top = 264 end object VpResourceEditDialog1: TVpResourceEditDialog - Version = 'v1.04' + Version = 'v1.05' DataStore = VpSqlite3Datastore1 Options = [] Placement.Position = mpCenter @@ -474,6 +475,9 @@ object Form1: TForm1 Precision = -1 Size = 100 end> + AfterEdit = QryGridAfterEdit + AfterInsert = QryGridAfterEdit + AfterPost = QryGridAfterPost Database = SQLite3Connection1 Transaction = SQLTransaction1 SQL.Strings = ( @@ -481,6 +485,7 @@ object Form1: TForm1 ) Options = [sqoKeepOpenOnCommit, sqoAutoCommit] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 560 top = 160 @@ -665,13 +670,17 @@ object Form1: TForm1 Precision = -1 Size = 100 end> + AfterEdit = QryGridAfterEdit + AfterInsert = QryGridAfterEdit + AfterPost = QryGridAfterPost Database = SQLite3Connection1 Transaction = SQLTransaction1 SQL.Strings = ( 'SELECT * FROM Contacts' ) - Options = [sqoKeepOpenOnCommit, sqoAutoCommit] + Options = [sqoKeepOpenOnCommit] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 560 top = 214 @@ -679,13 +688,17 @@ object Form1: TForm1 object QryAllEvents: TSQLQuery PacketRecords = -1 FieldDefs = <> + AfterEdit = QryGridAfterEdit + AfterInsert = QryGridAfterEdit + AfterPost = QryGridAfterPost Database = SQLite3Connection1 Transaction = SQLTransaction1 SQL.Strings = ( 'SELECT * FROM Events' ) - Options = [sqoKeepOpenOnCommit, sqoAutoCommit] + Options = [sqoKeepOpenOnCommit, sqoAutoApplyUpdates] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 560 top = 274 @@ -693,6 +706,9 @@ object Form1: TForm1 object QryAllTasks: TSQLQuery PacketRecords = -1 FieldDefs = <> + AfterEdit = QryGridAfterPost + AfterInsert = QryGridAfterEdit + AfterPost = QryGridAfterPost Database = SQLite3Connection1 Transaction = SQLTransaction1 SQL.Strings = ( @@ -700,6 +716,7 @@ object Form1: TForm1 ) Options = [sqoKeepOpenOnCommit, sqoAutoCommit] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 560 top = 341 diff --git a/components/tvplanit/examples/datastores/sqlite3/unit1.pas b/components/tvplanit/examples/datastores/sqlite3/unit1.pas index b3d520f04..69476821a 100644 --- a/components/tvplanit/examples/datastores/sqlite3/unit1.pas +++ b/components/tvplanit/examples/datastores/sqlite3/unit1.pas @@ -17,7 +17,7 @@ type TForm1 = class(TForm) BtnNewRes: TButton; BtnEditRes: TButton; - Button1: TButton; + BtnApplyToPlanner: TButton; DBNavigator: TDBNavigator; DsAllContacts: TDataSource; DsAllEvents: TDataSource; @@ -50,10 +50,13 @@ type VpSqlite3Datastore1: TVpSqlite3Datastore; VpTaskList1: TVpTaskList; VpWeekView1: TVpWeekView; + procedure BtnApplyToPlannerClick(Sender: TObject); procedure BtnNewResClick(Sender: TObject); procedure BtnEditResClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure PageControl1Change(Sender: TObject); + procedure QryGridAfterEdit(DataSet: TDataSet); + procedure QryGridAfterPost(DataSet: TDataSet); procedure TabControl1Change(Sender: TObject); private { private declarations } @@ -76,6 +79,31 @@ const { TForm1 } +procedure TForm1.BtnApplyToPlannerClick(Sender: TObject); +var + resID: Integer; +begin + // Remember id of currently selected resource + resID := VpSqlite3Datastore1.ResourceID; + + // Since the datastore does not know about the changes made in the grid + // we have to force the datastore to re-read everything. + // Maybe there's better way... + VpSqlite3Datastore1.Connected := false; + VpSqlite3Datastore1.Connected := true; + + // Return to previous resource + VpSqlite3Datastore1.Resources.ClearResources; + VpSqlite3Datastore1.Load; + VpSqlite3Datastore1.ResourceID := resID; + + // Don't forget to re-activate the grid's datasources + QryAllResources.Open; + QryAllEvents.Open; + QryAllContacts.Open; + QryAllTasks.Open; +end; + // Adds a new resource procedure TForm1.BtnNewResClick(Sender: TObject); begin @@ -93,6 +121,8 @@ end; // in the resource combo. procedure TForm1.FormCreate(Sender: TObject); begin + PageControl1.ActivePageIndex := 0; + try SQLite3Connection1.DatabaseName := AppendPathDelim(Application.Location) + DBFILENAME; SQLTransaction1.Action := caCommit; @@ -119,10 +149,25 @@ begin if PageControl1.PageIndex = 2 then TabControl1Change(nil); end; +procedure TForm1.QryGridAfterEdit(DataSet: TDataSet); +begin + BtnApplyToPlanner.Enabled := false; +end; + +procedure TForm1.QryGridAfterPost(DataSet: TDataSet); +begin + // Note: UpdateMode must be upWhereAll! Otherwise there's an error "No update + // query specified and failed to generate one. (No fields for inclusion in + // where statement found)". + // http://wiki.freepascal.org/SqlDBHowto#How_does_SqlDB_send_the_changes_to_the_database_server.3F + TSQLQuery(Dataset).ApplyUpdates; + SQLTransaction1.CommitRetaining; + BtnApplyToPlanner.Enabled := true; +end; + procedure TForm1.TabControl1Change(Sender: TObject); var i: Integer; - Datasource: TDataSource; begin DsAllResources.Dataset.Close; DsAllContacts.Dataset.Close; diff --git a/components/tvplanit/examples/datastores/zeos/project1.lpi b/components/tvplanit/examples/datastores/zeos/project1.lpi index c00e6ce77..7478b37c7 100644 --- a/components/tvplanit/examples/datastores/zeos/project1.lpi +++ b/components/tvplanit/examples/datastores/zeos/project1.lpi @@ -65,6 +65,11 @@ + + + + +