diff --git a/source/helpers.pas b/source/helpers.pas index 6c31214b..7570d4e2 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -857,7 +857,7 @@ begin ExportStatusMsg(Node, Grid.RootNodeCount, S.Size); tmp := ' ' + CRLF; // Ensure basic data is loaded - Mainform.EnsureChunkLoaded(Grid, Node); + Mainform.EnsureChunkLoaded(Grid, Node, True); for i:=0 to Length(GridData.Columns) - 1 do begin // Skip hidden key columns if not (coVisible in Grid.Header.Columns[i].Options) then @@ -950,7 +950,7 @@ begin ExportStatusMsg(Node, Grid.RootNodeCount, S.Size); tmp := ''; // Ensure basic data is loaded - Mainform.EnsureChunkLoaded(Grid, Node); + Mainform.EnsureChunkLoaded(Grid, Node, True); for i:=0 to Grid.Header.Columns.Count-1 do begin // Skip hidden key columns if not (coVisible in Grid.Header.Columns[i].Options) then @@ -1020,7 +1020,7 @@ begin ExportStatusMsg(Node, Grid.RootNodeCount, S.Size); tmp := #9'' + CRLF; // Ensure basic data is loaded. - Mainform.EnsureChunkLoaded(Grid, Node); + Mainform.EnsureChunkLoaded(Grid, Node, True); for i:=0 to Grid.Header.Columns.Count-1 do begin // Skip hidden key columns if not (coVisible in Grid.Header.Columns[i].Options) then @@ -1099,7 +1099,7 @@ begin Delete(tmp, Length(tmp)-1, 2); tmp := tmp + ') VALUES ('; // Ensure basic data is loaded. - Mainform.EnsureChunkLoaded(Grid, Node); + Mainform.EnsureChunkLoaded(Grid, Node, True); for i:=0 to Grid.Header.Columns.Count-1 do begin // Skip hidden key columns if not (coVisible in Grid.Header.Columns[i].Options) then diff --git a/source/main.pas b/source/main.pas index 782f3dc3..72e3f482 100644 --- a/source/main.pas +++ b/source/main.pas @@ -576,7 +576,7 @@ type procedure ShowTableData(table: WideString); function EnsureFullWidth(Grid: TBaseVirtualTree; Column: TColumnIndex; Node: PVirtualNode): Boolean; procedure EnsureNodeLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; WhereClause: WideString); - procedure EnsureChunkLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode); + procedure EnsureChunkLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; FullWidth: Boolean = False); procedure DiscardNodeData(Sender: TVirtualStringTree; Node: PVirtualNode); procedure viewdata(Sender: TObject); procedure LogSQL(msg: WideString = ''; comment: Boolean = true ); @@ -840,8 +840,9 @@ type FQueryGridResult : TGridResult; FDataGridSelect : WideStrings.TWideStringList; FDataGridSort : TOrderColArray; - DataGridCurrentSelect : WideString; - DataGridCurrentFilter : WideString; + DataGridCurrentSelect, + DataGridCurrentFullSelect, + DataGridCurrentFilter, DataGridCurrentSort : WideString; property Delimiter: String read FDelimiter write SetDelimiter; @@ -3462,7 +3463,8 @@ end; procedure TMainForm.viewdata(Sender: TObject); var i : Integer; - select_base : WideString; + select_base, + select_base_full, select_from : WideString; sl_query : TWideStringList; KeyCols : WideStrings.TWideStringList; @@ -3623,6 +3625,7 @@ begin // Prepare SELECT statement select_base := 'SELECT '; + select_base_full := select_base; // Selected columns if (FDataGridSelect.Count = 0) or (FDataGridSelect.Count = FSelectedTableColumns.RecordCount) then begin tbtnDataColumns.ImageIndex := 107; @@ -3660,6 +3663,7 @@ begin end else begin select_base := select_base + ' ' + Mask(ColName) + ','; end; + select_base_full := select_base_full + ' ' + Mask(ColName) + ','; InitColumn(ColName, FSelectedTableColumns.FieldByName('Type').AsString, ShowIt); end; FSelectedTableColumns.Next; @@ -3667,11 +3671,13 @@ begin debug('mem: browse column initialization complete.'); // Cut last comma select_base := copy( select_base, 1, Length(select_base)-1 ); + select_base_full := copy( select_base_full, 1, Length(select_base_full)-1 ); // Include db name for cases in which dbtree is switching databases and pending updates are in process select_from := ' FROM '+mask(ActiveDatabase)+'.'+mask(SelectedTable); // Final SELECT segments DataGridCurrentSelect := select_base + select_from; + DataGridCurrentFullSelect := select_base_full + select_from; DataGridCurrentFilter := SynMemoFilter.Text; if Length(FDataGridSort) > 0 then DataGridCurrentSort := ComposeOrderClause(FDataGridSort) @@ -7460,7 +7466,7 @@ begin end; end; -procedure TMainForm.EnsureChunkLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode); +procedure TMainForm.EnsureChunkLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; FullWidth: Boolean = False); var res: PGridResult; start, limit: Cardinal; @@ -7475,7 +7481,10 @@ begin start := Node.Index - (Node.Index mod GridMaxRows); limit := TVirtualStringTree(Sender).RootNodeCount - start; if limit > GridMaxRows then limit := GridMaxRows; - query := DataGridCurrentSelect; + if FullWidth then + query := DataGridCurrentFullSelect + else + query := DataGridCurrentSelect; if DataGridCurrentFilter <> '' then query := query + ' WHERE ' + DataGridCurrentFilter; if DataGridCurrentSort <> '' then query := query + ' ORDER BY ' + DataGridCurrentSort; query := query + WideFormat(' LIMIT %d, %d', [start, limit]);