tvplanit: Fix "Apply to planner" button in FlexDatastore demo for Access.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5193 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-09-20 19:48:47 +00:00
parent f64f85da78
commit 3bf6a1a100
3 changed files with 77 additions and 11 deletions

View File

@ -10,9 +10,6 @@
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>
</General>
<VersionInfo>
<StringTable ProductVersion=""/>
</VersionInfo>
<BuildModes Count="1">
<Item1 Name="Default" Default="True"/>
</BuildModes>

View File

@ -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

View File

@ -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;