下面的程序在执行时会提示:coinitialize未调用。请大师帮忙找出问题所在?另ADO+SQL SERVER能否响应多线程?多谢多谢!
procedure TForm1.Button5Click(Sender: TObject);
var test1: tdataput;
test2: tdataput;
test3: tdataput;
i: integer;
node1, subnode1, subnode2, subnode3: ttreenode;
begin
{node1 := form1.treeview1.Items.Add(nil, '所有检查表');
node1.ImageIndex := 6;
node1.SelectedIndex := 5; }
test1 := tdataput.create(1);
test2 := tdataput.create(2); end;
procedure TDATAPUT.Execute; //多线程类的执行函数。
var
node1, subnode1, subnode2, subnode3: ttreenode;
subnode4, subnode5, subnode6: ttreenode;
subnode7, subnode8, subnode9: ttreenode;
begin
case fdata_no of 1:
begin
//showmessage(inttostr(fdata_no));
form1.adoquery1.sql.clear;
form1.adoquery1.sql.add('select top 5 * from qt_project_unit where upro_id not in (select top 0 upro_id from qt_project_unit)');
form1.adoquery1.close;
form1.adoquery1.Open;
while not form1.adoquery1.eof do
begin
subnode1 := form1.treeview1.Items.AddChildobject(node1, form1.adoquery1.FieldValues['upro_name'], nil);
form1.adoquery2.sql.clear;
form1.adoquery2.SQL.add('select spro_name,spro_id from qt_project_subsect,qt_project_unit');
form1.adoquery2.SQL.Add('where qt_project_unit.upro_id=qt_project_subsect.upro_id');
form1.adoquery2.sql.Add('and qt_project_subsect.upro_id=' + '''' + form1.adoquery1.Fieldbyname('upro_id').asstring + '''');
subnode1.ImageIndex := 2;
subnode1.SelectedIndex := 3;
form1.adoquery2.Open;
while not form1.adoquery2.Eof do
begin
subnode2 := form1.treeview1.Items.AddChildobject(subnode1, form1.adoquery2.FieldValues['spro_name'], nil);
subnode2.SelectedIndex := 1;
subnode2.ImageIndex := 0;
form1.adoquery3.sql.clear;
form1.adoquery3.SQL.add('select qt_project_item.ipro_name from qt_project_item,qt_project_subsect');
form1.adoquery3.SQL.Add('where qt_project_subsect.spro_id=qt_project_item.spro_id');
form1.adoquery3.sql.Add('and qt_project_item.spro_id=' + '''' + form1.adoquery2.Fieldbyname('spro_id').asstring + '''');
form1.adoquery3.Open; while not form1.adoquery3.Eof do
begin
subnode3 := form1.treeview1.Items.AddChildobject(subnode2, form1.adoquery3.FieldValues['ipro_name'], nil);
subnode3.ImageIndex := 4;
subnode3.SelectedIndex := 7;
form1.adoquery3.Next;
end;
form1.adoquery2.Next;
end;
form1.adoquery1.Next;
end;
end; 2:
begin
//showmessage(inttostr(fdata_no));
form1.adoquery6.sql.clear;
form1.adoquery6.sql.add('select top 5 * from qt_project_unit where upro_id not in (select top 5 upro_id from qt_project_unit)');
form1.adoquery6.close;
form1.adoquery6.Open;
while not form1.adoquery6.eof do
begin
subnode4 := form1.treeview1.Items.AddChildobject(node1, form1.adoquery1.FieldValues['upro_name'], nil);
form1.adoquery7.sql.clear;
form1.adoquery7.SQL.add('select spro_name,spro_id from qt_project_subsect,qt_project_unit');
form1.adoquery7.SQL.Add('where qt_project_unit.upro_id=qt_project_subsect.upro_id');
form1.adoquery7.sql.Add('and qt_project_subsect.upro_id=' + '''' + form1.adoquery1.Fieldbyname('upro_id').asstring + '''');
subnode4.ImageIndex := 2;
subnode4.SelectedIndex := 3;
form1.adoquery7.Open;
while not form1.adoquery7.Eof do
begin
subnode5 := form1.treeview1.Items.AddChildobject(subnode4, form1.adoquery2.FieldValues['spro_name'], nil);
subnode5.SelectedIndex := 1;
subnode5.ImageIndex := 0;
form1.adoquery8.sql.clear;
form1.adoquery8.SQL.add('select qt_project_item.ipro_name from qt_project_item,qt_project_subsect');
form1.adoquery8.SQL.Add('where qt_project_subsect.spro_id=qt_project_item.spro_id');
form1.adoquery8.sql.Add('and qt_project_item.spro_id=' + '''' + form1.adoquery2.Fieldbyname('spro_id').asstring + '''');
form1.adoquery8.Open;
while not form1.adoquery8.Eof do
begin
subnode6 := form1.treeview1.Items.AddChildobject(subnode5, form1.adoquery3.FieldValues['ipro_name'], nil);
subnode6.ImageIndex := 4;
subnode6.SelectedIndex := 7;
form1.adoquery8.Next;
end;
form1.adoquery7.Next;
end;
form1.adoquery6.Next;
end;
end;
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
var test1: tdataput;
test2: tdataput;
test3: tdataput;
i: integer;
node1, subnode1, subnode2, subnode3: ttreenode;
begin
{node1 := form1.treeview1.Items.Add(nil, '所有检查表');
node1.ImageIndex := 6;
node1.SelectedIndex := 5; }
test1 := tdataput.create(1);
test2 := tdataput.create(2); end;
procedure TDATAPUT.Execute; //多线程类的执行函数。
var
node1, subnode1, subnode2, subnode3: ttreenode;
subnode4, subnode5, subnode6: ttreenode;
subnode7, subnode8, subnode9: ttreenode;
begin
case fdata_no of 1:
begin
//showmessage(inttostr(fdata_no));
form1.adoquery1.sql.clear;
form1.adoquery1.sql.add('select top 5 * from qt_project_unit where upro_id not in (select top 0 upro_id from qt_project_unit)');
form1.adoquery1.close;
form1.adoquery1.Open;
while not form1.adoquery1.eof do
begin
subnode1 := form1.treeview1.Items.AddChildobject(node1, form1.adoquery1.FieldValues['upro_name'], nil);
form1.adoquery2.sql.clear;
form1.adoquery2.SQL.add('select spro_name,spro_id from qt_project_subsect,qt_project_unit');
form1.adoquery2.SQL.Add('where qt_project_unit.upro_id=qt_project_subsect.upro_id');
form1.adoquery2.sql.Add('and qt_project_subsect.upro_id=' + '''' + form1.adoquery1.Fieldbyname('upro_id').asstring + '''');
subnode1.ImageIndex := 2;
subnode1.SelectedIndex := 3;
form1.adoquery2.Open;
while not form1.adoquery2.Eof do
begin
subnode2 := form1.treeview1.Items.AddChildobject(subnode1, form1.adoquery2.FieldValues['spro_name'], nil);
subnode2.SelectedIndex := 1;
subnode2.ImageIndex := 0;
form1.adoquery3.sql.clear;
form1.adoquery3.SQL.add('select qt_project_item.ipro_name from qt_project_item,qt_project_subsect');
form1.adoquery3.SQL.Add('where qt_project_subsect.spro_id=qt_project_item.spro_id');
form1.adoquery3.sql.Add('and qt_project_item.spro_id=' + '''' + form1.adoquery2.Fieldbyname('spro_id').asstring + '''');
form1.adoquery3.Open; while not form1.adoquery3.Eof do
begin
subnode3 := form1.treeview1.Items.AddChildobject(subnode2, form1.adoquery3.FieldValues['ipro_name'], nil);
subnode3.ImageIndex := 4;
subnode3.SelectedIndex := 7;
form1.adoquery3.Next;
end;
form1.adoquery2.Next;
end;
form1.adoquery1.Next;
end;
end; 2:
begin
//showmessage(inttostr(fdata_no));
form1.adoquery6.sql.clear;
form1.adoquery6.sql.add('select top 5 * from qt_project_unit where upro_id not in (select top 5 upro_id from qt_project_unit)');
form1.adoquery6.close;
form1.adoquery6.Open;
while not form1.adoquery6.eof do
begin
subnode4 := form1.treeview1.Items.AddChildobject(node1, form1.adoquery1.FieldValues['upro_name'], nil);
form1.adoquery7.sql.clear;
form1.adoquery7.SQL.add('select spro_name,spro_id from qt_project_subsect,qt_project_unit');
form1.adoquery7.SQL.Add('where qt_project_unit.upro_id=qt_project_subsect.upro_id');
form1.adoquery7.sql.Add('and qt_project_subsect.upro_id=' + '''' + form1.adoquery1.Fieldbyname('upro_id').asstring + '''');
subnode4.ImageIndex := 2;
subnode4.SelectedIndex := 3;
form1.adoquery7.Open;
while not form1.adoquery7.Eof do
begin
subnode5 := form1.treeview1.Items.AddChildobject(subnode4, form1.adoquery2.FieldValues['spro_name'], nil);
subnode5.SelectedIndex := 1;
subnode5.ImageIndex := 0;
form1.adoquery8.sql.clear;
form1.adoquery8.SQL.add('select qt_project_item.ipro_name from qt_project_item,qt_project_subsect');
form1.adoquery8.SQL.Add('where qt_project_subsect.spro_id=qt_project_item.spro_id');
form1.adoquery8.sql.Add('and qt_project_item.spro_id=' + '''' + form1.adoquery2.Fieldbyname('spro_id').asstring + '''');
form1.adoquery8.Open;
while not form1.adoquery8.Eof do
begin
subnode6 := form1.treeview1.Items.AddChildobject(subnode5, form1.adoquery3.FieldValues['ipro_name'], nil);
subnode6.ImageIndex := 4;
subnode6.SelectedIndex := 7;
form1.adoquery8.Next;
end;
form1.adoquery7.Next;
end;
form1.adoquery6.Next;
end;
end;
end;
end;
2.不要在线程中直接访问窗体控件,这样使不安全的,用Synchronize函数。