[ itf @ 27.08.2007. 10:11 ] @
| Događa mi se jedna neobična stvar. Primjerice, spojim se ADO komponentama na SQL server i otvorim tablicu u batchoptimistic modu. Kada napravim:
Table1->Close(); // tablica je prethodno otvorena
Table1->Open();
npr. prilikom klikanja na gumb onda mi datagrid ne prikaže nikakve podatke, a ako te operacije podijelim na dva gumba (prvi zatvara konekciju, drugi otvara) onda sve radi ok. U čemu je problem? |
[ kiklop74 @ 28.08.2007. 02:20 ] @
Verovatno zatvaranje nije trenutno vec traje malo duze i pritom se izvrsava asinhrono u posebnom thread-u.
Stavi neku pauzu izmedju te dve komande kao npr. (pseudokod):
Code:
Table1->Close();
while (Table1->Opened) {
Sleep(30);
Application->ProcessMessages();
}
Table->Open();
[ lukeguy @ 28.08.2007. 22:45 ] @
Ovo rešenje je skroz neekonomično (jer se pauza uvek izvršava u punom trajanju bez obzira da li je zaista potrebno toliko vremena) i nepouzdano (jer nikad ne znaš pouzdano da li će x sekundi biti dovoljno). Doduše, ako ništa drugo ne pomaže, radiš ovako.
Proveri svoj Connection objekat (ADOConnection ili već šta koristiš). Imaš tamo jedan atribut koji podešava kako se izvršavaju pozivi (sinhrono ili asinhrono). Mislim da se zove ConnectionType ili tako nešto (napamet pišem, nemam ovde help). Pa stavi da su svi pozivi sinhroni. Takođe imaš i Before/After događaje (event-e) ove koji se trigeruju recimo pre nego što pošalješ upit ili kada se upit izvrši, pa onda pre konektovanja ili po uspešnom konektovanju itd.
[ itf @ 29.08.2007. 11:41 ] @
Da... slažem se da Sleep nije dobro rješenje jer se ponaša kao da obustavi kompletan thread, ali za ovo sinkrono/asinkrono nisam znao. budem probao pa javim. zahvaljujem
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.