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;