diff --git a/components/tvplanit/examples/datastores/flex/access/project1.lpi b/components/tvplanit/examples/datastores/flex/access/project1.lpi index 90a062a9b..068d408c8 100644 --- a/components/tvplanit/examples/datastores/flex/access/project1.lpi +++ b/components/tvplanit/examples/datastores/flex/access/project1.lpi @@ -10,9 +10,6 @@ - - - diff --git a/components/tvplanit/examples/datastores/flex/access/unit1.lfm b/components/tvplanit/examples/datastores/flex/access/unit1.lfm index 20692b735..e746bbed6 100644 --- a/components/tvplanit/examples/datastores/flex/access/unit1.lfm +++ b/components/tvplanit/examples/datastores/flex/access/unit1.lfm @@ -3,7 +3,7 @@ object Form1: TForm1 Height = 686 Top = 169 Width = 980 - Caption = 'Form1' + Caption = 'VpFlexDatastore demo (MS Access via ODBC)' ClientHeight = 686 ClientWidth = 980 OnCreate = FormCreate @@ -193,7 +193,7 @@ object Form1: TForm1 DisplayOptions.CheckStyle = csCheck DisplayOptions.DueDateFormat = 'dd.MM.yyyy' DisplayOptions.ShowCompletedTasks = False - DisplayOptions.ShowAll = False + DisplayOptions.ShowAll = True DisplayOptions.ShowDueDate = True DisplayOptions.OverdueColor = clRed DisplayOptions.NormalColor = clBlack @@ -279,6 +279,7 @@ object Form1: TForm1 Color = clWindow Columns = <> DataSource = DsResources + Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgTabs, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgThumbTracking] TabOrder = 1 end end @@ -299,13 +300,13 @@ object Form1: TForm1 Options = [] TabOrder = 1 end - object Button1: TButton + object BtnApplyToPlanner: TButton Left = 264 Height = 25 Top = 8 Width = 120 Caption = 'Apply to planner' - OnClick = Button1Click + OnClick = BtnApplyToPlannerClick TabOrder = 2 end end @@ -325,7 +326,7 @@ object Form1: TForm1 top = 168 end object VpResourceEditDialog1: TVpResourceEditDialog - Version = 'v1.04' + Version = 'v1.05' DataStore = VpFlexDataStore1 Options = [] Placement.Position = mpCenter @@ -1270,6 +1271,9 @@ object Form1: TForm1 Precision = -1 Size = 100 end> + AfterEdit = QryGridAfterEdit + AfterInsert = QryGridAfterInsert + AfterPost = QryGridAfterPost Database = ODBCConnection1 Transaction = SQLTransaction1 SQL.Strings = ( @@ -1277,6 +1281,7 @@ object Form1: TForm1 ) Options = [sqoKeepOpenOnCommit, sqoAutoCommit] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 531 top = 171 @@ -1461,6 +1466,9 @@ object Form1: TForm1 Precision = -1 Size = 100 end> + AfterEdit = QryGridAfterEdit + AfterInsert = QryGridAfterInsert + AfterPost = QryGridAfterPost Database = ODBCConnection1 Transaction = SQLTransaction1 SQL.Strings = ( @@ -1468,6 +1476,7 @@ object Form1: TForm1 ) Options = [sqoKeepOpenOnCommit, sqoAutoCommit] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 531 top = 225 @@ -1475,6 +1484,9 @@ object Form1: TForm1 object QryAllEvents: TSQLQuery PacketRecords = -1 FieldDefs = <> + AfterEdit = QryGridAfterEdit + AfterInsert = QryGridAfterInsert + AfterPost = QryGridAfterPost Database = ODBCConnection1 Transaction = SQLTransaction1 SQL.Strings = ( @@ -1482,6 +1494,7 @@ object Form1: TForm1 ) Options = [sqoKeepOpenOnCommit, sqoAutoCommit] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 531 top = 285 @@ -1489,6 +1502,9 @@ object Form1: TForm1 object QryAllTasks: TSQLQuery PacketRecords = -1 FieldDefs = <> + AfterEdit = QryGridAfterEdit + AfterInsert = QryGridAfterInsert + AfterPost = QryGridAfterPost Database = ODBCConnection1 Transaction = SQLTransaction1 SQL.Strings = ( @@ -1496,6 +1512,7 @@ object Form1: TForm1 ) Options = [sqoKeepOpenOnCommit, sqoAutoCommit] Params = <> + UpdateMode = upWhereAll UsePrimaryKeyAsKey = False left = 531 top = 352 diff --git a/components/tvplanit/examples/datastores/flex/access/unit1.pas b/components/tvplanit/examples/datastores/flex/access/unit1.pas index eeece5914..7f8326c43 100644 --- a/components/tvplanit/examples/datastores/flex/access/unit1.pas +++ b/components/tvplanit/examples/datastores/flex/access/unit1.pas @@ -17,7 +17,7 @@ type TForm1 = class(TForm) BtnNewRes: TButton; BtnEditRes: TButton; - Button1: TButton; + BtnApplyToPlanner: TButton; DsAllResources: TDataSource; DsAllContacts: TDataSource; DsAllEvents: TDataSource; @@ -60,10 +60,13 @@ type VpWeekView1: TVpWeekView; procedure BtnNewResClick(Sender: TObject); procedure BtnEditResClick(Sender: TObject); - procedure Button1Click(Sender: TObject); + procedure BtnApplyToPlannerClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure PageControl1Change(Sender: TObject); + procedure QryGridAfterPost(DataSet: TDataSet); + procedure QryGridAfterInsert(DataSet: TDataSet); + procedure QryGridAfterEdit(DataSet: TDataSet); procedure TabControl1Change(Sender: TObject); private { private declarations } @@ -97,9 +100,29 @@ begin VpResourceEditDialog1.Execute; end; -procedure TForm1.Button1Click(Sender: TObject); +procedure TForm1.BtnApplyToPlannerClick(Sender: TObject); +var + resID: Integer; begin + // Remember id of currently selected resource + resID := VpFlexDatastore1.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... + VpFlexDatastore1.Connected := false; + VpFlexDatastore1.Connected := true; + + // Return to previous resource + VpFlexDatastore1.Resources.ClearResources; VpFlexDatastore1.Load; + VpFlexDatastore1.ResourceID := resID; + + // Don't forget to re-activate the grid's datasources + QryAllResources.Open; + QryAllEvents.Open; + QryAllContacts.Open; + QryAllTasks.Open; end; // Setting up the database connection and the datastore. Preselect a resource @@ -159,10 +182,38 @@ begin if PageControl1.PageIndex = 2 then TabControl1Change(nil); end; +procedure TForm1.QryGridAfterEdit(DataSet: TDataSet); +begin + BtnApplyToPlanner.Enabled := false; +end; + +procedure TForm1.QryGridAfterInsert(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; begin + DsAllResources.Dataset.Close; + DsAllContacts.Dataset.Close; + DsAllEvents.Dataset.Close; + DsAllTasks.Dataset.Close; + case TabControl1.TabIndex of 0: Grid.Datasource := DsAllResources; 1: Grid.Datasource := DsAllContacts; @@ -170,6 +221,7 @@ begin 3: Grid.Datasource := DsAllTasks; end; DBNavigator.Datasource := Grid.Datasource; + Grid.Datasource.Dataset.Open; for i:=0 to Grid.Columns.Count-1 do Grid.Columns[i].Width := 100;; end;