تحويل التسجيلات من جدول الى اخر باستعمال براميتر
#1
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
استعمل الكود الثالي في نقل السجيلات من جدول الى اخر باستعمال Paramétrer ولكن المشكلة هو عدم نقل الفرغات (Nulles) في الحقل الخاص بالتاريخ
ارجوا المساعدة و تصحيح الكود و جزالكم الله ألف خير

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 (N°, FIRSTNAME,LASTNAME,CITY,COUNTRY,date_enr)');
 
    SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5, :b6)');
 
  for i:= 0 to DM1.Source.FieldCount-1 do
 
    Params[i].Value := DM1.source.Fields[i].Value;
 
    ExecSQL;
 
    End;
 
  DM1.source.next;
End; 
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#2
السلام عليكم

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 (N°, FIRSTNAME,LASTNAME,CITY,COUNTRY,date_enr)');
 
    SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5, :b6)');
 
    For i:= 0 to 5 do //You have 6 parameters that's why
 
  Begin
       Params
[i].DataType :=  DM1.source.Fields[i].DataType;
 
      Params[i].Value := DM1.source.Fields[i].Value;
 
  End;
 
    Prepare; 
    ExecSQL;
    End;
 
  DM1.source.next;
End; 
الرد
#3
(16-04-2018, 12:20 AM)Ben.Ja كتب : السلام عليكم

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 (N°, FIRSTNAME,LASTNAME,CITY,COUNTRY,date_enr)');
 
    SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5, :b6)');
 
    For i:= 0 to 6 do 
   Begin
       Params
[i].DataType :=  DM1.source.Fields[i].DataType;
 
      Params[i].Value := DM1.source.Fields[i].Value;
 
  End;
 
    Prepare; 
    ExecSQL;
    End;
 
  DM1.source.next;
End; 

السلام عليكم 

عفوا كان هناك خطأ في الكتابة
و لكن المشكل هو كما دكرته اعلاه
و بارك الله فيكم
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#4
لم أفهمك أخي
الرد
#5
(16-04-2018, 10:39 PM)Ben.Ja كتب : لم أفهمك أخي

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

معدرتا لم انتبه الى التغير الدي غيرته في اجابتك الاولى سوف اجرب الكود 
بالتوفيق اخي و بارك الله فيك و شكرا
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#6
وفيك بارك, عفوا
الرد
#7
(17-04-2018, 12:14 AM)Ben.Ja كتب : وفيك بارك, عفوا
السلام عليكم

1- لقد قمت بتجريب الكود كل شيء يسير على ما يرام سرعة في نقل السجيلات من جدول source الى جدول destination تقريبا 30000 سجلا في اقل من دقيقتين ولكن المشكل الوحيد و الدي فعلا اتعبني و لم استطيع ايجاد له الحل هو فيما يخص الحقول التي تكون من نوع datetime فان لتسجيلات الفارغة (valeurs nulles) في الجدول source تنقل الى الجدول destination عبارة عن تاريخ على شكل 30/12/1899. 
و للتأكد من ان المشكل في نوعية الحقل datetime قمت بتحويله الى string في الجدول destination و اصبح ينقل الفارغات (valeurs nulles) بكل سهولة و لكن انا اريد الحقل في الجدول destination من نوع datetime.

2-المشكل الثاني هو في حالة ما كان الحقل كله فارغ في source مهما يكون نوعه حتى و لو كان من نوع string فانه يعطينا خطأ اي انه لا يتعرف على البراميتر المراد نقله الى destination.
 
خلاصة : ادن كخلاصة لما قمت بتجريبه هو ان المشكل في الفرغات (les valeurs nulles) 

فكيف السبيل لاجبار الكود بتحويل الفرغات (les valeurs nulles) من source الى destination مهما كان نوع الحقل datetime,string,integer........
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#8
غير الحلقة باضافة الاجراء clear لتحويل القيمة الى null هكذا
PHP كود :
For i:= 0 to 5 do
if 
DM1.source.Fields[i].isnull then
 Begin
      Params
[i].DataType :=  DM1.source.Fields[i].DataType;
      Params[i].clear;
 End
   Else
 Begin
      Params
[i].DataType :=  DM1.source.Fields[i].DataType;
      Params[i].Value := DM1.source.Fields[i].Value;
 End; 
الرد
#9
السلام عليكم
و الله اثعبتك معي اخي قد جربت الكود و المشكل هو نفسه دائما التاريخ المحول الى destination هو 30/12/1899
و الكود المجرب بعد مساعدتك هو كالثالي

PHP كود :
begin
While Not DM1.source.eof  Do

Begin
 With DM1
.destination Do

   Begin
   Active
:=False;
   SQL.Clear;
   SQL.Add('Insert into customer (N°, FIRSTNAME,LASTNAME,CITY,COUNTRY,date_enr)');
   SQL.Add('Values (:b1 , :b2 , :b3 , :b4 , :b5, :b6)');
 
 
for i:= 0 to DM1.source.FieldCount-1 do
  if DM1.source.Fields[i].isnull then
      Begin
      Params
[i].DataType := DM1.source.Fields[i].DataType;
 
     Params[i].clear;
 
     End
        Else
          Begin
          Params
[i].DataType := DM1.source.Fields[i].DataType;
 
         Params[i].Value := DM1.source.Fields[i].Value;
 
         End;
 
         Prepare;
 
         ExecSQL;
 
     End;
 
  DM1.source.next;
End; 
بكاء العين يفضح وبكاء القلب يذبح والبكاء من خشيه الله يربح اللهم اجعلنا ممن يبكى من خشيتك

الرد
#10
أظن ان للتخلص من مشكل الفراغ يجب ذكر نوع بيانات الparameter قبل نقل البيانات اليها , وهذا تم من خلال السطر
PHP كود :
Params[i].DataType := DM1.source.Fields[i].DataType; 


لكن ربما يجب ذكر نوع بيانات كل parameter على حدة, اي هكذا بدون الحلقة

PHP كود :
  Params[0].DataType := ftautoinc; //N° column datatype??
  Params[0].Value := DM1.source.Fields[0].Value;
  Params[1].DataType := ftstring;
  Params[1].Value := DM1.source.Fields[1].Value;
  Params[2].DataType := ftstring;
  Params[2].Value := DM1.source.Fields[2].Value;
  Params[3].DataType := ftstring;
  Params[3].Value := DM1.source.Fields[3].Value;
  Params[4].DataType := ftstring;
  Params[4].Value := DM1.source.Fields[4].Value;
  Params[5].DataType := ftdate;
  Params[5].Value := DM1.source.Fields[5].Value; 


أيضًا, هل خانة الdate في جدول destination بها خاصية Not null؟
الرد


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


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