mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Fix AV when displaying data of a table which has 0 rows. Mainly caused by range differences of VT.RootNodeCount (Cardinal) and TDBQuery.RecordCount (Int64).
This commit is contained in:
@ -289,8 +289,8 @@ type
|
|||||||
function ComposeOrderClause(Cols: TOrderColArray): String;
|
function ComposeOrderClause(Cols: TOrderColArray): String;
|
||||||
procedure DeInitializeVTNodes(Sender: TBaseVirtualTree);
|
procedure DeInitializeVTNodes(Sender: TBaseVirtualTree);
|
||||||
function ListIndexByRegExpr(List: TStrings; Expression: String): Integer;
|
function ListIndexByRegExpr(List: TStrings; Expression: String): Integer;
|
||||||
function FindNode(VT: TVirtualStringTree; idx: Cardinal; ParentNode: PVirtualNode): PVirtualNode;
|
function FindNode(VT: TVirtualStringTree; idx: Int64; ParentNode: PVirtualNode): PVirtualNode;
|
||||||
procedure SelectNode(VT: TVirtualStringTree; idx: Cardinal; ParentNode: PVirtualNode=nil); overload;
|
procedure SelectNode(VT: TVirtualStringTree; idx: Int64; ParentNode: PVirtualNode=nil); overload;
|
||||||
procedure SelectNode(VT: TVirtualStringTree; Node: PVirtualNode); overload;
|
procedure SelectNode(VT: TVirtualStringTree; Node: PVirtualNode); overload;
|
||||||
function GetVTSelection(VT: TVirtualStringTree): TStringList;
|
function GetVTSelection(VT: TVirtualStringTree): TStringList;
|
||||||
procedure SetVTSelection(VT: TVirtualStringTree; Captions: TStringList);
|
procedure SetVTSelection(VT: TVirtualStringTree; Captions: TStringList);
|
||||||
@ -1618,27 +1618,31 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function FindNode(VT: TVirtualStringTree; idx: Cardinal; ParentNode: PVirtualNode): PVirtualNode;
|
function FindNode(VT: TVirtualStringTree; idx: Int64; ParentNode: PVirtualNode): PVirtualNode;
|
||||||
var
|
var
|
||||||
Node: PVirtualNode;
|
Node: PVirtualNode;
|
||||||
begin
|
begin
|
||||||
// Helper to find a node by its index
|
// Helper to find a node by its index
|
||||||
Result := nil;
|
Result := nil;
|
||||||
if Assigned(ParentNode) then
|
// Grid.RootNodeCount is unfortunately Cardinal, not Int64.
|
||||||
Node := VT.GetFirstChild(ParentNode)
|
// Work around that as long as VT does not change that.
|
||||||
else
|
if (idx >= Low(Cardinal)) or (idx <= High(Cardinal)) then begin
|
||||||
Node := VT.GetFirst;
|
if Assigned(ParentNode) then
|
||||||
while Assigned(Node) do begin
|
Node := VT.GetFirstChild(ParentNode)
|
||||||
if Node.Index = idx then begin
|
else
|
||||||
Result := Node;
|
Node := VT.GetFirst;
|
||||||
break;
|
while Assigned(Node) do begin
|
||||||
|
if Node.Index = idx then begin
|
||||||
|
Result := Node;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
Node := VT.GetNextSibling(Node);
|
||||||
end;
|
end;
|
||||||
Node := VT.GetNextSibling(Node);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure SelectNode(VT: TVirtualStringTree; idx: Cardinal; ParentNode: PVirtualNode=nil); overload;
|
procedure SelectNode(VT: TVirtualStringTree; idx: Int64; ParentNode: PVirtualNode=nil); overload;
|
||||||
var
|
var
|
||||||
Node: PVirtualNode;
|
Node: PVirtualNode;
|
||||||
begin
|
begin
|
||||||
|
@ -4373,7 +4373,7 @@ begin
|
|||||||
if not SynMemoFilter.Focused then
|
if not SynMemoFilter.Focused then
|
||||||
vt.SetFocus;
|
vt.SetFocus;
|
||||||
|
|
||||||
DataGridFocusedNodeIndex := Min(DataGridFocusedNodeIndex, vt.RootNodeCount-1);
|
DataGridFocusedNodeIndex := Min(DataGridFocusedNodeIndex, Int64(vt.RootNodeCount)-1);
|
||||||
SelectNode(vt, DataGridFocusedNodeIndex);
|
SelectNode(vt, DataGridFocusedNodeIndex);
|
||||||
for i:=0 to vt.Header.Columns.Count-1 do begin
|
for i:=0 to vt.Header.Columns.Count-1 do begin
|
||||||
if vt.Header.Columns[i].Text = DataGridFocusedColumnName then begin
|
if vt.Header.Columns[i].Text = DataGridFocusedColumnName then begin
|
||||||
|
Reference in New Issue
Block a user