كيف يمكن نقل سجيلات من جدول الى اخر باستعمال الفلترة مع العلم ان DatabaseName مختلفة
#21
السلام عليكم, اظن ان المشكل في الحلقة لانك في كل دورة تغير فقط قيمة واحدة, انظر هذا المثال ربما يساعدك:
ولم ادخل قيمة  ID لاني اظنك وضعت لها خاصية auto increment وبهذا لا تحتاج ادخالها في الاستعلام

PHP كود :
Var
integer;
begin
DM1
.Source.close;
DM1.Source.open;
DM1.Source.first; 

While Not DM1.Source.eof  Do 
 Begin
   With DM1
.destination Do
   Begin
     Active
:=False;
     SQL.Clear;
     SQL.Add('Insert into customer ( FIRSTNAME,LASTNAME,CITY,COUNTRY)');
     SQL.Add('Values ( :b2 , :b3 , :b4 , :b5)');
   //  params[1].DataType:= ftString;
   //  params[2].DataType:= ftString;
   //  params[3].DataType:= ftString;
   //  params[4].DataType:= ftString;
     params[1].value:= DM1.source.Fields[1].Value;
     params[2].value:= DM1.source.Fields[2].Value;  
     params
[3].value:= DM1.source.Fields[3].Value;  
     params
[4].value:= DM1.source.Fields[4].Value;  
     ExecSQL
;
   End;
   DM1.source.next;
End; 
end



هناك اسطر قمت بوضعها كتعليق حاول تجربة الكود بدونهم اذا لم يشتغل انزع علامة التعليق قبلهم // وجرب

عذرًا خطأ خفيف غير
PHP كود :
    params[1].value:= DM1.source.Fields[1].Value;
 
    params[2].value:= DM1.source.Fields[2].Value 
     params
[3].value:= DM1.source.Fields[3].Value 
     params
[4].value:= DM1.source.Fields[4].Value  


إلى

PHP كود :
    params[0].value:= DM1.source.Fields[0].Value;
 
    params[1].value:= DM1.source.Fields[1].Value 
     params
[2].value:= DM1.source.Fields[2].Value 
     params
[3].value:= DM1.source.Fields[3].Value  
الرد
#22
السلام عليكم و رحمة الله و بركاته

اولا اشكرك اخي Ben.ja على المساعدة و جعله الله في ميزان حسناتك 
و اخيرا حتى يستفيد الجميع من هدا الكود اطرح للزملاء اعضاء هدا المنتدى التعليمي الرائع الحل النهائي 

PHP كود :
begin
DM1
.Source.close;
DM1.Source.open;
DM1.Source.first;

for 
i:= 0 to DM1.Source.FieldCount-do

While 
Not DM1.Source.eof  Do

 Begin

  With DM1
.destination Do
 
    Begin
     Active
:=False;
 
    SQL.Clear;
 
    SQL.Add('Insert into customer (id, FIRSTNAME,LASTNAME,CITY,COUNTRY)');
 
    SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5)');
 
    params[0].value:= DM1.source.Fields[0].Value;
 
    params[1].value:= DM1.source.Fields[1].Value;
 
    params[2].value:= DM1.source.Fields[2].Value;
 
    params[3].value:= DM1.source.Fields[3].Value;
 
    params[4].value:= DM1.source.Fields[4].Value;
 
    Params[i].Value := DM1.source.Fields[i].Value;
 
    ExecSQL;
 
    End;
 
  DM1.source.next;
End
 

ولكن حبد لو انه هناك طريقة من اجل تقليص هده الكتابة لانه باستعمال مثلا عدد كبير من الحقول يصبح الكود مملء نوعا ما

; params[0].value:= DM1.source.Fields[0].Value
; params[1].value:= DM1.source.Fields[1].Value
; params[2].value:= DM1.source.Fields[2].Value
; params[3].value:= DM1.source.Fields[3].Value
; params[4].value:= DM1.source.Fields[4].Value

فمثلا لو نستعمل Array فلنفكر معا نحن اعضاء المنتدى من اجل تقليص هدا الكود و بارك الله فيكم جميعا و بالاخص الزميل Ben.ja
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

[-] كل من 1 user says قال شكرا ل AbdouProg على المشاركة المفيدة
  • Ben.Ja
الرد
#23
الحمد لله الذي بنعمته تتم الصالحات.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#24
[quote pid='44963' dateline='1523397088']
PHP كود :
begin
DM1
.Source.close;
DM1.Source.open;
DM1.Source.first;

for 
i:= 0 to DM1.Source.FieldCount-do

While 
Not DM1.Source.eof  Do

 Begin

  With DM1
.destination Do
 
    Begin
     Active
:=False;
 
    SQL.Clear;
 
    SQL.Add('Insert into customer (id, FIRSTNAME,LASTNAME,CITY,COUNTRY)');
 
    SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5)');
 
    params[0].value:= DM1.source.Fields[0].Value;
 
    params[1].value:= DM1.source.Fields[1].Value;
 
    params[2].value:= DM1.source.Fields[2].Value;
 
    params[3].value:= DM1.source.Fields[3].Value;
 
    params[4].value:= DM1.source.Fields[4].Value;
 
    Params[i].Value := DM1.source.Fields[i].Value;
 
    ExecSQL;
 
    End;
 
  DM1.source.next;
End
 

بسم الله الرحمن الرحيم
السلام عليكم
اعتدر هناك خطأ لم انتبه اليه
الكورس يعمل بدون اي مشكل بحدف 
for i:= 0 to DM1.Source.FieldCount-1 do
و كدالك حدف
 Params[i].Value := DM1.source.Fields[i].Value;

وهده الطريقة الاولى التي سبق و ان طرحتها في موضوعي هدا اعلاه
 ولكن حبد لو انه هناك طريقة اخرى من اجل تقليص هده الكتابة لانه باستعمال مثلا عدد كبير من الحقول يصبح الكود مملء نوعا ما
; params[0].value:= DM1.source.Fields[0].Value
; params[1].value:= DM1.source.Fields[1].Value
; params[2].value:= DM1.source.Fields[2].Value
; params[3].value:= DM1.source.Fields[3].Value
; params[4].value:= DM1.source.Fields[4].Value

فمثلا لو نستعمل Array فلنفكر معا نحن اعضاء المنتدى من اجل تقليص هدا الكود و بارك الله فيكم جميعا 

[/quote]
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#25
إقتباس : ولكن حبد لو انه هناك طريقة اخرى من اجل تقليص هده الكتابة لانه باستعمال مثلا عدد كبير من الحقول يصبح الكود مملء نوعا ما
; params[0].value:= DM1.source.Fields[0].Value
; params[1].value:= DM1.source.Fields[1].Value
اكتب الكود في حلقة for
كود :
for j:=0 to 4 do
params[j].value:= DM1.source.Fields[j].Value;
الرد
#26
(11-04-2018, 01:35 PM)مبرمج حر كتب :
إقتباس : ولكن حبد لو انه هناك طريقة اخرى من اجل تقليص هده الكتابة لانه باستعمال مثلا عدد كبير من الحقول يصبح الكود مملء نوعا ما
; params[0].value:= DM1.source.Fields[0].Value
; params[1].value:= DM1.source.Fields[1].Value
اكتب الكود في حلقة for
كود :
for j:=0 to 4 do
params[j].value:= DM1.source.Fields[j].Value;
السلام عليكم اخي بارك الله فيك على الاهتمام
لقد ثم طرح ما كتبته في هدا الكود في الردود السابقة انظر الى ما سبق و سوف يتبين لك المشكل الدي ارهقني و اثعبني و شكرا مرة اخرى على الاهتمام بارك الله فيك و شكرا و اثمنى ان نجد الحل النهائي مع بقية الاعضاء
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#27
الأخ مبرمج حر ربما قصد الحلقة ان تكون داخل الـ With .. do, هكذا:

PHP كود :
While Not DM1.Source.eof  Do
Begin
 With DM1
.destination Do
 
   Begin
     Active
:=False;
 
    SQL.Clear;
 
    SQL.Add('Insert into customer (id, FIRSTNAME,LASTNAME,CITY,COUNTRY)');
 
    SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5)');
 For 
i:=0 to 4 do
 
     Params[i].Value := DM1.source.Fields[i].Value;
 
    ExecSQL;
 
   End;
 
  DM1.source.next;
End
الرد
#28
السلام عليكم شكرا سوف اجرب ان شاء الله
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#29
السلام عليكم و رحمة الله و بركاته
في الاخير ثم الوصول الى الحل النهائي و دالك بتظافر الجهود من اعضاء هدا المنتدى التعليمي الرائع
و في الختام اشكر الجميع و جعله الله في ميزان حسناتهم ووفقكم الله وليستفيد الجميع اقدم لكم الكود الاخير بطريقتين و لكم الاختيار فيما يناسبكم ان شاء الله

الطريقة الاولى

PHP كود :
var
integer;
Begin

DM1
.Source.close;
DM1.Source.open;
DM1.Source.first;

While 
Not DM1.Source.eof  Do

Begin
 With DM1
.destination Do

 
    Begin
     Active
:=False;
 
    SQL.Clear;
 
    SQL.Add('Insert into customer (id, FIRSTNAME,LASTNAME,CITY,COUNTRY)');
 
    SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5)');
 
  for i:= 0 to DM1.Source.FieldCount-do
 
    Params[i].Value := DM1.source.Fields[i].Value;
 
    ExecSQL;
 
    End;
 
  DM1.source.next;
End

الطريقة الثانية

PHP كود :
begin

DM1
.Source.close;
DM1.Source.open;
DM1.Source.first;

While 
Not DM1.Source.eof  do  

Begin

with DM1
.destination do

 
     begin
      Active
:=False;
 
     SQL.Clear;
 
     SQL.Add('Insert into customer (id, FIRSTNAME,LASTNAME,CITY,COUNTRY)');
 
     SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5)');
 
     Params[0].Value := DM1.SourceID.Value;
 
     Params[1].Value := DM1.SourceFIRSTNAME.Value;
 
     Params[2].Value := DM1.SourceLASTNAME.Value;
 
     Params[3].Value := DM1.SourceCITY.Value;
 
     Params[4].Value := DM1.SourceCOUNTRY.Value;
 
     ExecSQL;
 
     end;
DM1.source.next;
End
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

[-] كل من 4 users say قال شكرا ل AbdouProg على المشاركة المفيدة
  • bassem_43, Ben.Ja, wadoud, أبو معاذ
الرد


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


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف