Добрый день.
Возникла проблема, возможно не совсем по теме сообщества, но счастья попытаю, потому что уже не знаю у кого спросить.
Задание: разработка приложения для параллельной обработки запросов. Delphi, SQL
Начала делать параллельность с помощью класса Tthread, но ничего хорошего из этого пока не вышло, т.к. выдает ошибку, точнее - подчеркиевает строку и не дает запуск программы.
Запросы в отдельности работают.
и еще такой вопрос. Никогда не работала с блокировкой, но видимо придется. Как ее делать(а точнее не делать) с помощью переменной фазы (изначально = 0 , реагирует на нажатие).
собственно код
unit Unit8;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, StdCtrls, ExtCtrls, Grids, DBGrids ,ShellApi, dblookup,
CheckLst;
type
TMyThread1 = class(TThread)
private
{ Private declarations }
protected
procedure DoWork;
procedure Execute; override;
end;
TMyThread2 = class(TThread)
private
{ Private declarations }
protected
procedure DoWork;
procedure Execute; override;
end;
TForm8 = class(TForm)
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
DBLookupComboBox3: TDBLookupComboBox;
DBLookupComboBox4: TDBLookupComboBox;
DBLookupComboBox5: TDBLookupComboBox;
CheckListBox1: TCheckListBox;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form8: TForm8;
a: string;
T1 : TMyThread1;
T2 : TMyThread2;
implementation
uses Unit2;
{$R *.dfm}
procedure TMyThread1.Execute;
begin
{Пока процесс не прервали, выполняем DoWork}
while not Terminated do
Synchronize(DoWork);
end;
procedure TMyThread2.Execute;
begin
{Пока процесс не прервали, выполняем DoWork}
while not Terminated do
Synchronize(DoWork);
end;
procedure TMyThread1.DoWork;
begin
{Пытаемся победить второй процесс :-)}
Form8.CheckListBox1.Checked := True; ошибка тут
end;
procedure TMyThread2.DoWork;
begin
{Пытаемся победить первый процесс :-)}
Form8.CheckListBox1.Checked:= False;
end;
procedure TForm8.Button3Click(Sender: TObject);
begin
if Button3.Caption = 'Stop' then begin
{Прерываем оба процесса}
T1.Terminate;
T2.Terminate;
{Изменяем название кнопки}
Button3.Caption := 'Start';
{Выходим из процедуры}
Exit;
end;
{Создаем и сразу запускаем два процесса}
T1 := TMyThread1.Create(False);
T2 := TMyThread2.Create(False);
{Здесь можно поэкспериментировать с приоритетами:
T1.Priority := tpLowest;
T2.Priority := tpHighest;
}
{Переименовываем кнопку}
Button3.Caption := 'Stop';
end;
procedure TForm8.Button1Click(Sender: TObject);
begin
with DataModule2.ADOQuery1 do
begin close;
SQL.Clear;
datamodule2.adoquery1.Active:=false;
case CheckListBox1.ItemIndex of
0: begin
datamodule2.ADOquery1.Close;
datamodule2.ADOquery1.SQl.Clear;
datamodule2.ADOquery1.sql.add('SELECT s.Familia as [Фамилия] ,s.Imya as [Имя] , s.Otchestvo as [Отчество] , s.Telefon as [Телефон], g.fakultet as [Факультет], g.Kafedra as [Кафедра] ');
datamodule2.ADOquery1.sql.add('FROM Gruppi as g, Studenti as s');
datamodule2.ADOquery1.sql.add('WHERE g.fakultet = :myparam');
datamodule2.ADOquery1.Parameters.ParamByName('myparam').Value := dblookupcombobox4.text ;
datamodule2.ADOquery1.Open;
end;
1: begin
datamodule2.ADOquery1.Close;
datamodule2.ADOquery1.SQl.Clear;
datamodule2.ADOquery1.sql.add('select d.specializaciya as [Специализация],d.familia as [Фамилия], d.imya as [Имя], d.otchestvo as [Отчество], d.telefon as [Телефон]');
datamodule2.ADOquery1.sql.add('from Prepod as d') ;
datamodule2.ADOquery1.sql.add('where d.specializaciya = :myparam');
datamodule2.ADOquery1.Parameters.ParamByName('myparam').Value := dblookupcombobox5.text ;
datamodule2.ADOquery1.Open;
end;
2: begin
datamodule2.ADOquery1.Close;
datamodule2.ADOquery1.SQl.Clear;
datamodule2.ADOquery1.sql.add( 'select g.kurator as [Куратор], g.Kafedra as [Кафедра],g.fakultet as[Факультет],g.№_gruppi as [№группы]');
datamodule2.ADOquery1.sql.add('from Gruppi as g');
datamodule2.ADOquery1.sql.add('where g.№_gruppi = :myparam');
datamodule2.ADOquery1.Parameters.ParamByName('myparam').Value := dblookupcombobox1.text ;
datamodule2.ADOquery1.Open;
end;
3: begin
datamodule2.ADOquery1.Close;
datamodule2.ADOquery1.SQl.Clear;
datamodule2.ADOquery1.sql.add( 'select p.nazvanie as [Название], p.Tip as [Тип предмета], p.obem as [Количество часов] ');
datamodule2.ADOquery1.sql.add('from Predmeti as p');
datamodule2.ADOquery1.sql.add('where p.Tip = :myparam');
datamodule2.ADOquery1.Parameters.ParamByName('myparam').Value := dblookupcombobox2.text ;
datamodule2.ADOquery1.Open;
end;
4: begin
datamodule2.ADOquery1.Close;
datamodule2.ADOquery1.SQl.Clear;
datamodule2.ADOquery1.sql.add('select p.Prepod as [N], d.familia as [Фамилия], p.nazvanie as [Предмет], p.obem as [Кол-во часов], p.Semestri as [Семестры], p.obem/p.Semestri as [Нагрузка] ');
datamodule2.ADOquery1.sql.add('from Prepod d inner join Predmeti p on p.Prepod=d.kod_prepod ');
datamodule2.ADOquery1.sql.Add('where d.kod_prepod = :myparam') ;
datamodule2.ADOquery1.Parameters.ParamByName('myparam').Value := dblookupcombobox3.KeyValue;
datamodule2.ADOquery1.Open;
end;
end;
end;
end;
procedure TForm8.Button2Click(Sender: TObject);
//тут html отчет, на работу не влияет
end.
очень надеюсь на вашу помощь, спасибо
Добрый день.
Возникла проблема, возможно не совсем по теме сообщества, но счастья попытаю, потому что уже не знаю у кого спросить.
Задание: разработка приложения для параллельной обработки запросов. Delphi, SQL
Начала делать параллельность с помощью класса Tthread, но ничего хорошего из этого пока не вышло, т.к. выдает ошибку, точнее - подчеркиевает строку и не дает запуск программы.
Запросы в отдельности работают.
и еще такой вопрос. Никогда не работала с блокировкой, но видимо придется. Как ее делать(а точнее не делать) с помощью переменной фазы (изначально = 0 , реагирует на нажатие).
собственно код
очень надеюсь на вашу помощь, спасибо
Возникла проблема, возможно не совсем по теме сообщества, но счастья попытаю, потому что уже не знаю у кого спросить.
Задание: разработка приложения для параллельной обработки запросов. Delphi, SQL
Начала делать параллельность с помощью класса Tthread, но ничего хорошего из этого пока не вышло, т.к. выдает ошибку, точнее - подчеркиевает строку и не дает запуск программы.
Запросы в отдельности работают.
и еще такой вопрос. Никогда не работала с блокировкой, но видимо придется. Как ее делать(а точнее не делать) с помощью переменной фазы (изначально = 0 , реагирует на нажатие).
собственно код
очень надеюсь на вашу помощь, спасибо