TAdoQuery

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

ChPuK
Сообщения: 28
Зарегистрирован: 25 фев 2005, 08:40
Откуда: Tashkent
Контактная информация:

передо мной была поставлена задача, написать программу, для перегона информации из MS SQL в MySQL
все хорошо получаеться, НО, на серваке MS SQL я забираю информацию с таблицы, которую рисует процедура.
Проблема в том что время выполнения данной процедуры иногда достигает минуты и более

Как сделать кнопку которая будет выполнять отмену выполнения запроса SQL
ChPuK
Сообщения: 28
Зарегистрирован: 25 фев 2005, 08:40
Откуда: Tashkent
Контактная информация:

или хотя бы как сделать, чтобы во время выполнения данного запроса программа не подвисала
пробовал ProcessMessages, не помогает совсем...
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

Делай ProcessMessages в теле процедуры или пускай ее в потоке TThread
ChPuK
Сообщения: 28
Зарегистрирован: 25 фев 2005, 08:40
Откуда: Tashkent
Контактная информация:

в теле какой процедуры?

процедура о которой я написал, что формирует таблицу, она написана на MS SQL
т.е. находиться на стороне сервера, а на MS SQL процедур типо ProcessMessages нету!
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

>Делай ProcessMessages в теле процедуры
>в теле какой процедуры?
я попутал... думал, что процедура в делфе
Работай через потоки
ChPuK
Сообщения: 28
Зарегистрирован: 25 фев 2005, 08:40
Откуда: Tashkent
Контактная информация:

поточнее опиши плиз
просто давно уже за дельфей не сидел
все забыл....
ChPuK
Сообщения: 28
Зарегистрирован: 25 фев 2005, 08:40
Откуда: Tashkent
Контактная информация:

по поводу работы с TThread
наскоко я знаю это многопоточный класс

но как им пользоваться я понятия не имею
ChPuK
Сообщения: 28
Зарегистрирован: 25 фев 2005, 08:40
Откуда: Tashkent
Контактная информация:

блин
прочел информацию по поводу TThread но не понял точно что и как
посмотрел пример от дельфи
тоже не до конца понял

если можете дайте пример по задаче:
есть процедура, при выполнении которой программа зависает на минуту другую, но никакие ProcessMessages не помогут, т.к. там нету циклов
нужно сделать так, чтобы при выполнении данной процедуры программа не висела
это нужно сделать посредством TThread

только прошу не нужно давать ссылки на источники, я их прочел, везде одно и тоже и не нужно говорить посмотреть пример, тоже прочел
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

маленький классик для запуска любой процедуры в отдельном потоке:

Код: Выделить всё

type
  TProcType = procedure;
  TMyThread = class(TThread)
    ProcToRun: TProcType;
    procedure Execute; override;
    constructor Create(Proc: TProcType); reintroduce;
    destructor Destroy; override;
  end;
...
procedure TMyThread.Execute;
begin
  ProcToRun;
  Destroy;
end;
constructor TMyThread.Create(Proc: TProcType);
begin
  ProcToRun := Proc;
  inherited Create(True);
end;
destructor TMyThread.Destroy;
begin
  if Handle <> 0 then TerminateThread(Handle, 0);
  inherited;
end;
Привер вызова... процедура LockIt выводит на форму в label числа от 0 до 20000.
Запускается при нажатии кнопки 1, убивается кнопкой 2 в любой момент. Приложение не подвисает.

Код: Выделить всё

procedure LockIt;
var i: Integer;
begin
  i := 0;
  While i < 20000 do
  begin inc(i); Form1.Label1.Caption := IntToStr(i); end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyT := TMyThread.Create(LockIt);
  MyT.Resume;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  if MyT <> nil then FreeAndNil(MyT);
end;
С уважением, Lost Angel...
ChPuK
Сообщения: 28
Зарегистрирован: 25 фев 2005, 08:40
Откуда: Tashkent
Контактная информация:

большое спасиоб :)

p.s. блин какже трудно из веба в по возвращаться :(
Ответить