PDA

View Full Version : تبدیل db از foxpro به sql2005



b.mahsa
چهارشنبه 05 خرداد 1389, 17:11 عصر
سلام ببخشید اگر سوالم تکراری .
خیلی گشتم ولی چیزی که می خواستم رو پیدا نکردم.
من برای خواندن اطلاعات از بانک foxpro از کد زیر استفاده کردم.


Dim ds As New DataSet
With OpenFileDialog1
.RestoreDirectory = True
.FileName = ""
.Filter = "DataBase Files (*.DBF)|*.DBF"
End With
Dim dir_name As String
Dim file_name As String
Dim result2 As DialogResult = OpenFileDialog1.ShowDialog()
If (result2 = System.Windows.Forms.DialogResult.OK) Then

Try
Dim myDataSource As String
myDataSource = OpenFileDialog1.FileName
With myDataSource
file_name = .Substring(.LastIndexOf("\") + 1, .LastIndexOf(".") - .LastIndexOf("\") - 1)
dir_name = .Substring(0, .LastIndexOf("\"))
End With
MsgBox(dir_name)
DataGridView1.DataSource = ""
ds = New DataSet
ds.Clear()

Dim connectionString As String = "Driver={Driver do Microsoft dBase (*.dbf)};collatingsequence=ASCII;defaultdir=" & dir_name & ";deleted=0;driverid=277;fil=dBase IV;maxbuffersize=2048;maxscanrows=8;pagetimeout=5; safetransactions=0;statistics=0;threads=3;uid=admi n;usercommitsync=Yes"
'Dim connectionString As String = "Driver={Driver do Microsoft dBase (*.dbf)};collatingsequence=ASCII;defaultdir=C:\BAN K;deleted=0;driverid=277;fil=dBase IV;filedsn=C:\BANK\sdf.dsn;maxbuffersize=2048;maxs canrows=8;pagetimeout=5;safetransactions=0;statist ics=0;threads=3;uid=admin;usercommitsync=Yes"
Dim myQueryString As String
myQueryString = "SELECT * FROM " & file_name
GetDataSetFromAdapter(ds, connectionString, myQueryString)
DataGridView1.DataSource = ds.Tables(0)

Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub

Private Function GetDataSetFromAdapter(ByVal dataSet As DataSet, ByVal connectionString As String, ByVal queryString As String) As DataSet
Using connection As New Odbc.OdbcConnection(connectionString)
Dim adapter As New Odbc.OdbcDataAdapter(queryString, connection)
Try
connection.Open()
adapter.Fill(dataSet)
DataGridView1.DataSource = dataSet.Tables("0")
Catch ex As Exception
MsgBox(ex.Message)
End Try

End Using
Return dataSet
End Function
تا اینجا کدم اجرا میشه و مشکلی نداره ولی الان می خوام که برای select ام شرط بزارم یعنی



myQueryString = "SELECT * FROM " & file_name & " where [personid]='00000000' "

همش error می ده و میگه syntax ام اشتباه .
ممنون میشم اگر کمکم کنین . خیلی فوریه

b.mahsa
چهارشنبه 05 خرداد 1389, 18:04 عصر
دوستان مشکلم حل شد باید اینطوری می نوشتم



myQueryString = "SELECT * FROM " & file_name & " where ([personid]='00000000') "
حالا یه مشکل دیگه دارم:ناراحت:
اطلاعات فارسیم به هم میریزه باید چی کار کنم که اطلاعات فارسی رو نشون بده؟؟؟؟

ashkan209
چهارشنبه 05 خرداد 1389, 18:16 عصر
تا اونجا که میدونم این سوال شما ، مشکل خیلیهاست.
دوستان اگه کدی با دات نت دارند که دیتا را از فاکس تحت داس بخونه و توی sql یا access بنویسه ، همچنین عملیات تبدیل فونت (از ایران سیستم به ویندوز) به درستی انجام بشه ، را اینجا بذارند ، ضمن اینکه باعث امتنان همه علاقمندان خواهد بود ،گامی است جهت حل یک مشکل تقریبا حل نشده .
من که خیلی به اینچنین کدی توی دات نت نیاز دارم که DBF تحت داس با فونت ایران سیستم را بخونه و درون تیبل معادلش توی Access و یا SQL
بنویسه و فونتها توی ویندوز صحیح باشند (و بالعکس) .
همه اینترنت رو زیر و رو کردم ، صحبت زیاد شده ، تاپیک تا دلت بخواد و تعدای کد تحت VB6 و Visual Foxpro موجود است ، همه جا هم گفتند ، اینو ببین برو تبدیل کن به اون چیزی که میخوای ، اما نشد که نشد .

b.mahsa
چهارشنبه 05 خرداد 1389, 19:17 عصر
دوستان اگر اطلاعاتی تو این زمینه دارید ممنون میشم بگید . من هیچ چیزی راجع به ایران سیستم و ... نمی دونم:ناراحت:

amin_iman82
چهارشنبه 05 خرداد 1389, 20:29 عصر
سلام خدمت دوستان.
به خاطر غیبتم منو ببخشید. خیلی سرم شلوغه.

این کد رو با vb.net 2010 نوشتم برای تبدیل متن نوشته شده با ایران سیستم به متن ویندوز.
با کمی دستکاری که زحمتش گردنه خودتون باشه برعکس این کار رو هم انجام میده.

البته دست دوستان در این تاپیک درد نکنه (http://barnamenevis.org/forum/showthread.php?t=142368&highlight=W2D_D2W)
من Dll مورد نظر رو از این تاپیک دانلود کردم و فقط با چند خط کد ازش استفاده کردم.

موفق باشید.

ashkan209
پنج شنبه 06 خرداد 1389, 18:55 عصر
دوست من ممنون بابت توجه و همچنین کدتون
ولی اینکه توی دات نت کانکشنی بنویسید که DBF Foxpro تحت داس را بخونه و فونتها را توی تیبل Access بنویسه ، داستانیه که به این راحتیا که فکر میکنین نیست، میگین نه ، امتحان کنید (یک فایل DBF فاکس پرو داس که رکورداش حاوی متن فارسی ایران سیستم باشه را انتخاب کنید و توی برنامتون بهش کانکت بشین (مثلا با ADO.Net) و سطرها و یا ستونها را با کانورتر خودتون تبدیل کنید توی اکسس بنویسید و بعدش تیبل اکسس را باز کنید ، ببینید همونیه که فکر می کنین ؟)
من که موهام سفید شد تو این کد ، ولی نشد که نشد ... ، شایدم خارج از محدوده سواد بنده است

b.mahsa
پنج شنبه 06 خرداد 1389, 19:00 عصر
سلام.
ممنون از هشداری که دادین.
من اطلاعات رو توی گرید دیدم درست بود . منظورتون اینه که موقع ذخیره تو database دوباره به هم میریزه؟

amin_iman82
پنج شنبه 06 خرداد 1389, 19:38 عصر
دوست من ممنون بابت توجه و همچنین کدتون
ولی اینکه توی دات نت کانکشنی بنویسید که DBF Foxpro تحت داس را بخونه و فونتها را توی تیبل Access بنویسه ، داستانیه که به این راحتیا که فکر میکنین نیست، میگین نه ، امتحان کنید (یک فایل DBF فاکس پرو داس که رکورداش حاوی متن فارسی ایران سیستم باشه را انتخاب کنید و توی برنامتون بهش کانکت بشین (مثلا با ADO.Net) و سطرها و یا ستونها را با کانورتر خودتون تبدیل کنید توی اکسس بنویسید و بعدش تیبل اکسس را باز کنید ، ببینید همونیه که فکر می کنین ؟)
من که موهام سفید شد تو این کد ، ولی نشد که نشد ... ، شایدم خارج از محدوده سواد بنده است

دوست عزیز شما میتونید همین فایل رو داخل Access باز کنید ، امتحان نکردم ولی فکر کنم حتی میشه به SQL هم Attach کرد.

داخل گراید نشون دادن هم راه داره.
شما اول اطلاعات رو داخل گراید میریزید ، بعد بوسیله یه For کل سطرها رو از ایران سیستم به فونت ویندوز تغییر میدید. اینطوری اطلاعات بصورت خوانا داخل گراید دیده میشه. (اصولی نیست ولی تنها راهه :لبخند:)

اگه احتیاج به ذخیره اطلاعات دارید که میشه بر عکس این کار رو انجام داد ، شما داخل TextBox متن رو مینویسید بعد تبدیلش میکنید به ایران سیستم و ذخیره میکنید.

موفق باشید.

amin_iman82
پنج شنبه 06 خرداد 1389, 19:39 عصر
دوست من ممنون بابت توجه و همچنین کدتون
ولی اینکه توی دات نت کانکشنی بنویسید که DBF Foxpro تحت داس را بخونه و فونتها را توی تیبل Access بنویسه ، داستانیه که به این راحتیا که فکر میکنین نیست، میگین نه ، امتحان کنید (یک فایل DBF فاکس پرو داس که رکورداش حاوی متن فارسی ایران سیستم باشه را انتخاب کنید و توی برنامتون بهش کانکت بشین (مثلا با ADO.Net) و سطرها و یا ستونها را با کانورتر خودتون تبدیل کنید توی اکسس بنویسید و بعدش تیبل اکسس را باز کنید ، ببینید همونیه که فکر می کنین ؟)
من که موهام سفید شد تو این کد ، ولی نشد که نشد ... ، شایدم خارج از محدوده سواد بنده است

دوست عزیز شما میتونید همین فایل رو داخل Access باز کنید ، امتحان نکردم ولی فکر کنم حتی میشه به SQL هم Attach کرد.

داخل گراید نشون دادن هم را داره.
شما اول اطلاعات رو داخل گراید میریزید ، بعد بوسیله یه For کل سطرها رو از ایران سیستم به فونت ویندوز تغییر میدید. اینطوری اطلاعات بصورت خوانا داخل گراید دیده میشه. (اصولی نیست ولی تنها راهه :لبخند:)

اگه احتیاج به ذخیره اطلاعات دارید که میشه بر عکس این کار رو انجام داد ، شما داخل TextBox متن رو مینویسید بعد تبدیلش میکنید به ایران سیستم و ذخیره میکنید.

موفق باشید.

ashkan209
پنج شنبه 06 خرداد 1389, 19:47 عصر
سلام.
منظورتون اینه که موقع ذخیره تو database دوباره به هم میریزه؟
منظورم همونیه که نوشتم ، نمیدونم کد و کانورت شما چیه و آیا همونیه که شرحش دادم ؟!
اما منظور من اینه ، بازم میگم {dbf داس با کاراکتر فارسی ایران سیستم که درون یه برنامه دات نت قراره با ADO.net خونده بشه و بعدش کانورت کدپیج بشه (با کانورترها و کلاسهای موجود نوشته شده توسط دوستان همین سایت و یا هر چیزی) و string کانورت شده که حالا به زعم ما داری کد پیج ویندوزیه ، رو با ADO.net (JET) و توی همون برنامه دات نت توی یه تیبل اکسس بنویسیم ، و حالا اکسس را باز کنیم و یا تیبل را توی برناممون توی یه گرید ببینیم} کاراکترها همچنان ناخوانا هستند:متفکر:

شاید برای دوستان کاربرد عملی این چیزی که گفتم مورد سوال باشد. >>> نرم افزار حقوق و دستمزد که با دات نت می نویسیم که قراره فایلهای بیمه تامین اجتماعی نیز تولید کنه (1- این فایلها می بایست dbf با کد پیج داس و فونت ایران سیستم باشند ، بنابراین به Windows to Dos Converter تو برنامه نیاز داریم . 2- ضمنا همین نرم افزار می بایست فایل مشاغل را از یک فایل dbf با کد پیج داس و فونت ایران سیستم ،که تامین اجتماعی در اختیارمون میذاره بخونه و برای کاربردهای بعدی توی دیتابیس ویندوزیمون کانورت و ذخیره کنه ، بنابراین به Dos to Windows Converter نیاز داریم

حالا اگه دوستان درباره این موضوع بجایی رسیده اند (توی دات نت) لطفا ایده و یا نمونه کدشون رو اینجا بذارن

ashkan209
پنج شنبه 06 خرداد 1389, 19:59 عصر
دوست عزیز شما میتونید همین فایل رو داخل Access باز کنید ، امتحان نکردم ولی فکر کنم حتی میشه به SQL هم Attach کرد.

داخل گراید نشون دادن هم را داره.
شما اول اطلاعات رو داخل گراید میریزید ، بعد بوسیله یه For کل سطرها رو از ایران سیستم به فونت ویندوز تغییر میدید. اینطوری اطلاعات بصورت خوانا داخل گراید دیده میشه. (اصولی نیست ولی تنها راهه :لبخند:)

اگه احتیاج به ذخیره اطلاعات دارید که میشه بر عکس این کار رو انجام داد ، شما داخل TextBox متن رو مینویسید بعد تبدیلش میکنید به ایران سیستم و ذخیره میکنید.

موفق باشید.

ممنون
ولی عینا چیزی که عرض کردم منظورمه ، بحث سه تا چیزه مجزا و بغرنجه 1- دیتاهایی که بین دو تا دیتابیس با پلاتفرم کاملا متفاوت قراره رد و بدل بشن 2- دیتاهایی که با دو کدپیج متفاوت قراره رد وبدل بشن 3 - هر کدوم از این کد پیجها متعلق به یک پلاتفرم دیتابیسه.
ضمنا قبلا من این نرم افزار رو با VB6 و با مبدل کدپیج و انتقال بین دو دیتابیس مجزا انجام داده ام (دست و پا شکسته و با کلی ترفند و راه حلهای عجیب و غریب که خودم هم ازش خوشم نیومد) ، ولی الان میخام همینو با دات نت بنویسم !!
راهها و کانورترهای زیادی تست کرده ام ، به جواب نرسیدند

amin_iman82
پنج شنبه 06 خرداد 1389, 20:35 عصر
به خدا میشه ، چرا باور نمیکنید. :لبخند:

من اول بانک FoxPro رو با Access 2007 باز کردم.
بعد یه بانک Access درست میشه که لینک میشه به بانک FoxPro و جداول اون رو نشون میده.

بانک Access رو داخل گراید اول نشون دادم ، بعد داخل گراید بعدی اطلاعات رو دستی تبدیل کردم.

حالا میشه اطلاعات گراید دوم رو داخل هر بانکی مثلا SQL Sever ذخیره کرد.

اگه بازم نشد بگید :بامزه:

کد رو کمی تغییر دادم ، این بهتر جواب میده

http://www.iranimg.com/images/83982993927758787323.png

ashkan209
پنج شنبه 06 خرداد 1389, 22:31 عصر
بی نهایت ممنون از توجهتون و همچنین بابت کدتون
اما Solution که باز کردم روی خط اول خطا داشت که نیاز به Add شدن dll به refrence بود (err1)
در زمان add کردن هم خطای دیگری مشاهده شد ، که نهایتا dll به برنامه add نشد و نتونستم تست کنم (err2)
ضمنا این Dll به پروژه خودم هم add نشد ، بنا به همون دلیل خطای دوم (err2)

b.mahsa
پنج شنبه 06 خرداد 1389, 22:51 عصر
سلام
یک کمی dll بد قلقه بد نصب میشه.
اول تو toolbox از منوی choos item اضافش کنید بعد add refrenso بزنید add میشه. البته یه بار visual studio رو reset کنید.:لبخند:

ashkan209
پنج شنبه 06 خرداد 1389, 23:23 عصر
سلام
یک کمی dll بد قلقه بد نصب میشه.
اول تو toolbox از منوی choos item اضافش کنید بعد add refrenso بزنید add میشه. البته یه بار visual studio رو reset کنید.:لبخند:

ممنون ، add شد . میرم که تستش کنم

ashkan209
شنبه 08 خرداد 1389, 12:34 عصر
آقا AMIN دستتون درد نکنه بابت dll و اون تکه کد
دارم توی برنامه ام تستش میکنم ، فعلا قسمت داس به ویندوزش تست شد و درست عمل میکنه ، فقط یه مشکل (تا اینجای کار) این dll داره ، اونم اینه که روی حروف چندتایی فارسی (چسبان و غیر چسبان) بصورت هوشمند عمل نمیکنه و همه رو می چسبونه بهم
مثلا "لحاف باف" کانورت میشه به "لحافباف" و موردهای اینچنینی
ضمنا یه دونه dll هست که ماله تامین اجتماعیه و دارای دوتا کلاس IranToWin و WinToIran هست و همین dllتوی نرم افزار خودشون بخوبی و کاملا صحیح عمل میکنه ، اما من کانورتهایی که باهاش انجام دادم ، خروجیهاش همچنان کاراکترهای اجق وجق بود . اگه فرصت کردید شما هم یه تست انجام بدین
بازم ممنون

M_Man_M
شنبه 08 خرداد 1389, 22:09 عصر
با سلام
قابل توجه دوستاني كه داخل اين تاپيك كار مي كنند :
1- ورژن فايل dll ي كه استفاده مي كنيد پايينه و مشكلاتي هم داشته كه در ريويژن هاي بعديش برطرف شده ( فعلاً آخرين ورژنش 1003 هست ) بهتره دانلود كنيد و از اون استفاده كنيد .
2- در جواب دوستي كه گفته متن ها به هم مي چسبند مثل "لحاف باف" كه به "لحافباف" تبديل شده :
وقتي شما متن داس رو وارد تابع مي كنيد دوحالت وجود داره يا بهتره بگم پيش مياد :
*- يا اينكه مي خواهيد طول متن شما تغييري نكنه . براي اينكه در طول برنامه ممكنه يك error پيش بياد مثلاً طول فيلدي كه انتخاب كرديد پنجه (5) ولي كلمه تحت داس شما بدون حرف فاصله " " پنج حرفه كه در صورت اضافه كردن فضاي خالي برنامه error ميده
*- يا اينكه تعداد حروف براي شما مهم نيست و ميخواهيد كه كلمات درست نوشته بشه
==> براي همين منظور يك پارامتر دومي با مقدار boolean در تابع تبديلي استفاده شده كه مقدار پيش فرض آن false هست و بصورت روش اول عمل مي كنه . اگه اين مقدار رو true بديد مثل روش دوم عمل مي كنه

با تشكر

ashkan209
شنبه 08 خرداد 1389, 22:42 عصر
با سلام
قابل توجه دوستاني كه داخل اين تاپيك كار مي كنند :
1- ورژن فايل dll ي كه استفاده مي كنيد پايينه و مشكلاتي هم داشته كه در ريويژن هاي بعديش برطرف شده ( فعلاً آخرين ورژنش 1003 هست ) بهتره دانلود كنيد و از اون استفاده كنيد .
2- در جواب دوستي كه گفته متن ها به هم مي چسبند مثل "لحاف باف" كه به "لحافباف" تبديل شده :
وقتي شما متن داس رو وارد تابع مي كنيد دوحالت وجود داره يا بهتره بگم پيش مياد :
*- يا اينكه مي خواهيد طول متن شما تغييري نكنه . براي اينكه در طول برنامه ممكنه يك error پيش بياد مثلاً طول فيلدي كه انتخاب كرديد پنجه (5) ولي كلمه تحت داس شما بدون حرف فاصله " " پنج حرفه كه در صورت اضافه كردن فضاي خالي برنامه error ميده
*- يا اينكه تعداد حروف براي شما مهم نيست و ميخواهيد كه كلمات درست نوشته بشه
==> براي همين منظور يك پارامتر دومي با مقدار boolean در تابع تبديلي استفاده شده كه مقدار پيش فرض آن false هست و بصورت روش اول عمل مي كنه . اگه اين مقدار رو true بديد مثل روش دوم عمل مي كنه

با تشكر
دوست من ، ممنون بابت توجهتون
1- ورژن جدید رو اگه در اختیار دارین ، ممنون میشم همینجا up کنین یا لینکش بذارین
2-تکنیک رو تست کردم ، حق با شما بود . که بنده ازش مطلع نبودم
سپاس فراوان

M_Man_M
شنبه 08 خرداد 1389, 22:52 عصر
با سلام

براي دريافت آخرين ريويژن به آدرس زير مراجعه كنيد :

http://barnamenevis.org/forum/showthread.php?t=142368&highlight=W2D_D2W&page=6