تحويل محتوى ملف نصي إلى قاعدة بيانات access
#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)
بالتوفيق.
الرد


الردود في هذا الموضوع
تحويل محتوى ملف نصي إلى قاعدة بيانات access - بواسطة kachwahed - 13-03-2011, 06:53 PM

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


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