problem sa definisanjem promenjive
03.12.2015. u 19:40 · pre 132 meseci
#1
Pozdrav,
u koliko sam preterao sa brojem tema i pitanja nek administrator briše.
Suština je snimiti strukturu zaglavlja iz MySql tabele u promenjivu.
U glavnoj formi definišem sve promenjive koje su mi potrebne u public, npr.:
Potrebnu pormenjivu prosleđujem u Thread na obradu :
MyThread:
Mislim da sam dobro prezentovao problem, kad se Thread izvrši promenjiva se ne definiše, proverim je posle, bude prazna.
u koliko sam preterao sa brojem tema i pitanja nek administrator briše.
Suština je snimiti strukturu zaglavlja iz MySql tabele u promenjivu.
Code:
type
PHeaderField = record
Index : Integer;
FieldName : String;
FieldType : TFieldType;
FieldKind : TFieldKind;
end;
type
THederField = array of PHeaderField;
type
PHeaderField = record
Index : Integer;
FieldName : String;
FieldType : TFieldType;
FieldKind : TFieldKind;
end;
type
THederField = array of PHeaderField;
U glavnoj formi definišem sve promenjive koje su mi potrebne u public, npr.:
Code:
public
tab_firme_header : THederField;
tab_mesta_header : THederField;
tab_racuni_header : THederField;
itd...
public
tab_firme_header : THederField;
tab_mesta_header : THederField;
tab_racuni_header : THederField;
itd...
Potrebnu pormenjivu prosleđujem u Thread na obradu :
Code:
MyThread:= TMyThread.Create(TAB_FIRME,'',tab_firme_header,PConnect);
MyThread:= TMyThread.Create(TAB_FIRME,'',tab_firme_header,PConnect);
MyThread:
Code:
TMyThread = class(TThread)
private
...
public
fHeader : THederField; // problematično
constructor Create(Sender: TObject; Filter: String; nHeader: THederField;
sConn: TConnect );
...
constructor TMyThread.Create(Sender: TObject; Filter: String;
nHeader: THederField; sConn: TConnect);
begin
..
fHeader := nHeader;
...
end;
...
procedure TMyThread.Execute;
begin
Synchronize(@OpenTable);
end;
...
procedure TMyThread.OpenTable;
begin
...
fHeader:=GetHeaderField(tQ);
...
end;
...
function GetHeaderField(Source: TSQLQuery): THederField;
var
i : Integer;
begin
// ucitavanje strukture tabele
SetLength(Result,Source.FieldCount);
for i:=0 to Source.FieldCount-1 do
begin
Result[i].Index := i;
Result[i].FieldName := Source.Fields[i].FieldName;
Result[i].FieldType := Source.Fields[i].DataType;
Result[i].FieldKind := Source.Fields[i].FieldKind;
end;
end;
TMyThread = class(TThread)
private
...
public
fHeader : THederField; // problematično
constructor Create(Sender: TObject; Filter: String; nHeader: THederField;
sConn: TConnect );
...
constructor TMyThread.Create(Sender: TObject; Filter: String;
nHeader: THederField; sConn: TConnect);
begin
..
fHeader := nHeader;
...
end;
...
procedure TMyThread.Execute;
begin
Synchronize(@OpenTable);
end;
...
procedure TMyThread.OpenTable;
begin
...
fHeader:=GetHeaderField(tQ);
...
end;
...
function GetHeaderField(Source: TSQLQuery): THederField;
var
i : Integer;
begin
// ucitavanje strukture tabele
SetLength(Result,Source.FieldCount);
for i:=0 to Source.FieldCount-1 do
begin
Result[i].Index := i;
Result[i].FieldName := Source.Fields[i].FieldName;
Result[i].FieldType := Source.Fields[i].DataType;
Result[i].FieldKind := Source.Fields[i].FieldKind;
end;
end;
Mislim da sam dobro prezentovao problem, kad se Thread izvrši promenjiva se ne definiše, proverim je posle, bude prazna.
Code:
fHeader:=GetHeaderField(tQ);
setuje fHeader kako treba al ga ne vraća u glavni thread odakle je prosleđena
fHeader:=GetHeaderField(tQ);
Potpis
Nikad izvini!