PDA

View Full Version : سوال: چگونه يك بانك DBF فكس تحت ويندوز يا EXCEL را IMPORT كنم؟



ali_abbasi22145
پنج شنبه 12 دی 1387, 08:34 صبح
سلام
من با SQL SERVER2000 با ADO دلفي 7 وصل شده ام .
حال چگونه يك بانك DBF فاكس پرو تحت ويندوز يا EXCEL را در خود برنامه دلفي IMPORT كنم؟ (نه با SQL SERVER IMPORTER )

ghabil
جمعه 13 دی 1387, 08:08 صبح
میشه یکجوری بنویسی که ما هم که فارسیمون قوی نیست بفهمیم؟
به هر حال نحوه کار با EXCEL و FOXPRO بوسیله درایورهاشون که در ویندوز هست، بارها و بارها و بازهم بارها در اینجا توضیح داده شده ، یک جستجوی کوچولو بکن.

ali_abbasi22145
شنبه 14 دی 1387, 09:29 صبح
سلام
جستجو كردم و روشهاي با SQL SERVER IMPORTER پيدا كردم كه به درد من نمي خورد.
كاربرم مي خواهد با فشار دادن يك دگمه در برنامه دلفي خودم بانك FOXPRO را IMPORT كند.

ghabil
یک شنبه 15 دی 1387, 01:45 صبح
DBF (http://www.barnamenevis.org/forum/showthread.php?t=66781)
ECXEL (http://barnamenevis.org/forum/showthread.php?t=52495)

ali_abbasi22145
یک شنبه 15 دی 1387, 16:09 عصر
سلام و تشكر

من با روش آقاي خورسندي بانك excel را به دلفي آوردم و اين هم روش ايشان:
------------------------------------------------------------------------------------------------------------------
نوشته شده توسط m-khorsandi
شما میتونید از ADO برای اینکار استفاده کنید به این صورت که:

از یک ADOConnection استفاده کنید و روی اون دوبار کلیک کنید
تا ویرایشگر ConnectionString باز بشه، روی دگمه Build کلیک کنید تا
فرم Data Link Properties باز بشه، از صفحه اول از بین Provider ها
Microsoft.Jet.OLEDB.4.0 رو انتخاب کنید و به صفحه بعد یعنی Connection برید
تو این صفحه آدرس فایل و نام فایل رو در جایی که مشخص هست تایپ کنید و به
صفحه آخر یا همون All برید و از بین ویژگیهای لیست شده Extended Properties رو
دوبار کلیک کنید و در فرمی که باز میشه در قسمت Value عبارت Excel 8.0 رو بنویسید.
فرمهای باز شده رو یکی یکی OK کنید .

ADOConnectionرو انتخاب کنید و ویژگی LoginPrompt رو False کنید تا دیگه ازتون Username و
Password رو نپرسه.

حالا یک ADOTable روی فرمتون بگذارید و اون رو به ADOConnection وصل کنید.

موقعیکه میخواهید لیست جداول (Tablename) رو ببینید تمام صفحات فایل Excel رو به همراه
یه علامت $ میاره که اگه به همین شکل هم شما انتخاب کنید و اون رو Open کنید با Error
مواجه میشید ، پس جدول رو انتخاب کنید و اون رو داخل براکت [] بگذارید.

حالا میتونید استفاده کنید.
-------------------------------------------------------------------------------------------------------------

ali_abbasi22145
یک شنبه 15 دی 1387, 16:15 عصر
سلام
فرض كنيد من دو جدول مثل شكل زير در دلفي آورده ام و اطلاعات جدول IMPORT را بخواهيم به ته جدول اصلي برنامه اضافه كنيم چه كدي بايد بنويسيم؟
مثلا:اطلاعات ركوردها به شكل فيلد ID به sicard و فيلد FNAME به first_name و فيلد LNAME به last_name اضافه گردد.

ali_abbasi22145
شنبه 21 دی 1387, 09:41 صبح
كسي نبود راه حلي ارائه دهد

rezazd
یک شنبه 22 دی 1387, 13:28 عصر
كسي نبود راه حلي ارائه دهد
شما با استفاده bdeadmin یا odbc یک الیاس برای اتصال به فایل فاکس پرو یا اکسل بسازید
در روی فرمتان یک bdetable انداخته و بجای dbname از ان الیاس استفاده کنید
بقیه اش هم دیگه راحت است

شما با استفاده از الیاس ها فایل هایی مثل اکسل یا فاکس پرو را به کامپوننت ادوتیبل یا بی دی ئی تیبل یا کوری میتونید وصل کنید

ali_abbasi22145
دوشنبه 23 دی 1387, 12:50 عصر
سلام

كد نوشته شده من به خوبي import يك جدول به جدول ديگر انجام مي دهد كه براي استفاده ديگر دوستان اينجا مي گذارم:
//MainForm.ADOTable1.DisableControls;
MainForm.ADOTable2.First;
MainForm.ADOTable1.Last;
IsExitFromLoop := False;

while( not(MainForm.ADOTable2.Eof)) do
begin
if IsExitFromLoop then Break;

MainForm.ADOTable1.Insert;

MainForm.ADOTable1.FieldByName('employee_number'). AsString := MainForm.ADOTable2.FieldByName('employee_number'). AsString;
MainForm.ADOTable1.FieldByName('national_code').As String := MainForm.ADOTable2.FieldByName('national_code').As String;
MainForm.ADOTable1.FieldByName('id').AsString := MainForm.ADOTable2.FieldByName('id').AsString;
MainForm.ADOTable1.FieldByName('birth_certificate' ).AsString := MainForm.ADOTable2.FieldByName('birth_certificate' ).AsString;
MainForm.ADOTable1.FieldByName('first_name').AsStr ing := MainForm.ADOTable2.FieldByName('first_name').AsStr ing;
MainForm.ADOTable1.FieldByName('last_name').AsStri ng := MainForm.ADOTable2.FieldByName('last_name').AsStri ng;
MainForm.ADOTable1.FieldByName('title').AsString := MainForm.ADOTable2.FieldByName('title').AsString;

MainForm.ADOTable1.Post;
MainForm.ADOTable2.Next;

end;//end while

سوال: چه كدي بنويسيم كه اگر يك فيلد در جدول مبدا import يعني ADOTable2 نداشته باشيم كار كپي انجام ندهد؟
يعني جدول مبدا import كه ADOTable2 مي باشد فاقد فيلد father_name است و در جدول مقصد ADOTable1 فيلد father_name را داريم آنوقت فيلد father_name كپي نشود.

ghabil
دوشنبه 23 دی 1387, 20:18 عصر
کد نوشته شده توسط شما رو میشد اینطوری هم نوشت ، دیگه مشکلای که شما گفتی رو هم نداره:



var
AField: TField;
i: Integer;
begin
with MainForm.ADOTable2 do
begin
First;
while not Eof do
begin
MainForm.ADOTable1.Append;
for i:= 0 to FieldsCount - do
begin
AField:= MainForm.ADOTable1.FieldByName(Fields[i].FieldName);
if Assigned(AField) then
AField.AsString = Fields[i].AsString;
end;
MainForm.ADOTable1.Post;
Next;
end;
end;
end;


من کد رو کامپایل نشده گذاشتم، ممکن مشکل سینتکسی داشته باشه ولی روش همینه.