السلام عليكم, اظن ان المشكل في الحلقة لانك في كل دورة تغير فقط قيمة واحدة, انظر هذا المثال ربما يساعدك:
ولم ادخل قيمة ID لاني اظنك وضعت لها خاصية auto increment وبهذا لا تحتاج ادخالها في الاستعلام
PHP كود :
Var
i : 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;
السلام عليكم و رحمة الله و بركاته
اولا اشكرك اخي Ben.ja على المساعدة و جعله الله في ميزان حسناتك
و اخيرا حتى يستفيد الجميع من هدا الكود اطرح للزملاء اعضاء هدا المنتدى التعليمي الرائع الحل النهائي
PHP كود :
begin
DM1.Source.close;
DM1.Source.open;
DM1.Source.first;
for i:= 0 to DM1.Source.FieldCount-1 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
الحمد لله الذي بنعمته تتم الصالحات.
[quote pid='44963' dateline='1523397088']
PHP كود :
begin
DM1.Source.close;
DM1.Source.open;
DM1.Source.first;
for i:= 0 to DM1.Source.FieldCount-1 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]
(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;
السلام عليكم اخي بارك الله فيك على الاهتمام
لقد ثم طرح ما كتبته في هدا الكود في الردود السابقة انظر الى ما سبق و سوف يتبين لك المشكل الدي ارهقني و اثعبني و شكرا مرة اخرى على الاهتمام بارك الله فيك و شكرا و اثمنى ان نجد الحل النهائي مع بقية الاعضاء
الأخ مبرمج حر ربما قصد الحلقة ان تكون داخل الـ 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;
السلام عليكم شكرا سوف اجرب ان شاء الله
السلام عليكم و رحمة الله و بركاته
في الاخير ثم الوصول الى الحل النهائي و دالك بتظافر الجهود من اعضاء هدا المنتدى التعليمي الرائع
و في الختام اشكر الجميع و جعله الله في ميزان حسناتهم ووفقكم الله وليستفيد الجميع اقدم لكم الكود الاخير بطريقتين و لكم الاختيار فيما يناسبكم ان شاء الله
الطريقة الاولى
PHP كود :
var
i : 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-1 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;