السلام عليكم, هذه اول مشاركة لي في هذا المنتدى و أرجو ان تحتملني سعة صدوركم بالمساعدة حيث اني من المبتدئين في البرمجة....
لقد حاولت البحث عن حل للمشكلة التي اواجها في الMSDN Library و في بعض المنتديات و لم اتمكن من الحل إلى الان.
لقد عملت تطبيق يقوم بسحب ملف تيكست Tab-delimited Text عن طيق commondialog.showopen لأني اشتغل على العديد من الملفات المتغيرة . ثم يتم تحميله في الفليكس جريد MSHFlexgrid ثم يحلل المعلومات التي بداخله و يضيف المعلومات المستخلصة على العمود الاخير من الملف و يتم حفظ الملف مرة اخرى عن طريق commondialog.showsave ..
لقد جربت التطبيق و هو يعمل على الملفات الصغيرة و لكن عند محاولة فتح احد الملفات الكبيرة (بعض الملفات يصل الى أكثر من 100,000 سطر) يتوقف التطبيق معطيا الخطأ 7 (out of memory) .
السؤال الأول : هل هناك طريقة معينة للتعامل مع هذا الخطأ بحيث يحمل الفايل بأكمله في ال MSHFlexgrid ؟
السؤال الثاني: هل من الممكن ان احمل الملف عن طريق ADO في ال MSHFlexgrid من خلال ال commondialog.showopen ؟
هذا الكود الذي يعطي الخطأ out of memory و قد جربت طريقتين لتحميل الملف كلاهما تعطي نفس الخطأ:
Sub cmdBtnDXP_Click() InitMSHFlexGrid1 ' to set number of columns ' first method Dim hFile As Integer Dim sLines() As String, sTxt As String Dim n As Double, nCount As Double With CommonDialog1 .CancelError = True .Flags = cdlOFNFileMustExist + cdlOFNHideReadOnly .Filter = "Data Exported Files (*.DXP - *.TXT)|*.DXP;*.TXT|All Files (*.*)|*.*|Text Files (*.txt)|*.txt|" On Error Resume Next .ShowOpen If Err.Number <> cdlCancel Then hFile = FreeFile Open .FileName For Input As #hFile sTxt = Input(LOF(hFile), hFile) Close #hFile sLines = Split(sTxt, vbCrLf) nCount = UBound(sLines) For n = 1 To nCount MSHFlexGrid1.AddItem sLines(n) Next End If End With 'Secon method Dim intFile As Integer intFile = FreeFile CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #intFile Do While Not EOF(1) Line Input #intFile, textLine MSHFlexGrid1.AddItem textLine Loop Close #intFile End If End Sub
و شكرا....