मैं एक प्रश्न कोड है कि मैं हर बार जब मैं डेटाबेस से डेटा लाने की जरूरत है कॉल कर सकते हैं, और मैं इसे पिरोया जा करना चाहते हैं। यह सुनिश्चित नहीं है कि इसे थ्रेड में कैसे कार्यान्वित किया जाए ताकि मैं इस कोड का पुन: उपयोग कर सकूं, मूल रूप से, मैं यह कोड थ्रेड के अंदर चाहता हूं। मुझे पता है कि थ्रेड के अंदर एक साधारण डेटाबेस क्वेरी कैसे बनाएं, लेकिन ऐसा कुछ चाहिए जिसे मैं पुन: उपयोग कर सकूं। क्या कोई मुझे बता सकता है कि मैं इसके लिए उदाहरण कहां पा सकता हूं या उदाहरण प्रदान करने के लिए पर्याप्त दयालु हो सकता हूं?पिरोया डेल्फी एडीओ क्वेरी
यहाँ मेरी नमूना डेटाबेस क्वेरी है:
function TDBConnection.SQLOpen(const SQLStr: String): TDataSet;
var
i: Integer
begin
try
Result := TADOQuery.Create(DBConnect.FDatabaseConection);
TADOQuery(Result).Connection:=DBConnect.FDatabaseConnection;
TADOQuery(Result).CommandTimeOut:=30;
TADOQuery(Result).SQL.Text := SQLStr;
TADOQuery(Result).Open;
except
end;
end;
और यह कैसे मैं ऊपर समारोह फोन कर रहा हूँ का एक नमूना है:
function TDBConnection.GetUserInfo: Boolean;
var
sqlStr: String;
Database: TDataset;
begin
sqlStr:= 'SELECT FIELD1, FIELD2, FIELD3 FROM TABLE1';
try
Dataset := SQLOpen(sqlStr);
if not Dataset.IsEmpty then
begin
//pass result to StringGrid
end;
finally
FreeAndNil(SQLParams);
FreeAndNil(Dataset);
end;
end;
आप इसे थ्रेड पर क्यों चाहते हैं? यदि आप क्वेरी चालू होने पर अन्य चीजें करना चाहते हैं तो आप एक एसिंक्रोनस क्वेरी का उपयोग कर सकते हैं (जो कि किसी भी थ्रेड पर क्वेरी को चलाता है)। – Rob
हाय रोब, सुझाव के लिए धन्यवाद। लेकिन मैंने कहीं पढ़ा है कि एसिंक्रोनस क्वेरी का उपयोग करते समय बहुत से उपयोगकर्ताओं को हैंडल और मेमोरी लीक के साथ समस्याएं होती हैं। –
मैंने इसे नहीं देखा है। मेरे पास स्वायत्त (डेल्फी) सॉफ़्टवेयर है जो लगातार एसिंक एडीओ प्रश्नों को करने में सप्ताहों तक चलता है। मेरे पास कुछ अन्य सी ++ कोड है जो नियमित रूप से रन पर 100000000 एसिंक क्वेरी को बंद करता है। – Rob