PDA

View Full Version : سوال: انتقال اطلاعات جدول بانک اکسس به MySql



khazaie01
پنج شنبه 03 دی 1388, 21:17 عصر
سلام دوستان
یک بانک اکسس دارم که یک جدول داره و یک بانک MySql که جدولی مشابه جدول بانک اکسس داره ...
میخوام برنامه ای بنویسیم که اطلاعات جدول بانک اکسس را به جدول بانک MySql اضافه کنه ...
نرم افزار های آماده برای اینکار هست ولی یه نرم افزار خصوصی میخوان ...
هر دو فایل روی یک سیستم لوکال هستند...
برنامه قراره فایل هر دو بانک را بگیره و اطلاعات اکسس را وارد MySql کنه .

بهترین روش برای انجام این کار چیه ؟
با دلفی راحت تر انجام خواهد شد یا با php ؟

ممنووووون

h.emamie
جمعه 04 دی 1388, 09:37 صبح
اگر با php آشنا هستيد به سادگي مي تونيد اين كار رو انجام دهيد ، فقط لازم هست كه يك connection به بانك access از طريق توابع odbc ايجاد كنيد و يك connection هم از طريق توابع mysql ، روش كار هم اينطوريه :

ارتباط با access :
ابتدا بايد يكسري تنظيمات رو داخل ويندوز انجام بديد كه مراحلش در زير مي زارم :




Open the Administrative Tools icon in your Control Panel.
Double-click on the Data Sources (ODBC) icon inside.
Choose the System DSN tab.
Click on Add in the System DSN tab.
Select the Microsoft Access Driver. Click Finish.
In the next screen, click Select to locate the database.
Give the database a Data Source Name (DSN).
Click OK.



بعدش هم با اين دستورات در php مي تونيد به بانك access وصل بشيد :




$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
odbc_fetch_row($rs) ;
$compname=odbc_result($rs,"CompanyName");
odbc_close($conn);



ارتباط با MySql :



$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Not connected : ' . mysql_error());
}

// make foo the current db
$db_selected = mysql_select_db('DataBase', $link);
if (!$db_selected) {
die ('Can\'t use DataBase : ' . mysql_error());
}

$sql="SELECT * FROM customers";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

mysql_close($link);

khazaie01
جمعه 04 دی 1388, 09:44 صبح
ممنون دوست عزیز
منظور من بهترین روش برای انجام این کار بود...آیا باید یکی یکی رکوردها را از جدول اکسس بخونم و وارد جدول MySql کنم ؟
و سوال دوم اینکه به غیر از ODBC روش دیگه ای برای دستیابی به بانک اکسس نیست ؟ یه جوری که نیاز به تنظیمات ODBC نداشته باشه و فقط فایل اکسس را بگیره . با ADO و Provider Jet4.0 و .....
ممنووووووووووون

h.emamie
جمعه 04 دی 1388, 15:42 عصر
اين روشي كه گفتم واقعا روش خيلي خوبيه و احتمالا از طريق php بهترين روش هست .
من روش ديگه اي غير از odbc بلد نيستم .

در رابطه با اينكه پرسيده بودي بايد يكي يكي ركوردها رو بخوني بايد بگم اينطوري كه فكر مي كني نيست ، روش كار به اين صورته كه‌ :

شما يك كوئري مي نويسي كه تمام ركوردها رو از بانك access بخونه بعدش دستور odbc_fetch_row رو داخل يك while مي زاري تا يكي خودش تمام ركوردها رو بخونه و به در هر دفعه اجراي while شما يك ركورد داخل بانك ماي اس كيو ال insert مي كني ، به همين سادگي .




while($res = odbc_fetch_row($rs))
{
$name = $res['name'];
mysql_query("insert into table set `name` = '$name'",$link_mysql);
}

khazaie01
جمعه 04 دی 1388, 19:25 عصر
ممنون دوست عزیز
منظور من هم همین بود ... این هم همون خوندن رکورد به رکورد دیگه ...
یه سوال دیگه

mysql_connect('localhost', 'mysql_user', 'mysql_password');
جای لوکال هاست آدرس سرور اصلی را دادم یوزر و پس هم درست اما وصل نشد... مثل اینکه نمیشه از ماشین دیگه ریموت کرد و برای اینکار باید یه سری تنظیمات رو سرور عوض بشن و از نظر امنیتی چندان جالب نیست.پس یا باید فایل اکسس را به سرور منتقل کنم که در اینصورت سرور حتما باید ویندوز باشه ... یا برنامه را روی سیستم خودم اجرا کنم و بانک MySql را به سرور انتقال بدم اما این بانک باید به بانک اصلی رو سرور اضافه بشه چجوری باید این کار را کرد ؟

چجوری میشه نام تمام جدولهای بانک و فیلدهای یک جدول را بدست آورد ؟ تو هر دو هم اکسس هم MySql

ممنوووووووووووون

dr-solomons
جمعه 04 دی 1388, 20:53 عصر
با سلام
يه راه حل ساده تر هم هست
من ديتابيس سايت خبري خبرچين رو با چندين هزار خبر و 15 جدول و البته با كد پيج 1256 به mysql تبديل كردم با كد پيج utf8
ابتدا بانكت رو در access باز كن و از قسمت export يه export با پسوند html بگير
اگه ميخواي كد پيجشو تغيير بدي فايل html رو باز كن و در خطوط اول كد پيج رو تغيير بده
در انتها هم نرم افزار navicat (يه نرم افزار مديريت mysql هست مثل phpmyadmin ) رو نصب كن و بعد از ساختن يه ديتابيس اون رو import كن
حسن navicat نسبت به phpmyadmin اين هست كه:
1- براي import فايل بيشتر از 2 mb رو هم مي توني استفاده كني
2- 12 پسوند رو مي توني import و export كني (حتي .mdb ) ولي بهترين راه با پسوند html هست.
در ضمن ميتوني با اين نرم افزار به ديتابيس online هم متصل بشي (البته اگه wild host رو با % در Cpanel تنظيم كرده باشي)
حجم اين نرم افزار حدود 10 mb است

dr-solomons
شنبه 05 دی 1388, 10:18 صبح
چجوری میشه نام تمام جدولهای بانک و فیلدهای یک جدول را بدست آورد ؟ تو هر دو هم اکسس هم MySql
ممنوووووووووووون

ديتابيس access با asp با دستورات مربوط به OpenSchema

khazaie01
شنبه 05 دی 1388, 11:06 صبح
ممنون دوست عزیز ولی ازم خواستن با php همچین برنامه ای بنویسم ... منم قبل نوشتن این تاپیک سرچ کردم نرم افزارهای زیادی برای تبدیل اکسس به MySql بود ...
الان میخوام با php بنویسمش فقط نمیدونم چجوری میشه لیست جدولهای بانک و لیست فیلدهای جدول را بدست آورد
ممنووووووووون

h.emamie
شنبه 05 دی 1388, 11:26 صبح
مگه شما نگفتي كه جدول هاي اكسس و ما اس كيو ال مشابه هم هستند ، خب شما كه فايل اكسس رو داري پس جدول هاي فايل access و فيلدهاش رو داري پس ماي اس كيو ال رو هم داري ، اگر هم فكر مي كني ماي اس كيو ال اسم جدول هاش متفاوت باشه برو توي phpmyadmin سرور نگاه كن ديگه .


ولي اگر منظورت با php هست از اين توابع بايد استفاده كني :

براي اكسس :




odbc_tables ( resource connection_id [, string qualifier [, string owner [, string name [, string types]]]] );
odbc_columns ( resource connection_id [, string qualifier [, string schema [, string table_name [, string column_name]]]] );



براي php :



mysql_list_tables ( string database [, resource link_identifier] );
mysql_list_fields ( string database_name, string table_name [, resource link_identifier] );

khazaie01
شنبه 05 دی 1388, 11:31 صبح
ممنون دوست عزیز بله گفتم اما به نظرم جالب اومد که کاربر بانکش راوارد کنه و جدولش را انتخاب کنه و فیلدها...
ممنوووون

khazaie01
دوشنبه 07 دی 1388, 19:57 عصر
یه مشکل چرا فارسی ها را درست وارد نمیکنه ؟

khazaie01
چهارشنبه 09 دی 1388, 09:49 صبح
تو اکسس انکودینگ Windows-1256 هست و به همین فرمت هم تو بانک MySql میریزه چکار کنم تا با utf8 encoding تو بانک بریزه ؟!

h.emamie
چهارشنبه 09 دی 1388, 20:58 عصر
متن هايي كه از اكسس مي خونيد اول با اين تابع تبديل كنيد :



$text = 'windows_1256_arabic_text_string';
$new_text = iconv("windows-1256", "UTF-8", $text);

khazaie01
چهارشنبه 09 دی 1388, 21:04 عصر
ممنوووون تست میکنم ببینم کار میکنه

khazaie01
پنج شنبه 10 دی 1388, 17:05 عصر
ممنون دوست عزیز
درست شد . فقط الان نمیدونم چجوری میشه تو حلقه تعداد رکوردهایی که ذخیره شده را به کاربر نشون داد ...