نسخ حقل من جدول الي اخر
#1
بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله تعالي وبركاته

اذا كان لدي جدولين في الاكسس وبهما الحقول التاليه
جدول1 به
الاسم _ الرقم _ تاريخ الميلاد

جدول2 به
الاسم _ الرقم _ تاريخ الميلاد

اي ان الحقول مكرره في الجدولين

وقمت بادخال سجل في الجدول1
كيف يمكن بضغطه زر واحده ان اقوم بنقل السجل الذي قمت ب إدخاله في جدول1 الي جدول 2
بالدلفي .اي عمل نسخ من الجدول الاول الي الجدول الثاني.

وبارك الله فيكم.
لا اله الا الله
عدد ما كان وعدد ما يكون وعدد الحركات والسكون
الرد
#2
وعليكم السلام ورحمة الله وبركاته
إقتباس :اي ان الحقول مكرره في الجدولين
قبل انطلاق أي مشروع قواعد بيانات ينبغي إعداد نموذج للجداول والعلاقات
وعند تصميم النموذج ينبغي ألا نجد جداول مكررة ولا نضطر فيما بعد لتكرار سجلات
وبالتالي لن نضطر لعمل مثل هذا.
حاول إعادة صياغة الجداول بطريقة أخرى، بحيث مثلا يكون:
الاسم _ الرقم _ تاريخ الميلاد
في جدول منفرد ثم يرتبط الجدولان به من حقل غريب (Foreign key).

هذا الإجراء يقوم بتكرار السجل في نفس الجدول:
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
  
i: Integer;
  
QueryCopy: TQuery;
begin
    QueryCopy 
:= TQuery.Create(Self);
  
with QueryCopy do
    
begin
      DatabaseName 
:= Table1.DatabaseName;
      
SQL.Clear;
      
SQL.Add('SELECT * FROM biolife');
      
Open;
      
Bookmark := Table1.Bookmark;
    
end;
  try
    
With QueryCopy do
    
begin
      Table1
.Append;
      
Table1.Fields.Fields[0].AsInteger := Table1.RecordCount +1;
      for 
i := 1 to  FieldCount -1 do
        
Table1.Fields.Fields[i].assign(Fields.Fields[i]);
      try
        
Table1.Post;
      
Except on Exception do
        
Table1.Cancel;
      
end;
    
end; // with
  
finally
    
QueryCopy.Free;
  
end;
end; 

إجراء آخر،بطريقة أخرى:
PHP كود :
procedure DuplicateCurrentRecord(FirstField: Variant; aDataSet : TDataSet);
var
  
Data : array of variant;
  
aRecord : array of TVarRec;
  
i : integer;
  
max : integer;
begin
  max 
:= aDataSet.fields.count -1;
  
// set the lenghth of the arecord array to be the same as the number of
  // elements in the data array
  
SetLength(aRecord, max+1);
  
SetLength(Data, max+1);

  
// set the variant type pointers to the data array
  
for i := 0 to max do
  
begin
    aRecord
[i].VType := vtVariant;
    
aRecord[i].VVariant := @Data[i];
  
end;

  
// Copy the Record to the Array
  
for i := 1 to max do
    
Data[i] := aDataSet.fields[i].value;
    
Data[0] := FirstField;

  
// finally append the record in one go
  
aDataSet.AppendRecord(aRecord);
end; 
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#3
سلام عليكم

لكن اذا كان لدي موظفين وانتهت فتره خدمتهم بالموسسه لكن لا **** مسحهم من الجدول بحيث اذا احتجت الي معلوماتهم اقوم بالرجوع لها لكن في نفس الوقت اود وضعهم في جدول منفصل مثلا يسمي الارشيف لذلك اقوم بنقلهم من الجدول الرئيسي الي جدول الارشيف هل من طريقه اخري غير هذه.
لا اله الا الله
عدد ما كان وعدد ما يكون وعدد الحركات والسكون
الرد
#4
قد يفيدك هذا أيضــا : راجع العنصر الخامس هنــــــــــــــــا
راجع أيضا الصفحة 69 من كتاب لغة البرمجة دلفي لمحمد خالد ناصر آغا .


بالتوفيق أحي العزيز .
الرد
#5
إقتباس :ان لدي موظفين وانتهت فتره خدمتهم بالموسسه
ضف للجدول حقل منطقي Boolean
ضع به القيمة True في حالة كان يعمل
ضع القيمة False في حال ترك العمل
وفي تعاملك مع الجدول خذ بعين الاعتبار ذلك الحقل بحيث يظهر فقط المستخدمي ذوي القيمة True
وبالتوفيق
الرد
#6
شكرا للجميع وبارك الله فيكم

اذا في هذه الحاله سادخل الحقل المنطقي في جميع عمليات الفلتره التي اقوم بها بحيث يقوم بالفلتره فقط للذين لهم القيمه true اليس كذلك؟
لا اله الا الله
عدد ما كان وعدد ما يكون وعدد الحركات والسكون
الرد
#7

نعم، في اي تعامل مع الجدول، فلترة او استعلام sql
وبالتوفيق
الرد


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


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