Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

вопрос про поток.   Найти похожие ветки 

 
vegarulez ©   (2008-09-29 10:31) [0]

не могу понять...
при нажатии button1, на котором висит запуск потока - не работает.
выдаёт ошибку при  Connected:=true; к БД...
если же нажать button2, а потом button1 - всё работает... ничего не понимаю...  подскажите где собака порылась?

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, SendMail, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
 Thread_SendMail:Tmsgsend;
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Thread_SendMail:=Tmsgsend.Create(False);
Thread_SendMail.priority:=tpNormal;
end;

// далее копия потока, вызываемого по батону1 забиндинная на батон2... для проверки.

procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
i,j:integer;
smsg: array[0..4] of string;
myzconection: TZConnection;
myzquery: TZQuery;
myList:TstringList;
begin
 //FormMain.sendmail:=1;
 myList:=TStringList.Create;
 j:=0;
 myzconection:= TZConnection.Create(nil);
 myzquery:= TZQuery.Create(nil);
 With myzconection do
  try
   Database:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\a.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False";
   Protocol:="ado";
   Loginprompt:=false;
   try
    Connected:=true;
     except
     on E: Exception do
      MessageDlg("Error" +#10#13+ E.Message +#10#13+ inttostr(E.HelpContext), mtWarning,[mbOk], 0);
    end;
  With myzquery do
   try
   Connection:=myzconection;
   Sql.Text:="Select `id`,`c_date`,`check_id`,`oper_num`,`c_sum` from `payment` where `sflag`=0  and `flag`=0 ORDER BY id ASC";
   open;
       While not Eof do
        begin
         for j:=0 to FieldCount-1 do
          smsg[j]:=Fields[j].AsString;
          myList.Append(FormatDateTime("DD.MM.YYYY",myzquery.Fields[1].Asdatetime)+#9+FormatDateTime("hh:nn:ss",myzquery.Fields[1].Asdatetime)+#9+myzquery.Fields[2].AsString+#9+myzquery.Fields[3].AsString+#9+StringReplace(myzquery.Fields[4].AsString, ",", ".", [rfReplaceAll])+#13);
          Form1.Memo1.Text:=Mylist.Text;
          Next;
        end;

    except on E: Exception do
    Begin
     MessageDlg("Error #3" +#10#13+ E.Message +#10#13+ inttostr(E.HelpContext), mtWarning,[mbOk], 0);
    End
   end;
  finally
   myList.Free;
   myzconection.Disconnect;
   myzquery.Free;
   myzconection.Free;
  end;
end;

end.


далее код потока

unit SendMail;

interface

uses
 Classes, SysUtils, QDialogs, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection;

type
 Tmsgsend = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
 end;

implementation
uses  unit1;

procedure Tmsgsend.Execute;
var
s:string;
i,j:integer;
smsg: array[0..4] of string;
myzconection: TZConnection;
myzquery: TZQuery;
myList:TstringList;
begin

 //FormMain.sendmail:=1;
try
 myList:=TStringList.Create;
 j:=0;
 myzconection:= TZConnection.Create(nil);
 myzquery:= TZQuery.Create(nil);
 With myzconection do
  try
   Database:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\a.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False";
   Protocol:="ado";
   Loginprompt:=false;
   Connected:=true;
   except on E: Exception do
      MessageDlg("Error" +#10#13+ E.Message +#10#13+ inttostr(E.HelpContext), mtWarning,[mbOk], 0);
   end;
  With myzquery do
   try
   Connection:=myzconection;
   Sql.Text:="Select `id`,`c_date`,`check_id`,`oper_num`,`c_sum` from `payment` where `sflag`=0  and `flag`=0 ORDER BY id ASC";
   open;
       While not Eof do
        begin
         for j:=0 to FieldCount-1 do
          smsg[j]:=Fields[j].AsString;
          myList.Append(FormatDateTime("DD.MM.YYYY",myzquery.Fields[1].Asdatetime)+#9+FormatDateTime("hh:nn:ss",myzquery.Fields[1].Asdatetime)+#9+myzquery.Fields[2].AsString+#9+myzquery.Fields[3].AsString+#9+StringReplace(myzquery.Fields[4].AsString, ",", ".", [rfReplaceAll])+#13);
          Form1.Memo1.Text:=Mylist.Text;
          Next;
        end;

    except on E: Exception do
    Begin
     MessageDlg("Error #3" +#10#13+ E.Message +#10#13+ inttostr(E.HelpContext), mtWarning,[mbOk], 0);
    End
   end;
  finally
   myList.Free;
   myzconection.Disconnect;
   myzquery.Free;
   myzconection.Free;
  end;
end;

end.


 
Сергей М. ©   (2008-09-29 10:37) [1]


> выдаёт ошибку при  Connected:=true; к БД


И текст этой ошибки, наверно, вот такой - "Выдаю ошибку !"

Я угадал ?


> Form1.Memo1.Text:=Mylist.Text;


В доп.потоке это недопустимо.


 
Ega23 ©   (2008-09-29 10:38) [2]

Зачем поток? Зачем создавать и убивать коннект каждый раз?


 
vegarulez ©   (2008-09-29 10:48) [3]


> Сергей М. ©   (29.09.08 10:37) [1]


Access violation at address 004DBE9 in module `Project1.exe`.Read of address 00000000


> > Form1.Memo1.Text:=Mylist.Text;

в юзес он прописан. делать так можно - но не желательно.
З.Ы. про Синхронизацию знаю.


> Ega23 ©   (29.09.08 10:38) [2]


ну потому как нужно к базе конектится и отрываться потом от неё, чтобы на ней не было конектов. Так надо.


 
Сергей М. ©   (2008-09-29 10:53) [4]


> vegarulez ©   (29.09.08 10:48) [3]
>
>


Если AV возник именно на строчке

With myzconection do
 try
..
  Connected:=true //<- этой

то это говорит об одном: переменная myzconection равна nil.


 
vegarulez ©   (2008-09-29 10:57) [5]

Да именно на ней.
но почему после нажатия на батон2 - поток начинает фунцикулировать нормально...
Или я что-то не понимаю или одно из двух... я ничего не могу понять... в чём может быть трабла?


 
sniknik ©   (2008-09-29 11:08) [6]

> Зачем поток?
не нужен, и даже асинхронное выполнение под вопросом... лучше оптимизировать обработку данных в плане скорости, чем "прятать" ее длительное выполнение в другом потоке.
> Зачем создавать и убивать коннект каждый раз?
велосипед.

> в юзес он прописан. делать так можно - но не желательно.
всего лишь нежелательно? бред. это суицид для потока.

> ну потому как нужно к базе конектится и отрываться потом от неё, чтобы на ней не было конектов. Так надо.
TADOConnection.KeepConnection =  false
и все, автоматический "отконект" при не активности (все рекордсеты закрыты), и автоматический же переконект при активности.

понятно, что у тебя другие, видимо "навороченные" компоненты, но судя по тому что используется
> Protocol:="ado";
и исходя из того что "навороченное" должно поддерживать весь функционал того что замещает... должно быть.


 
sniknik ©   (2008-09-29 11:12) [7]

> то это говорит об одном: переменная myzconection равна nil.
а может еще о том, что что-то используемое в myzconection равно nil... например парент, по аналогии с клиентским датасетом, которому тоже необходим парент для нормальной работы.

можно положить тот же код вне потока, с привязкой к форме, и проверить.


 
vegarulez ©   (2008-09-29 11:16) [8]

использую Access - он по ADO работает.
С чего это вдруг суицид для него? выплюнуть текст в мемо? В чём суицид?
Данных для обработки - мало. В чём суицид?


> TADOConnection.KeepConnection =  false

использую Zeos компоненты так что это мимо.

ближе к телу вопроса плиз, если есть что сказать по сути.


 
Vlad Oshin ©   (2008-09-29 11:17) [9]

а если так написать?
CoInitializeEx (NIL, COINIT_APARTMENTTHREADED);
                         COINIT_MULTITHREADED
перед
TADOConnection.Create(nil)


 
vegarulez ©   (2008-09-29 11:17) [10]


> можно положить тот же код вне потока, с привязкой к форме,
>  и проверить.


Я же сказал по буттон2 он лежит. Ты читать умеешь?


 
Vlad Oshin ©   (2008-09-29 11:18) [11]


> TZConnection.Create(nil);

всмысле,
ну, раз "ado"


 
vegarulez ©   (2008-09-29 11:18) [12]


> TADOConnection.Create(nil)


Да неиспользую я ADO... Zeos юзаю!!!

народ повнимательнее плз....


 
Сергей М. ©   (2008-09-29 11:21) [13]


> Да именно на ней


Как ты это узнал -  методом научного тыка или при пошаговой трассировке ?


> выплюнуть текст в мемо?


А назем его туда "плевать" ? Только лишь для отладки или есть тайный резон ?
Если для отладки и при этом ты в курсе про требования по синхронизации с осн.потоком, то почему игнорируешь эти требования ?


 
Сергей М. ©   (2008-09-29 11:22) [14]


> именно на ней


Или IDE сама тебе пальцем ткула именно в эту строчку ?


 
vegarulez ©   (2008-09-29 11:23) [15]


>  Только лишь для отладки


да. поэтому игнорирую.

При пошагавой по F8.


 
vegarulez ©   (2008-09-29 11:28) [16]

2 Сергей

проверь, что всё пашет после нажатия буттона2 даже без синхронизации. почему только после запуска приложения и нажатия первым буттон1 - он сругнётся - нажмёшь на 2-ой и всё кул.... первый начнёт работать... Вот что меня вводит в откровенный ступор.


 
sniknik ©   (2008-09-29 11:34) [17]

> В чём суицид?
vcl не потокобезопасен, обмен между потоками напрямую не допустим, и т.д.
второй мой пост, фактически про тоже самое в отношении зеос-а, возможно и он тоже сделан "чисто vcl-ным".

> использую Zeos компоненты так что это мимо.
это я понял сразу, потому и написал про аналог. логика блин. в ado есть, зеос использует ado, но круче него (иначе смысл?), а раз так то должен поддерживать такую малость (а вообще весь функционал + чтото дополнительное, свое).


 
Сергей М. ©   (2008-09-29 11:35) [18]

Т.е. ты ставишь брейкпойнт

procedure Tmsgsend.Execute;
var
..
myzconection: TZConnection;
..
begin
..
myzconection:= TZConnection.Create(nil);
..
With myzconection do
..
  Connected:=true; //  <-- сюда


ловишь его, делаешь шаг и тут же, на этом шагу, имеешь AV с упомянутым адресом 004DBE9 ? И при этом IDE указывает именно на эту же (а не на какую-либо иную) строчку ?

И если брейкпойн поставить

With myzconection //  <-- здесь

то отладчик показывает заведомо корректный (не nil) адрес объекта класса TZConnection ?


 
Сергей М. ©   (2008-09-29 11:37) [19]


> всё пашет после нажатия буттона2


На начхать на твой "буттон2" !

Я пытаюсь выяснить логику твоего мышления при отладке треда, а не при танцах с бубном вокруг буттонов ..


 
Vlad Oshin ©   (2008-09-29 11:41) [20]

я может не в свое лезу, но CoInitializeEx пробовали? Не получилось?
Может буттон1 не инициализирует COM library что надо для ADO, и что бывает если создавать динамически компаненты. А буттон2 инициализирует, после чего и буттон1 начинает работать.


 
sniknik ©   (2008-09-29 11:41) [21]

> Вот что меня вводит в откровенный ступор.
вот так работает?
procedure TForm1.Button1Click(Sender: TObject);
var
myzconection: TZConnection;
begin
myzconection:= TZConnection.Create(nil);
Application.ProcessMessages
Thread_SendMail:=Tmsgsend.Create(False);
Thread_SendMail.priority:=tpNormal;
myzconection.Free;
end;

если да, то если Free; сразу после создания. (проверить, нужна инициализация или внутренний обьект)

> Да неиспользую я ADO... Zeos юзаю!!!
> народ повнимательнее плз....
зато зеос его использует, а ado нужен coinitialize() на каждый поток.


 
vegarulez ©   (2008-09-29 11:43) [22]

Сергей М. ©   (29.09.08 11:37) [19]

пробегаю по потоку F8 брек поинт стоит в самом начале. После того как прохожу Connected:=true; - Велетаю на except. Вот вся логика.


 
sniknik ©   (2008-09-29 11:47) [23]

MessageDlg тоже vcl-ная функция, со всеми последствиями.


 
Сергей М. ©   (2008-09-29 11:50) [24]


> Вот вся логика


Ну что тут сказать ? Логика дилетанта)
Перед шагом следовало проверить, что myzconectionкак минимум  <> nil


 
sniknik ©   (2008-09-29 11:51) [25]

>       While not Eof do
>        begin
>         for j:=0 to FieldCount-1 do
>          smsg[j]:=Fields[j].AsString;
         > myList.Append(FormatDateTime("DD.MM.YYYY",myzquery.Fields[1].Asdatetime)+#9+FormatDateTime("hh:nn:ss",myzquery.Fields[1].Asdatetime)+#9+myzquery.Fields[2].AsString+#9+myzquery.Fields[3].AsString+#9+StringReplace(myzquery.Fields[4].AsString, ",", ".", [rfReplaceAll])+#13);
>          Form1.Memo1.Text:=Mylist.Text;
>          Next;
>        end;


зачем тебе менять Memo1.Text столько раз сколько записей? здесь тормозов столько что...
поток не нужен.


 
Сергей М. ©   (2008-09-29 11:54) [26]


> После того как прохожу Connected:=true; - Велетаю на except


При этом ты должен был получить текст сообщения об исключении, начинающийся со слова "Error".

В [3] это слово не фигурирует, что наводит на мысль, что исключение вызвано вовсе не этой строчкой.

Что говорит IDE об адресе 004DBE9 ?


 
vegarulez ©   (2008-09-29 11:55) [27]


> sniknik ©   (29.09.08 11:47) [23]

Да при чём тут это то?


> sniknik ©   (29.09.08 11:41) [21]


procedure TForm1.Button1Click(Sender: TObject);
var
myzconection: TZConnection;
begin
 myzconection:= TZConnection.Create(nil);
 With myzconection do
  try
   Database:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\tu.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False";
   Protocol:="ado";
   Loginprompt:=false;
   Connected:=true;
  finally
   myzconection.Disconnect;
   myzconection.Free;
  end;

Thread_SendMail:=Tmsgsend.Create(False);
Thread_SendMail.priority:=tpNormal;
end;


ну канеш так работает. тоже самое и содержится в буттоне2. Я их специально разнёс в разные баттоны - чтобы показать разницу.
Почему сразу не раблотает!!!! Вот в чём вопрос? Почему нужно сначало из главного потока сделать конексед=тру, иначе дочерний не может почему-то. Вот в чём вопрос. не нужно рассказов про vcl. На этот вопрос кто-нибудь может ответить?


 
Сергей М. ©   (2008-09-29 11:57) [28]


> sniknik ©   (29.09.08 11:51) [25]


Все просто - автор пытается пользовать отладчик, но при этом ему не доверяет и дублирует отладочную информацию кривыми "плевками" в Мемо)


 
vegarulez ©   (2008-09-29 11:57) [29]

Сергей М. ©   (29.09.08 11:54) [26]

Ну я же не совсем валенок ))) Ну есть там это слово - оно создано рукотворно - я его опустил просто чтоб не заморачивать вас лишним словом. Есть канешно Error - далее перенос каретки - как и полагается. Всё как я и написал в программе.


 
Сергей М. ©   (2008-09-29 11:59) [30]


> vegarulez ©   (29.09.08 11:57) [29]


Ответы на [24], [26] будут ?


 
vegarulez ©   (2008-09-29 12:00) [31]

Сергей М. ©   (29.09.08 11:57) [28]
мл.....
вы что издеваетесь что ле??????
Я про одно вы про другое... да при чём тут мемо и т.п. ....
главный вопрос кратко:

ПОЧЕМУ:
при
procedure TForm1.Button1Click(Sender: TObject);
var
myzconection: TZConnection;
begin
myzconection:= TZConnection.Create(nil);
With myzconection do
 try
  Database:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\tu.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False";
  Protocol:="ado";
  Loginprompt:=false;
  Connected:=true;
 finally
  myzconection.Disconnect;
  myzconection.Free;
 end;

Thread_SendMail:=Tmsgsend.Create(False);
Thread_SendMail.priority:=tpNormal;
end;


Не РАВНО

procedure TForm1.Button1Click(Sender: TObject);
begin

Thread_SendMail:=Tmsgsend.Create(False);
Thread_SendMail.priority:=tpNormal;
end;


 
brother ©   (2008-09-29 12:02) [32]

строк больше? ты почему упорно не хочешь ответить, что тебя спросили? партизан?


 
vegarulez ©   (2008-09-29 12:03) [33]

brother ©   (29.09.08 12:02) [32]

на что??? Ну всё что он в ошибке выдаёт - я написал. ну на что ответить то ещё?????


 
brother ©   (2008-09-29 12:04) [34]

ты что курил?


 
vegarulez ©   (2008-09-29 12:06) [35]

brother ©   (29.09.08 12:04) [34]
ну реально не смешно. не в тему.


 
vegarulez ©   (2008-09-29 12:06) [36]

brother ©   (29.09.08 12:04) [34]
ну реально не смешно. не в тему.


 
Vlad Oshin ©   (2008-09-29 12:07) [37]


> CoInitializeEx пробовали? Не получилось?


 
vegarulez ©   (2008-09-29 12:09) [38]

почему в дочернем потоке не может осуществить конект пока в главном потоке не произведёшь конект?....  кто нить может кратко ответить, не говоря мне про мемо vcl и прочее? если по существу какую инфу надо - отвечу на вопросы. Но вроде уже и так всё расписал дословно каждое действие. и какие ошибки и как отладчик их отловил - и что выдал...


 
vegarulez ©   (2008-09-29 12:11) [39]

Vlad Oshin ©   (29.09.08 12:07) [37]
не знаю как этим пользоваться.


 
Сергей М. ©   (2008-09-29 12:11) [40]


> при чём тут мемо и т.п.


мемо тут действительно ни причем, а вот "и т.п." оч даже причем.

Ну не желаешь отвечать - парься тогда сам)


 
Сергей М. ©   (2008-09-29 12:14) [41]


> почему в дочернем потоке не может осуществить конект


Кто сказал что "не может", кроме тебя ?
Никто и не сказал, это лишь плод твоего нездорового воображения)

До коннекта и дело-то не доходит - AV возникает еше до коннекта !


 
vegarulez ©   (2008-09-29 12:19) [42]


> Vlad Oshin ©   (29.09.08 12:07) [37]


> vegarulez ©   (29.09.08 12:11) [39]
> Vlad Oshin ©   (29.09.08 12:07) [37]не знаю как этим пользоваться.
>


поискал и нашёл про это

Прочёл
http://www.interface.ru/home.asp?artId=3447

сделал вот так в потоке:
uses ... ComObj, ActiveX...
...
procedure Tmsgsend.Execute;
var
s:string;
i,j:integer;
smsg: array[0..4] of string;
myzconection: TZConnection;
myzquery: TZQuery;
myList:TstringList;
begin
  CoInitFlags := COINIT_MULTITHREADED;
try
 myList:=TStringList.Create;
 j:=0;
 myzconection:= TZConnection.Create(nil);
 myzquery:= TZQuery.Create(nil);
 With myzconection do
  try
   Database:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\a.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False";
   Protocol:="ado";
   Loginprompt:=false;
   Connected:=true;
   except on E: Exception do
      MessageDlg("Error" +#10#13+ E.Message +#10#13+ inttostr(E.HelpContext), mtWarning,[mbOk], 0);
   end;
....


всё заработало.


 
Vlad Oshin ©   (2008-09-29 12:19) [43]

unit SendMail;

interface

uses
Classes, SysUtils, QDialogs, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection;

type
Tmsgsend = class(TThread)
private
  { Private declarations }
protected
  procedure Execute; override;
end;

implementation
uses  unit1;

procedure Tmsgsend.Execute;
var
s:string;
i,j:integer;
smsg: array[0..4] of string;
myzconection: TZConnection;
myzquery: TZQuery;
myList:TstringList;
begin

//FormMain.sendmail:=1;
try
myList:=TStringList.Create;
j:=0;

CoInitializeEx (NIL, COINIT_APARTMENTTHREADED); //так или константы может другие, из по F1

myzconection:= TZConnection.Create(nil);
myzquery:= TZQuery.Create(nil);
With myzconection do
 try


 
sniknik ©   (2008-09-29 12:21) [44]

> ну канеш так работает. тоже самое и содержится в буттоне2.
я просил не так, просто создание, без остального "что содержится в буттоне2."

и объяснил зачем
> проверить, нужна инициализация или внутренний обьект

ты хоть читай что тебе пишут то, пытайся понять...


 
vegarulez ©   (2008-09-29 12:23) [45]

Так что
Vlad Oshin ©   (29.09.08 12:19) [43]
Спасибо!


 
Сергей М. ©   (2008-09-29 12:24) [46]


> всё заработало


Если рассказанные тобой чудеса действительно имели место быть, то Zeos можно смело выкинуть в топку - компонент обязан был возбудить совершенно иное исключение


 
sniknik ©   (2008-09-29 12:29) [47]

> сделал вот так в потоке:
> CoInitFlags := COINIT_MULTITHREADED;
т.е. все таки все упиралось с инициализацию ком-а (coinitialize и иже с ними...) а зеос вместо нормальной ошибки по этому поводу рушился в AV... забавные компоненты.
в печку их, вместе с Марксом и этим как его там Энгельсом! © профессор Преображенский

задумался бы о смене их на нормальные что ли...


 
sniknik ©   (2008-09-29 12:30) [48]

> то Zeos можно смело выкинуть в топку
;), не подсматривал....


 
Сергей М. ©   (2008-09-29 12:39) [49]


> sniknik ©   (29.09.08 12:30) [48]


Охотно верю)


 
vegarulez ©   (2008-09-29 13:34) [50]

Сергей М. ©   (29.09.08 12:24) [46]

Какое? Что типа не может создать конектинон или то что сам не может подгрузить необходимую модель для конектинона?
просто видишь странно... в основном потоке он(компонент) же нормально создал конектион и всё сделал. а как только вышел за пределы основного - уже ничего сделать не смог...


 
Сергей М. ©   (2008-09-29 13:44) [51]


> Какое?


В дословном переводе с буржуйского текст сообщения об исключении должен был быть следующим "Не был произведен вызов CoInitialize".

В тех же условиях ADO выдаст именно такое исключение. И не только ADO, но и многие другие "приличные" компоненты, использующие OLE/COM-механизмы.


 
Сергей М. ©   (2008-09-29 13:48) [52]


> просто видишь странно


Не столько странно, сколько страшно, если делать ставку на этот компонент в большом и серьезном проекте.
Если он такие фортели выкидывает уже при коннекте, то чего ожидать от него при дальнейшей работе ?

Короче - "фтопку", без вариантов)


 
Anatoly Podgoretsky ©   (2008-09-29 14:06) [53]

> Сергей М.  (29.09.2008 13:44:51)  [51]

Нормальный продукт уменьшает количество ошибок кодом except end;


 
sniknik ©   (2008-09-29 14:08) [54]

> в основном потоке он(компонент) же нормально создал конектион и всё сделал. а как только вышел за пределы основного - уже ничего сделать не смог...

sniknik ©   (29.09.08 11:41) [21]
> Да неиспользую я ADO... Zeos юзаю!!!
> народ повнимательнее плз....
зато зеос его использует, а ado нужен coinitialize() на каждый поток.



Страницы: 1 2 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.012 c
2-1222923008
Armond
2008-10-02 08:50
2008.11.09
Работа с датами


2-1222465968
SveTTT
2008-09-27 01:52
2008.11.09
Как избавиться от дублирования (SQL - full join)


3-1209092666
azamatufa
2008-04-25 07:04
2008.11.09
Paradox - не работает Filter LIKE


2-1222781286
Alexei
2008-09-30 17:28
2008.11.09
Действие пользователя


8-1187527943
s7r
2007-08-19 16:52
2008.11.09
Программное изменения вида в TOpenDialog.