Drag and Drop Access Violation (JIT Pipeline)
Apparently I'm missing some required event handler or property setting
in the creation of our JIT Pipeline. Dragging and dropping a field from
the available listing results in an Access Violation somewhere in
TraCodeManager.EditorDragDropEvent (for which I don't have the source).
FPipeLine.SkipWhenNoRecords := false;
FPipeLine.UserName := 'JITPipeline1';
FPipeLine.OnGetDataSetName := ppJITPipeline1GetDataSetName;
FPipeLine.OnGetFieldValue := ppJITPipeline1GetFieldValue;
FPipeLine.RecordCount := 1;
FPipeLine.RangeEnd := reCount;
FPipeLine.RangeEndCount := 1;
in the creation of our JIT Pipeline. Dragging and dropping a field from
the available listing results in an Access Violation somewhere in
TraCodeManager.EditorDragDropEvent (for which I don't have the source).
FPipeLine.SkipWhenNoRecords := false;
FPipeLine.UserName := 'JITPipeline1';
FPipeLine.OnGetDataSetName := ppJITPipeline1GetDataSetName;
FPipeLine.OnGetFieldValue := ppJITPipeline1GetFieldValue;
FPipeLine.RecordCount := 1;
FPipeLine.RangeEnd := reCount;
FPipeLine.RangeEndCount := 1;
This discussion has been closed.
Comments
addition to the pipeline, which I've generalized before..
for x := 0 to (num - 1) do begin
Feeld := TppField.Create(FPipeLine);
Feeld.Name := SectionList[x];
Feeld.FieldName := 'FieldName' + IntToStr(x);
Feeld.FieldAlias := 'FieldAlias' + IntToStr(x);
Feeld.FieldLength := 10;
Feeld.DisplayWidth := 10;
Feeld.Position := num;
Feeld.Alignment := taLeftJustify;
FPipeLine.AddField(Feeld);
end
Are there event handlers or values that are known to be necessary for a
JIT Pipeline which, if not present, cause an AV when dragging and
dropping? This is in Delphi XE with RB 17.01 build 65. Thank you.
Below is a modified version of the code that works in my testing.
Tips:
1. To add a Field assign Field.DataPipeline. This will establish the proper
parent/child relationship. (This pattern is used throughout RB. For example,
assign Component.Band to add an object to a band, assign Band.Report etc).
Directly calling DataPipeline.AddField will result in AV's.
2. Calling JITPipeline.DefineField(aFieldName, aDataType, aFieldLength) is
an optional way to add fields.
3. In Delphi the form/datamodule typically 'owns' the Report, DataPipeline,
and subcomponents. In my code I used TppJITPipeline.Create(Self) and
TppField.Create(Self).
4. I don't think assigning the Field.Position is needed.
var
liIndex: Integer;
liField: Integer;
lsFieldName: string;
lField: TppField;
begin
// create JitPipeline
FJITPipeline := TppJITPipeline.Create(Self);
FJITPipeline.UserName := 'JITPipelineTest';
FJITPipeline.RecordCount := 1;
FJITPipeline.RangeEnd := reCount;
FJITPipeline.RangeEndCount := 1;
// add fields using JITPipline.DefineField(aFieldName, aDataType,
aFieldLength);
for liIndex := 0 to 4 do
begin
lsFieldName := 'FieldName' + IntToStr(liIndex);
FJITPipeline.DefineField(lsFieldName, dtString, 10);
end;
// add fields by assigning Field.Datapipeline
for liIndex := 5 to 9 do
begin
lsFieldName := 'FieldName' + IntToStr(liIndex);
lField := TppField.Create(Self);
lField.Name := lsFieldName;
lField.FieldName := lsFieldName;
lField.FieldAlias := 'FieldAlias' + IntToStr(liIndex);
lField.FieldLength := 10;
lField.DisplayWidth := 10;
lField.Alignment := taLeftJustify;
lField.DataPipeline := FJITPipeline;
end
Best regards,
-
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com