آنچه در ادامه میخوانید راهکار عملی تبدیل بانک اطلاعاتی فاکسپرو تحت داس(شامل دادههایی به زبان فارسی) به سایر بانکهای اطلاعاتی رایج امروزی است.
تصور کنید از شما خواسته شده است، نرمافزار شرکتتان را که تحت داس بوده ارتقا دهید و به نسخه ویندوزی و یا حتی تحت وب تبدیل کنید؛ اول قدم تبدیل بانک اطلاعاتی(به احتمال زیاد فاکسپرو) به یکی از بانکهای اطلاعاتی رایج خواهد بود؛ به احتمال زیاد برای انجام چنین کاری سراغ وب خواهید رفت و برای یافتن نرمافزار مبدل این کار، واژههای کلیدی foxpro database converter را گوگل خواهید کرد، جستجوی شما نتایجی زیادی به شما برمیگرداند. با کمک یکی از نرمافزارهایی که یافتهاید(نظیر Full Convert Enterprise) اقدام به تبدیل بانک اطلاعتی مورد نظرتان میکنید اما با مراجعه به بانک اطلاعاتی جدید میبینید که دادههای فارسی موجود پس از تبدیل به هم ریختهاند، در ابتدا شاید تصور کنید که مبدل مورد استفادهی شما موجب خرابی دادههای فارسی شده است و قصد امتحان مبدل دیگری کنید و یا اینکه مشکل به وجود آمده را در Encoding استفاده شده بدانید و اما در پایان درخواهید یافت مشکل با هیچکدام از راه حلهای شما حل نخواهد شد.

و اما علت چیست؟ باید بدانید در زمان متداول بودن استفاده از سیستمعامل داس هنوز استفاده از استانداردهایی به مانند Unicode رایج نشده بود تا بتوان با بکارگیری آنها به زبانهای مختلف بنویسند و داس نیز از کدهای اسکی(ASCII) تنها برای نمایش حروف الفبای لاتین، اعداد و کاراکترهای ویژه استفاده میکرد.

با این حال برنامهنویسان برای تایپ به زبانهای دیگر نظیر فارسی در برنامههایشان دست به دامن ابزارهایی میشدند، به طور مثال نرمافزار کم حجمی به نام (EGAF.COM) که با تبدیل(map کردن) کدهای اسکی غیرقابل چاپ به کاراکترهای فارسی، فارسی نوشتن را امکان پذیر کرده بود.
(یادآوری: اگر کاربر داس بودهاید شاید به خاطر بیاورید که قبل اجرای برنامههای فارسی EGAF را اجرا میکردیم)
احتمالا با خواندن توضیحات بالا متوجه شدهاید که چرا دادههای فارسی بانک اطلاعاتی پس از تبدیل به هم ریخته نشان داده شدهاند، در واقع این کاراکترهای به هم ریخته همان کاراکترهای اسکی غیر قابل چاپ در داس بودهاند که اینک بدین گونه نمایش داده شده اند.
و اما راه حل: در ادامه خواهید دید با تغییر کاراکترها با استفاده از یک برنامه ساده VBScript چگونه مشکل بوجود آمده را حل میکنیم.
راه حل قدم به قدم:
1- تهیه نسخه متنی از دادهها:
دستورات زیر را در محیط Command بانک اطلاعاتی فاکسپرو وارد نمایید:
USE ?
SET PRINTER ON
SET PRINTER TO “C:\DB.txt”
LIST TO PRINTER
(نکته: پس از وارد کردن خط اول لازم است بانک اطلاعاتی خود را انتخاب نمایید.)
با انجام صحیح دستورات بالا دیتابیس شما در یک فایل متنی با نام DB.txt در درایو C کامپیوترتان ذخیره میگردد.
2- باز کردن دادهها با استفاده از اکسل:
با استفاده از اکسل فایل متنی بالا را باز کنید، پنجره text import wizard باز میشود که بایستی از قسمت Original data Type آن گزینه Fixed width، از قسمت File Original گزینه Windows(ANSI) و از قسمت Start Import at Row مقدار یک (1) را وارد کنید.
3- ایجاد ماکرو مبدل:
با استفاده از نرم افزار Visual Basic Editor همراه نرمافزار آفیس ماکرو Convert را با کدهای زیر تولید کنید:
Sub convert()
Dim map(255) As Integer
Dim myString As String
Dim myChar As String * 1
For i = 0 To 255
map(i) = i
Next
map(128) = 48: map(129) = 49: map(130) = 50: map(131) = 51:
map(132) = 52: map(133) = 53: map(134) = 54: map(135) = 55:
map(136) = 56: map(137) = 57: map(138) = 161: map(139) = 45:
map(140) = 191: map(141) = 194: map(142) = 198: map(143) = 193:
map(144) = 199: map(145) = 199: map(146) = 200: map(147) = 200:
map(148) = 129: map(149) = 129: map(150) = 202: map(151) = 202:
map(152) = 203: map(153) = 203: map(154) = 204: map(155) = 204:
map(156) = 141: map(157) = 141: map(158) = 205: map(159) = 205:
map(160) = 206: map(161) = 206: map(162) = 207: map(163) = 208:
map(164) = 209: map(165) = 210: map(166) = 142: map(167) = 211:
map(168) = 211: map(169) = 212: map(170) = 212: map(171) = 213:
map(172) = 213: map(173) = 214: map(174) = 214: map(175) = 216:
map(224) = 217: map(225) = 218: map(226) = 218: map(227) = 218:
map(228) = 218: map(229) = 219: map(230) = 219: map(231) = 219:
map(232) = 219: map(233) = 221: map(234) = 221: map(235) = 222:
map(236) = 222: map(237) = 223: map(238) = 223: map(239) = 144:
map(240) = 144: map(241) = 225: map(243) = 225: map(244) = 227:
map(245) = 227: map(246) = 228: map(247) = 228: map(248) = 230:
map(249) = 229: map(250) = 229: map(251) = 229: map(252) = 237:
map(253) = 237: map(254) = 237:
For Each c In Selection
If c.Value <> "" Then
myString = c.Value
temp = ""
For i = Len(myString) To 1 Step -1
myChar = Chr(map(Asc(Mid(myString, i, 1))))
temp = temp + myChar
Next
c.FormulaR1C1 = temp
End If
Next
End Sub
4- اجرای ماکرو و تبدیل دادهها به فارسی:
ماکرو convert را بر روی فیلدهایی که دادههایی فارسی دارند، اعمال نمایید تا به فارسی تبدیل شوند.
بدین ترتیب دادههای موجود در بانک اطلاعاتی شما به گونهای در خواهد آمد که در محیط ویندوز نیز قابل مشاهده و استفاده گردد، حالا به راحتی میتوانید فایل اکسل موجود را به اکسس و سپس با خیالی آسوده به دیتابیسهای مورد نظرتان تبدیل نمائید.

