أود نقل محتوى ملف نصي إلى جدول في قاعدة بيانات ACCESS عملت كل التوصيلات اللازمة بإستخدام ADO connection المشكلة أني لم أستطع قراءة الملف النصي و من ثم تخزينه في جدول القاعدة لمعالجته لاحقا.....
أستطعت تحويل محتوى النص إلى جدول في قاعدة Access بمساعدتك ...
أضفت Adoquery لكي أتمكن من إستخدام تعليمات SQL و النتائج تعرض في DBgrid سؤالي هو كيف أعرض هذه النتائج مثلا على ملف EXL ؟
بالمناسبة مشروعي عمل برنامج يعالج ملفات نصية ويعطي لي نتائج في شكل ملف exl
1- أقوم بتحويل ملفات نصية
2- أقوم بمعالجة قاعدة البيانات بحسابات خاصة مثل : عدد المتصلين يوميا ,خلال كل ساعة و من ثم مخطط بياني لهذه النتائج..
3-عرض النتائج في ملف Exl
4-إرسال هذا الملف عبر Email
بخصوص حذف جميع السجلات من جدول TCustomADODataSet من المفروض استخدام:
PHP كود :
ADOTable1.DeleteRecords();
غير أن هذا يثير استثناء ADO برسالة "Operation is not allowed in this context"
الخطأ في إجراء دلفي السابق (جميع إصدارات دلفي حاليا) الذي يحمل arAll كقيمة افتراضية إلى الإجراء DoRecordsetDelete
هذا الأخير يحاول بدوره تمرير أحد القيمتين adAffectAllChapters و adAffectAll إلى recordset.Delete
إقتباس :Note adAffectAll and adAffectAllChapters are not valid arguments to Delete.
procedure DoRecordsetDelete(DataSet: TCustomADODataSet; AffectRecords: TAffectRecords); const AffectRecordsValues: array[TAffectRecords] of TOleEnum = (adAffectCurrent, adAffectGroup, adAffectAll, adAffectAllChapters); begin with DataSet do try
THackADODataSet(DataSet).CheckActive; UpdateCursorPos; CursorPosChanged; with Recordset do try if AffectRecords in [arAll, arAllChapters] then begin MoveFirst; while (RecordCount > 0) do begin Delete(adAffectCurrent); DataSet.Resync([]); end; end else Delete(AffectRecordsValues[AffectRecords]);
{ When CacheSize > 1, Recordset allows fetching of deleted records. Calling MovePrevious seems to work around it } if (CacheSize > 1) and (PRecInfo(ActiveBuffer).RecordNumber <> 1) then begin MovePrevious; MoveNext; end; // MoveNext; except on E: Exception do begin CancelUpdate; DatabaseError(E.Message); end; end; finally Resync([]); end; end;
للاستخدام مثلا:
كود :
if ADOTable1.Supports([coDelete]) then
DoRecordsetDelete(ADOTable1, arAll);
يمكن تعويض DoRecordsetDelete بالأصلية في ADODB.pas
ومن الأفضل ارسال استعلام (DELETE FROM ATable)
بالتوفيق.
قمت بوضع إستعلام يعرض لي النتيجة محصورة بين وقتين:
كود :
ADOConnection1.Execute('SELECT count(*) as[color=Red] DOM [/color]INTO mySheet ' +
'IN "'+ExtractFilePath(Application.ExeName )+'myFile.xls" "Excel 8.0;" FROM Table1 where CHEURE BETWEEN #00:00:01# AND #01:24:01#');
DOM هو يوم من الشهر
سؤالي هو :
1- كيف أتحكم في وضع نتيجة الإستعلام في خانة من خاناة الـEXCEL :أي وضع اليوم الأول من الشهر في الخانة الأولى (1,0) و اليوم الثاني من الشهر في الخانة الثانية (2,0) إلخ.
إقتباس :كيف أتحكم في وضع نتيجة الإستعلام في خانة من خاناة
لا أظن أن SQL غير مناسبة لمثل هذه الأعمال
للكتابة على ورقة Excel استخدام OLE أحسن وأسهل
مكونات مجانية كثيرة تقوم بهذا الغرض
أيضا مكونات دلفي المرفقة TExcelApplication
ابحث في المنتدى والنت...
ملاحظة: يستحسن فتح موضوع جديد لكل سؤال جديد لتنظيم المنتدى
بالتوفيق.