There is a code
for j := 0 to mForm.ComponentCount - 1 do
if mForm.Components[j] is TableFormInfo then
//try
//table := nil;
//tempFmtable := nil;
//tForm := nil;
tForm := mForm.Components[j] as TableFormInfo;
table := TTableSpec(DBSchema.Tables.FindComponent(tForm.Table));
tempFmtable := TfmTableData.Create(MainWindow);
tempFmtable.Name := tForm.Name;
tempFmtable.tname := tForm.Table;
//tempFmtable.Caption := Utf8ToAnsi(table.Description);
tempFmtable.Left := tForm.LeftValue;
tempFmtable.Top := tForm.TopValue;
tempFmtable.Height := tForm.HeightValue;
tempFmtable.Width := tForm.WidthValue;
tempFmTable.IBQuery1.SQL.Clear;
tempFmtable.IBQuery1.SQL.Add('select * from ' + table.Name);
tempFmtable.IBQuery1.Open;
tempFmtable.DragKind:=dkDock;
tempFmtable.DragMode:=dmAutomatic;
i := 0;
querystr:='select ';
while i <= tForm.ComponentCount - 1 do
begin
if tForm.Components[i] is TableFieldInfo then
begin
//querystr:='select ';
//field := nil;
//tempFmtable.Show;
field := tForm.Components[i] as TableFieldInfo;
tempFmtable.Caption:=tForm.Caption;
tempFmtable.DBGrid1.Columns[i].FieldName := field.FieldNameValue;
tempFmtable.DBGrid1.Columns[i].Title.Caption := field.DescriptionValue;
tempFmtable.DBGrid1.Columns[i].Index := field.IndexValue;
tempFmtable.DBGrid1.Columns[i].Visible := field.VisibleValue;
tempFmtable.DBGrid1.Columns[i].Width:=field.WidthValue;
//tempFmtable.CheckListBox1.Items.Add(field.Description);
//tempFmtable.CheckListBox1.Checked[i] := field.Visible;
//tempFmtable.Show;
if field.VisibleValue then querystr:=querystr+ConvertNameField(field.FieldNameValue)+', ';
end;
//inc(i);
if tForm.Components[i] is SettingsFormInfo then
begin
//sForm:=nil;
sForm:=tForm.Components[i] as SettingsFormInfo;
tempsettings := TfmSettings.Create(tempFmtable);
tempsettings.Caption:=sForm.Caption;
//tempsettings := TfmSettings.Create(tempFmtable);
tempsettings.Name := sForm.Name;
tempsettings.Left := sForm.LeftValue;
tempsettings.Top := sForm.TopValue;
tempsettings.Height := sForm.HeightValue;
tempsettings.Width := sForm.WidthValue;
tempSettings.CheckListBox1.Clear;
//for k:=0 to sForm.ComponentCount-1 do
k:=0;
while k<=sForm.ComponentCount-1 do
begin
if sForm.Components[k] is ItemCheckListBoxInfo then
begin
//item:=nil;
item:=sForm.Components[k] as ItemCheckListBoxInfo;
tempsettings.CheckListBox1.Items.Add(item.TextValue);
tempsettings.CheckListBox1.Checked[item.IndexValue]:=item.CheckedValue
end;
if sForm.Components[k] is LabelInfo then
begin
//labelobj:=nil;
labelobj:=sForm.Components[k] as LabelInfo;
tempsettings.Label1.Caption:=labelobj.CaptionValue;
end;
if sForm.Components[k] is EditInfo then
begin
//edit:=nil;
edit:=sForm.Components[k] as EditInfo;
TEdit(tempsettings.FindComponent(edit.Name)).Text:=edit.TextValue;
end;
inc(k);
end;
if ((tForm.Components[i] is SettingsFormInfo) and (i=tForm.ComponentCount-1) and (k=sForm.ComponentCount)) then tempsettings.Show;
end;
//inc(i);
//if ((tForm.Components[i] is SettingsFormInfo) and (i=tForm.ComponentCount-1) and (k=sForm.ComponentCount)) then tempsettings.Show;
inc(i);
end;
{for i := 0 to table.Fields.ComponentCount - 1 do
begin
descr := Utf8ToAnsi(((table.Fields.Components[i]) as TFieldSpec).Description);
tempFmtable.CheckListBox1.Items.Add(descr);
tempFmtable.DBGrid1.Columns[i].Title.Caption := descr;
tempFmtable.CheckListBox1.Checked[i] := true;
end; }
Delete(querystr, Length(querystr)-1, 1);
querystr:=querystr+'from '+table.Name;
tempFmTable.IBQuery1.SQL.Clear;
tempFmtable.IBQuery1.SQL.Add(querystr);
tempFmtable.IBQuery1.Open;
for s := 0 to tForm.ComponentCount-1 do
begin
if tForm.Components[s] is TableFieldInfo then
begin
//field := nil;
//tempFmtable.Show;
field := tForm.Components[s] as TableFieldInfo;
if field.VisibleValue then
begin
for t := 0 to tempFmtable.DBGrid1.Columns.Count-1 do
begin
if ((tempFmTable.DBGrid1.Columns[t].Title.Caption=field.DescriptionValue) and (tempFmtable.DBGrid1.Columns[t].FieldName=field.FieldNameValue)) then
tempFmTable.DBGrid1.Columns[t].Width:=field.WidthValue;
end;
end;
end;
end;
tempFmtable.Show;
getting into condition by means of deserialization. I want to mark that before tForm variable use in line
table := TTableSpec(DBSchema.Tables.FindComponent(tForm.Table));
it is initialized in the previous line
tForm := mForm.Components[j] as TableFormInfo;
But despite this warning occurs during assembly
[dcc32 Warning] SerAndDeser.pas(298): W1036 Variable 'tForm' might not have been initialized
Why? How to get rid of the warning, without losing the functionality of the application?
Your indentation is all awry. I think this is what is confusing you. If you indent the code properly, it looks like this:
I think it’s clear to see now that the code that follows the
forloop can execute withouttFormhaving been assigned.It’s clear from the indentation in the question that you intended the long swathe of code that follows the assignment to be inside the
ifstatement. But the compiler obeys the code rather than the indentation.You are going to need to add some
begin/endpairs to your code. Personally I never use the single statement syntax – all my blocks are compound blocks wrapped withbegin/endpairs. In my view the single statement syntax is one of the great errors of Pascal. And indeed C.I used the built-in code formatter to straighten out your indentation. That would probably be a useful tool that could help you to repair the code. And it could let you get a handle on how the indentation might be laid out correctly.
Finally, as I have said to you at least once before, do not use
tFormas a variable name. This hides the type namedTForm. TheTprefix is reserved for types. You should call your form variableForm, or perhapsLFormwith theLindicating that it is a local variable.