الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل من طريقة عامة لتصدير البيانات

مغلق
بدأه mef في 14 أغسطس 2006 · 11 رد · 2,327 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام

هل من طريقة عامة لتصدير و إستيرادها البيانات أي من التنسيقات المشهورة xml مثلاً

يرجى من له تجربة أن ينورنا بها

شكرا

#2

ما المقصود بالضبط, هل تريد كود يقوم بعملية تصدير بيانات معينة إلى صيغة XML أم تريد أداة أم ماذا؟

#3

سلام

أفضل كود مفتوح المصدر لكي أتحكم به و يكون شامل لكل التنسيقات

-waf

تم تعديل هذه المشاركة بواسطة mef في 15 أغسطس 2006 في 10:52

#4

السلام عليكم

يوجد ادوات جاهزة .. للتصدير والأستيراد

مثل : SMExport component suite

http://www.scalabium.com

وتسطيع انزال نسخة كاملة مع السورس من المواقع الصينينة .

#5

كتبت مرة تابع يصدر إلى XML باستخدام TClientDataSet لذلك فهو ليس بإمكانيات كبيرة, كما أنه لا يراعي إلا أنواع حقول محددة

uses
  Classes, SysUtils, Dialogs,
  ADODB, DB, DBClient;

procedure ExportToXML(SourceConnectionString, XMLFolder: string);
var
  SourceConnection: TADOConnection;
  SourceQuery: TADOQuery;
  SourceTableNames: TStringList;

  ClientDataSet: TClientDataSet;
  ClientField: TField;

  i, j: Integer;
begin
  SourceConnection:= TADOConnection.Create(nil);
  SourceConnection.LoginPrompt:= False;
  SourceConnection.ConnectionString:= SourceConnectionString;
  try
	SourceConnection.Connected:= True;
  except
	MessageDlg('Connection Failed!', mtWarning, [mbOK], 0);
	Exit;
  end;

  SourceQuery:= TADOQuery.Create(nil);
  SourceQuery.Connection:= SourceConnection;

  SourceTableNames:= TStringList.Create;
  SourceConnection.GetTableNames(SourceTableNames, False);

  for i:= 0 to SourceTableNames.Count - 1 do
  begin
	SourceQuery.SQL.Clear;
	SourceQuery.SQL.Add('SELECT * FROM ' + SourceTableNames);
	try
	  SourceQuery.Active:= True;
	except
	  MessageDlg('Table' + SourceTableNames + ' Connection Failed!', mtWarning, [mbOK], 0);
	  Continue;
	end;

	ClientDataSet:= TClientDataSet.Create(nil);
	for j:= 0 to SourceQuery.FieldCount - 1 do
	begin
	  case SourceQuery.Fields[j].DataType of
		ftFixedChar,
		ftString,
		ftWideString,
		ftMemo,
		ftFmtMemo: begin
					 ClientField:= TStringField.Create(nil);
					 ClientField.Size:= SourceQuery.Fields[j].Size;
				   end;

		ftSmallint,
		ftInteger,
		ftLargeint: ClientField:= TIntegerField.Create(nil);

		ftWord,
		ftFloat,
		ftCurrency,
		ftBCD,
		ftFMTBcd: ClientField:= TFloatField.Create(nil);

		ftDate,
		ftTime,
		ftDateTime,
		ftTimeStamp: TDateTimeField.Create(nil);

		ftBlob,
		ftGraphic,
		ftOraBlob,
		ftOraClob: TBlobField.Create(nil);
	  end;

	  ClientField.FieldKind:= fkData;
	  ClientField.FieldName:= SourceQuery.Fields[j].FieldName;
	  ClientField.DataSet:= ClientDataSet;
	end;

	ClientDataSet.CreateDataSet;
	try
	  ClientDataSet.Active:= True;
	except
	  MessageDlg('Table' + SourceTableNames + ' ClientDataSet Creation Failed!', mtWarning, [mbOK], 0);
	  Continue;
	end;

	SourceQuery.First;
	while not SourceQuery.Eof do
	begin
	  ClientDataSet.Insert;
	  for j:= 0 to SourceQuery.FieldCount - 1 do
	  begin
		try
		  ClientDataSet.Fields[j].Value:= SourceQuery.Fields[j].Value;
		except
		  // Do Nothing...
		end;
	  end;
	  ClientDataSet.Post;
	  SourceQuery.Next;
	end;

	ClientDataSet.SaveToFile(IncludeTrailingPathDelimiter(XMLFolder) + SourceTableNames + '.xml', dfXMLUTF8);
	ClientDataSet.Free;
  end;
  SourceQuery.Free;
  SourceConnection.Free;
  MessageDlg('Done.', mtInformation, [mbOK], 0);
end;

أرجو أن يقدم الفائدة

تم تعديل هذه المشاركة بواسطة fh_feras في 15 أغسطس 2006 في 18:14

#6

جميل جدا اخ فراس على هذا التابع

فهو يقوم بتحويل قاعدة بيانات الى XML File و يمكن التعديل عليه بشكل سريع لدعم انواع بيانات اخرى

او لجعله يتحكم اكثر بماذا نريد ان نصدر كأن نمرر له اسم الجدول ....

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

اما اذا كنت تريد ان تقوم بالتعامل مباشرة مع ملف XML من برنامجك اي تقوم ببناءه بنفسك(يعني تقوم بوضع ال Nodes بيدك)

فهنا يمكنك استخدام المكون XMLDocument حيث قام دلفي بتضمين هذا المكون كجزء من Delphi IDE

و لكن يجب ان تكون على اطلاع كامل و كافي على بنية XML و تفهم جميع العناصر المكونة لها

هناك قسم كامل في كتاب Mastring Delphi 7 اسمه Programming with the DOM يتحدث عن كيفية التعامل مع هذا المكون

و فيه العديد من الامثلة التي تبين كيف يتم سحب البيانات من XML و كيف يتم كتابة بيانات في XML

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#7

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

اقتباس
جميل جدا اخ فراس على هذا التابع

جزاك الله خيراً

الله يوفقك ويجعلك ذخر وينفع فيك أمة محمد

والله ولي التوفيق.

أخوكم أبو النور.

********************************************************************************

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#8

سلام

جدت هذا أيضاً في أحد المواقع و هو شغال

  
  DataList			: TStringlist; 
  doc				 : IXMLDOMDocument; 
  root, child, child1 : IXMLDomElement; 
  text1, text2		: IXMLDOMText; 
  nlist			   : IXMLDOMNodelist; 
  dataRecord		  : String; 





//Add the following function (makeXml) to your unit. makeXML generates the XML file by reading 

//data from the selected (Country) table. 

function TForm1.makeXml(table: TTable): Integer; 
var 
  i   : Integer; 
  xml,temp : String; 
begin 
 try 
  table.close; 
  table.open; 
  xml  := table.TableName; 
  doc  := CreateOleObject('Microsoft.XMLDOM')
		  as IXMLDomDocument; 
  //Set the root name of the xml
  file as that of the table name. 
  //In this case "country"
  root := doc.createElement(xml); 
  doc.appendchild(root); 
  //This while loop will go through the
  entire table to generate the xml file 
  while not table.eof do begin
   //adds the first level children , Records 
   child:= doc.createElement('Records'); 
   root.appendchild(child); 
   for i:=0 to table.FieldCount-1 do begin 
	 //adds second level children 
	child1 := doc.createElement
			  (table.Fields.FieldName); 
	child.appendchild(child1); 
	//Check field types 
	case TFieldType
	(Ord(table.Fields.DataType)) of 
	ftString: 
	begin 
	 if Table.Fields.AsString ='' then 
	  temp :='null'  //Put a default string  
	 else 
	  temp := table.Fields.AsString; 
	end; 

	ftInteger, ftWord, ftSmallint: 
	begin 
	 if Table.Fields.AsInteger > 0 then 
	  temp := IntToStr(table.Fields.AsInteger) 
	 else 
	  temp := '0'; 
	end; 

	ftFloat, ftCurrency, ftBCD: 
	begin 
	 if table.Fields.AsFloat > 0 then 
	  temp := FloatToStr(table.Fields.AsFloat) 
	 else 
	  temp := '0'; 
	end; 

	ftBoolean: 
	begin 
	 if table.Fields.Value then 
	  temp:= 'True' 
	 else 
	  temp:= 'False'; 
	end; 

	ftDate: 
	begin 
	 if (not table.Fields.IsNull) or 
		(Length(Trim(table.Fields.AsString))
		> 0) then 
	  temp := FormatDateTime
			   ('MM/DD/YYYY',
			   table.Fields.AsDateTime) 
	 else 
	  //put a valid default date 
	  temp:= '01/01/2000'; 
	end; 

	ftDateTime: 
	begin 
	 if (not table.Fields.IsNull) or 
		(Length(Trim(table.Fields.AsString))
		> 0) then 
	  temp := FormatDateTime
			  ('MM/DD/YYYY hh:nn:ss', 
			  table.Fields.AsDateTime) 
	 else 
	  //Put a valid default date and time 
	  temp := '01/01/2000 00:00:00'; 
	end; 

	ftTime: 
	begin 
	 if (not table.Fields.IsNull) or 
		(Length(Trim(table.Fields.AsString))
		> 0) then 
	  temp := FormatDateTime
			  ('hh:nn:ss', 
			  table.Fields.AsDateTime) 
	 else 
	   //Put a valid default time 
	  temp := '00:00:00';
	end; 
   end; 
	child1.appendChild(doc.createTextNode(temp)); 
  end; 
  table.Next; 
 end; 
  doc.save(xml+'.xml'); 
  memo1.lines.Append(doc.xml); 
  Result:=1; 
 except 
   on e:Exception do 
	 Result:=-1; 
 end; 
end; 





//Call the above function in Button1's OnClick event handler: 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
 if makeXml(table1)=1 then 
   showmessage('XML Generated') 
 else 
   showmessage('Error while generating XML File'); 
end;

{ From XML to Database
You have created the XML file from the existing data in the country table. So the data in the generated XML file and the country table are same. If you try to insert the data into the country table from the generated XML file without deleting the existing data in the country table it will show the error "Primary key violation". Therefore you must delete all the existing data from the table before going on with the following actions/code. 

Add another Button control (Button2) and a Memo to the main form. Add the next code to the OnClick event of Button2. The Memo is for displaying the status of insertion (sussess/failure). 
}


procedure TForm1.Button2Click(Sender: TObject); 
var 
   i,ret_val,count : Integer; 
   strData : String; 
begin 
  {
  Before inserting data in to the country table,
  make sure that the data in the generated xml
  file (country.xml) and country table (DBDEMOS)
  are different.
  }
  try 
   count:=1; 
   DataList:=TStringList.Create; 
   memo1.Clear; 
   doc := CreateOleObject('Microsoft.XMLDOM')
		  as IXMLDomDocument; 
	//Load country.xml file 
	doc.load('country.xml'); 
	nlist:=doc.getElementsByTagName('Records'); 
	memo1.lines.append('Table Name  :country'); 
	memo1.lines.append('---------------------'); 
	for i:=0 to nlist.Get_length-1 do begin 
	 travelChildren
		(nlist.Get_item(i).Get_childNodes); 
	 //Removes the first character(,)
	 //from dataRecord 
	 strData:=copy(dataRecord,2,length(dataRecord)); 
	 memo1.lines.append(strData); 
	 dataRecord:=''; 
	 ret_val:=insertintotable(Datalist); 
	 if ret_val=1 then 
	  memo1.lines.append
	   ('Data inserted successfully.............!') 
	 else if ret_val=-1 then 
	 memo1.lines.append
	 ('Error while updating.....Try again.....!'); 
	 memo1.lines.append
	 ('=======(Record no. :'+inttostr(count)+')'); 
	 DataList.Clear; 
	 count:=count+1; 
	end; 
   except 
	 on e:Exception do 
	   Showmessage(e.message); 
  end; 
end;

procedure TForm1.travelChildren
				 (nlist1:IXMLDOMNodeList); 
var 
   j:Integer; 
   temp:String; 
begin 
  for j:=0 to nlist1.Get_length-1 do begin 
  //node type 1 means an entity
  //and node type 5 means EntityRef 
  if((nlist1.Get_item(j).Get_nodeType= 1)
	 or (nlist1.Get_item(j).Get_nodeType=5)) then 
	travelChildren
	  (nlist1.Get_item(j).Get_childNodes) 
	//node Type 3 means a text node,
	//ie you find the data 
	else if(nlist1.Get_item(j).Get_nodeType=3) then 
	begin 
	 temp:= trim(nlist1.Get_item(j).Get_nodeValue); 
	 //this is for displaying a
	 //single record on the memo
	 dataRecord:=dataRecord+','+temp; 
	 //Datalist will contain one record
	 //after completing one full travel
	 //through the node list 
	 DataList.Add(temp); 
	end 
  end; 
 end; 

function TForm1.insertintotable
			   (stpt:TStringList):Integer; 
var 
  i:Integer; 
begin 
  table1.close; 
  table1.open; 
  table1.Insert; 
  for i := 0 to stpt.Count - 1 do begin 
	table1.Fields.AsVariant:= stpt; 
  end; 
  try 
	table1.post; 
	result:=1; 
  except 
	on E:Exception do 
	  result:=-1; 
  end; 
end;
#9

الحمد لله كأني أرى أنا الحياة والنشاط عاد لمنتدى الدلفي.

مشكور أخ mef.

وأهلاً وسهلاً بك في منتديات الفريق العربي للبرمجة عامة.

ومنتدى الدلفي خاصة .

والله ولي التوفيق.

أخوك أبو النور.

********************************************************************************

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#10

you are welcome

my old name is MS.programmer

and my new name is mef

thanks for Aboalnoor-Delphi7

#11

أخي في الله mef.

مشكور أما بالنسبة للاسم فأنت لم تنوه للأمر.

جزاك الله خيراً على كل حال.... وأهلاً بك مرة أخرى.

والله ولي التوفيق.

أخوكم أبو النور.

********************************************************************************

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#12

أعتذر عن الغيبة عن المنتدى, ولكن تعرفون مشاغل الحياة

شكرا لردودكم اقتراحاتكم

وفقكم الله

هذا الموضوع مغلق.

مواضيع مشابهة