delphi4arab منتديات دلفي للعرب

نسخة كاملة : تحويل التسجيلات من جدول الى اخر باستعمال براميتر
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
استعمل الكود الثالي في نقل السجيلات من جدول الى اخر باستعمال 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; 
السلام عليكم

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; 
(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; 

السلام عليكم 

عفوا كان هناك خطأ في الكتابة
و لكن المشكل هو كما دكرته اعلاه
و بارك الله فيكم
لم أفهمك أخي
(16-04-2018, 10:39 PM)Ben.Ja كتب : [ -> ]لم أفهمك أخي

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

معدرتا لم انتبه الى التغير الدي غيرته في اجابتك الاولى سوف اجرب الكود 
بالتوفيق اخي و بارك الله فيك و شكرا
وفيك بارك, عفوا
(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........
غير الحلقة باضافة الاجراء 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; 
السلام عليكم
و الله اثعبتك معي اخي قد جربت الكود و المشكل هو نفسه دائما التاريخ المحول الى 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; 
أظن ان للتخلص من مشكل الفراغ يجب ذكر نوع بيانات ال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 2 3