تحويل محتوى ملف نصي إلى قاعدة بيانات access
#1
سلام الله عليكم

أود نقل محتوى ملف نصي إلى جدول في قاعدة بيانات ACCESS عملت كل التوصيلات اللازمة بإستخدام ADO connection المشكلة أني لم أستطع قراءة الملف النصي و من ثم تخزينه في جدول القاعدة لمعالجته لاحقا.....


شكرا مقدما
الرد
#2

وعليكم السلام

ألم تطرح نفس السؤال السنة الماضية!
http://www.delphi4arab.net/forum/showthr...p?tid=3681

يمكن استخدام نفس الطريقة هنا بتعديل طفيف حسب محتوى الملف النصي
http://www.delphi4arab.net/forum/showpos...ostcount=7
بالتوفيق
الرد
#3
سلام الله عليكم

شكرا أخي على الرد الوافي ..

أستطعت تحويل محتوى النص إلى جدول في قاعدة Access بمساعدتك ...

أضفت Adoquery لكي أتمكن من إستخدام تعليمات SQL و النتائج تعرض في DBgrid سؤالي هو كيف أعرض هذه النتائج مثلا على ملف EXL ؟

بالمناسبة مشروعي عمل برنامج يعالج ملفات نصية ويعطي لي نتائج في شكل ملف exl

1- أقوم بتحويل ملفات نصية
2- أقوم بمعالجة قاعدة البيانات بحسابات خاصة مثل : عدد المتصلين يوميا ,خلال كل ساعة و من ثم مخطط بياني لهذه النتائج..
3-عرض النتائج في ملف Exl
4-إرسال هذا الملف عبر Email

أرفق أول محاولة....


الملفات المرفقة
.rar   Test.rar (الحجم : 45.88 ك ب / التحميلات : 65)
الرد
#4
إقتباس :أعرض هذه النتائج مثلا على ملف EXL ؟
يمكنك استخدام ADO
http://www.delphi4arab.net/forum/showthr...p?tid=4750

بخصوص حذف جميع السجلات من جدول 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.
وهما غير مقبولتان للإجراء Delete
كود :
http://msdn.microsoft.com/en-us/library/ms808654
محاولة لتدارك ذلك:
PHP كود :
uses
  OleDB
, ADOInt;
...
type
  TAffectRecords 
= (arCurrent, arFiltered, arAll, arAllChapters);
  
THackADODataSet = class(TCustomADODataSet);
...

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)
بالتوفيق.
الرد
#5
بارك الله فيك أخي kachwahed على الإجابة لقد أخطئت أنا في وضع زر حذف محتوى القاعدة لأني وضعته للإختبار فقط و إلا فأنا لا أحبذ مسح محتواها .....

لدي سؤال آخر لو سمحتم عند تطبيق إعاز sql أقوم بعرض الناتج (الرد) في DBGD هل من الممكن عرضها في واجهة أخرى كملف excel ؟
الرد
#6
إقتباس :واجهة أخرى كملف excel ؟
أو بعبارة أخرى Export To Excel
http://www.delphi4arab.net/forum/showthread.php?tid=205
http://www.delphi4arab.net/forum/showthr...p?tid=1615
أو استعلام SELECT INTO بشيء (في المثال السابق) مثل:
كود :
cntADOExcel.Execute('SELECT * INTO [NewSheet] FROM [Sheet1$]');
الرد
#7
عذرا أخي kachwahed لكن لم تشتغل معي جربت أبسط مكونات.
1-ADOconnectio
2-datasource
3-Adotable
4-DBgrid

زر به أمر sql
أرفقت محاولتي


الملفات المرفقة
.rar   Acces2Excel.rar (الحجم : 45.6 ك ب / التحميلات : 41)
الرد
#8
السلام عليكم

هذا الكود الخاص بك
كود :
ADOConnection1.Execute('SELECT * ' + '+ExtractFilePath(Application.ExeName )+'Export\myFile.xls" "Excel 8.0;" FROM Table1');
وهذا الصحيح
كود :
ADOConnection1.Execute('SELECT * INTO mySheet ' + 'IN "'+ExtractFilePath(Application.ExeName )+'myFile.xls" "Excel 8.0;" FROM Table1');
أترك لك المجال لإكتشاف أخطائك
بالتوفيق
الرد
#9
سلام الله عليكم

بارك الله فيك أخي Lam.Abdeldjalil

قمت بوضع إستعلام يعرض لي النتيجة محصورة بين وقتين:

كود :
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) إلخ.

شكرا مقدما
الرد
#10
إقتباس :كيف أتحكم في وضع نتيجة الإستعلام في خانة من خاناة
لا أظن أن SQL غير مناسبة لمثل هذه الأعمال
للكتابة على ورقة Excel استخدام OLE أحسن وأسهل
مكونات مجانية كثيرة تقوم بهذا الغرض
أيضا مكونات دلفي المرفقة TExcelApplication
ابحث في المنتدى والنت...
ملاحظة: يستحسن فتح موضوع جديد لكل سؤال جديد لتنظيم المنتدى
بالتوفيق.
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم