سلام
هل من طريقة عامة لتصدير و إستيرادها البيانات أي من التنسيقات المشهورة xml مثلاً
يرجى من له تجربة أن ينورنا بها
شكرا
سلام
هل من طريقة عامة لتصدير و إستيرادها البيانات أي من التنسيقات المشهورة xml مثلاً
يرجى من له تجربة أن ينورنا بها
شكرا
ما المقصود بالضبط, هل تريد كود يقوم بعملية تصدير بيانات معينة إلى صيغة XML أم تريد أداة أم ماذا؟
سلام
أفضل كود مفتوح المصدر لكي أتحكم به و يكون شامل لكل التنسيقات
-waf
تم تعديل هذه المشاركة بواسطة mef في 15 أغسطس 2006 في 10:52
السلام عليكم
يوجد ادوات جاهزة .. للتصدير والأستيراد
مثل : SMExport component suite
وتسطيع انزال نسخة كاملة مع السورس من المواقع الصينينة .
كتبت مرة تابع يصدر إلى 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
جميل جدا اخ فراس على هذا التابع
فهو يقوم بتحويل قاعدة بيانات الى XML File و يمكن التعديل عليه بشكل سريع لدعم انواع بيانات اخرى
او لجعله يتحكم اكثر بماذا نريد ان نصدر كأن نمرر له اسم الجدول ....
يمكن الاسفادة من هذا التابع اذا كنت تريد التعامل مع قاعدة بيانات و تصدير اجزاء او كلها طبعا بعد ان تقوم بالتعديل المناسب
اما اذا كنت تريد ان تقوم بالتعامل مباشرة مع ملف XML من برنامجك اي تقوم ببناءه بنفسك(يعني تقوم بوضع ال Nodes بيدك)
فهنا يمكنك استخدام المكون XMLDocument حيث قام دلفي بتضمين هذا المكون كجزء من Delphi IDE
و لكن يجب ان تكون على اطلاع كامل و كافي على بنية XML و تفهم جميع العناصر المكونة لها
هناك قسم كامل في كتاب Mastring Delphi 7 اسمه Programming with the DOM يتحدث عن كيفية التعامل مع هذا المكون
و فيه العديد من الامثلة التي تبين كيف يتم سحب البيانات من XML و كيف يتم كتابة بيانات في XML
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
السلام عليكم ورحمة الله وبركاته.
اقتباسجميل جدا اخ فراس على هذا التابع
جزاك الله خيراً
الله يوفقك ويجعلك ذخر وينفع فيك أمة محمد
والله ولي التوفيق.
أخوكم أبو النور.
********************************************************************************
آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا
بـاع الحيـاة رخيـصـة لله والله اشـتـرى
خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون
فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون
موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات
إيميلي هو:Aboalnoor@maktoob.com
ياهو :adnanalabuo@yahoo.com
هوت ميل:AdnanAlabuo@hotmail.com
سلام
جدت هذا أيضاً في أحد المواقع و هو شغال
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;الحمد لله كأني أرى أنا الحياة والنشاط عاد لمنتدى الدلفي.
مشكور أخ mef.
وأهلاً وسهلاً بك في منتديات الفريق العربي للبرمجة عامة.
ومنتدى الدلفي خاصة .
والله ولي التوفيق.
أخوك أبو النور.
********************************************************************************
آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا
بـاع الحيـاة رخيـصـة لله والله اشـتـرى
خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون
فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون
موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات
إيميلي هو:Aboalnoor@maktoob.com
ياهو :adnanalabuo@yahoo.com
هوت ميل:AdnanAlabuo@hotmail.com
you are welcome
my old name is MS.programmer
and my new name is mef
thanks for Aboalnoor-Delphi7
أخي في الله mef.
مشكور أما بالنسبة للاسم فأنت لم تنوه للأمر.
جزاك الله خيراً على كل حال.... وأهلاً بك مرة أخرى.
والله ولي التوفيق.
أخوكم أبو النور.
********************************************************************************
آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا
بـاع الحيـاة رخيـصـة لله والله اشـتـرى
خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون
فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون
موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات
إيميلي هو:Aboalnoor@maktoob.com
ياهو :adnanalabuo@yahoo.com
هوت ميل:AdnanAlabuo@hotmail.com
أعتذر عن الغيبة عن المنتدى, ولكن تعرفون مشاغل الحياة
شكرا لردودكم اقتراحاتكم
وفقكم الله
هذا الموضوع مغلق.