...
Query: TSQLQuery
...
Query.SQL.Clear;
Query.SQL.Add('INSERT INTO pumps'#13#10 +
'VALUES (NULL, :title, :power)');
Query.ParamByName('title').AsString:= title;
Query.ParamByName('power').AsFloat:= power;
try
Query.ExecSQL;
except
on E: Exception do
begin
ShowMessage(E.Message);
end;
end;
क्वेरी में SQLDonnection से क्वेरी को सॉफ़्टवेयर = स्क्लाइट के साथ जोड़ा जाता है। सभी ऑपरेशन काम करते हैं, लेकिन जब मैं अद्वितीय इंडेक्स के साथ कॉलम में एक गैर-अद्वितीय मान डालने का प्रयास करता हूं, तो मुझे मूल्य अस्तित्व के बारे में अपवाद मिलता है। ठीक है, मेरा कोड इसे पकड़ता है और एक संदेश दिखाता है 'कॉलम शीर्षक अद्वितीय नहीं है', लेकिन डीबगर से पहले मुझे उस अपवाद को दिखाता है TWICE। जब मैं कार्यक्रम बंद करते हैं, स्मृति प्रबंधक मेमोरी लीक के बारे में बताता है, और लीक कर रहे हैं:डेल्फी एक्सई 3 में मेमोरी रिसाव जब एसक्लाइट डीबी
- 21 - 28 बाइट्स: UnicodeString एक्स 4
- 61 - 68 बाइट्स: TDBXSqliteCommand x2
- 69 - 76 बाइट्स: TDBXMorphicCommand एक्स 2
- 221 - 236 बाइट्स: अज्ञात x 2
कि से बचने के लिए यह संभव है?
युपीडी: मैं विस्तृत लॉग पाने के लिए FastMM4 इस्तेमाल किया, और नीचे एक स्मृति रिसाव के बारे में एक हिस्सा है:
A memory block has been leaked. The size is: 68
This block was allocated by thread 0xB18, and the stack trace (return addresses) at the time was:
4068A6 [System.pas][System][@GetMem$qqri][4203]
4082BB [System.pas][System][TObject.NewInstance$qqrv][14969]
4089D2 [System.pas][System][@ClassCreate$qqrpvzc][16231]
7D5A91 [Data.DbxSqlite.pas][Data.DbxSqlite][Dbxsqlite.TDBXSqliteCommand.$bctr$qqrp26Data.Dbxcommon.TDBXContextp35Data.Dbxsqlite.TDBXSqliteConnection][567]
6E3DFE [Data.DBXCommon][Generics.Collections.%TDictionary__2$20System.UnicodeStringp32Data.Dbxcommon.TDBXCreateCommand%.GetBucketIndex$qqrx20System.UnicodeStringi]
7D4C8E [Data.DbxSqlite.pas][Data.DbxSqlite][Dbxsqlite.TDBXSqliteDriver.CreateSqliteCommand$qqrp26Data.Dbxcommon.TDBXContextp29Data.Dbxcommon.TDBXConnectionp26Data.Dbxcommon.TDBXCommand][295]
6CE4DA [Data.DBXCommon.pas][Data.DBXCommon][Dbxcommon.TDBXDriver.CreateMorphCommand$qqrp26Data.Dbxcommon.TDBXContextp29Data.Dbxcommon.TDBXConnectionp26Data.Dbxcommon.TDBXCommand][7569]
6D5177 [Data.DBXCommon.pas][Data.DBXCommon][Dbxcommon.TDBXDelegateDriver.CreateMorphCommand$qqrp26Data.Dbxcommon.TDBXContextp29Data.Dbxcommon.TDBXConnectionp26Data.Dbxcommon.TDBXCommand][11061]
6D09F4 [Data.DBXCommon.pas][Data.DBXCommon][Dbxcommon.TDBXConnection.CreateMorphCommand$qqrp26Data.Dbxcommon.TDBXCommand][8480]
6D1C21 [Data.DBXCommon.pas][Data.DBXCommon][Dbxcommon.TDBXMorphicCommand.DerivedOpen$qqrv][9084]
6D1974 [Data.DBXCommon.pas][Data.DBXCommon][Dbxcommon.TDBXCommand.Open$qqrv][8962]
The block is currently used for an object of class: TDBXSqliteCommand
क्या हम मान सकते हैं कि जब एक अद्वितीय मूल्य पोस्ट किया जाता है तो कोई रिसाव नहीं होता है? –
क्या आप डीबगर के बाहर प्रोग्राम चलाते समय रिसाव रखते हैं? कोड को डीबग करते समय मेरे पास हमेशा यूनिकोडस्ट्रिंग लीक होता है ... – whosrdaddy
क्या स्मृति प्रबंधक आपको यह भी नहीं बताता है कि * उन * लीक की गई चीज़ों को आवंटित किया गया था? –