OleDbConnection String for FoxPro2.6

aminir

Member
سلام
من برای ارتباط با یک دیتابیس قدیمی FoxPro2.6 به یک OleDbConnection String نیاز دارم
از این استفاده کردم ولی Error migire
PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=C:\PERSON\DATA\TRANS.DBF;Extended Properties=dBase 5.0;Persist Security Info=False
لطفا کمک کنید
:( :( :(
 

mazoolagh

Active Member
صددرصد اطمينان ندارم ولي فكر كنم از همون درايور visual foxpro بايد استفاده كني(بشرطي كه روي سيستمت نصب باشه) و گرنه بايد از سايت مايكروسافت دانلود كني.

اگر بتوني به access يا vfpro منتقلش كني بهتره چون حتي اگر به ديتابيست هم بتوني وصل بشي ممكنه بخاطر قديمي بودنش دچار مشكل بشي
 

aminir

Member
سلام
من تونستم به دیتابیس متصل شم ولی برای پرس جو روی فیلد های که فارسی هستند مشکل دارم فارسی رو در صفحاتم درست نشون نمی ده .من یک فونت به نام Persian پیدا کردم که با استفاده از آن در VFPRO فارسی رو درست نشون می ده ولی از همین فونت برای صفحاتم استفاده می کنم ولی درست نشون نمی ده
لطفا کمک کنید خیلی ممنون می شم اصلا حرف عوض کردن دیتابیس هم نزنید که این شرکت زیر بار این کارا نمی ره حتی به SQL SERVER هم Import کردم ولی بازم روی فیلد های فارسی مشکل هست
بای

همون ديتابيس Fox Pro 2.6 هست ها :( :( :( :(
 

mazoolagh

Active Member
encodingهاي مختلف رو براي صفحه ات امتحان كن. اگر جواب نداد قبل از چاپ هر فيلد اون رو رو يك حرف يك حرف به شكل "&#????;" دربیار.
ضمنا براي يادگيري ديگران(شامل خودم هم هست!) هم اگر ميشه يك توضيح بدي كه چه جوري وصل شدي بد نيست.
 

aminir

Member
سلام
من هر چي Code page بود براي صفحم انتخاب كردم ولي نشد كه نشد :( :(
ضمنا من منظور پست قبلي شما را متوجه نشدم واضح تر بگيد ممنون مي شم
اينم رشته اتصال من بود
کد:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\ko;Extended Properties=dBASE IV;User ID=Admin;Password=
كمك كنيد لطفا.
با فونت Persian در VFPRO درست نشون مي ده ها
 

mazoolagh

Active Member
به احتمال خيلي زياد اين فونت پرشين همه اش كدهاي زير 256 هست يعني مشابه فونت معروف ايران سيستم.
شما در براي نوشتن اظلاعات فارسي در صفحه وبت خروجي فرضا از چيزي مشابه دستور زير استفاده ميكني :

کد:
response.write(X)
تبديلش كن به:
کد:
response.write(uni(x)
كه تابع uni اين هست:
کد:
FUNCTION UNI(X)
Z=""
FOR I=1 TO LEN(X)
	Z = Z & "&#" & ASCW(MID(X,I,1)) & ";"
NEXT
UNI=Z
END FUNCTION

وقتي صفحه ات ساخته شد با encodingهاي مختلف امتحانش كن بازهم جواب نگرفتي باز هم بيا اينجا كه راه آخر و حتمي رو بهت بگم فقط قبلش هم فونت پرشين و هم يك نمونه خروجي صفحه ات (سورس نميخوام فقط خروجي صفحه ات رو view source كن) برام بفرست يا همينجا پيوست كن.

بهر حال اين كارها هيچكدوم اساسي و اصولي نيست و سعي كن طرف قراردت رو راضي كني كه قديمي فكر نكنن. كار وصله پينه اي بالاخره يكجايي كار دست آدم ميده!
 

aminir

Member
سلام
آقا بازم نشد
اين يك نمونه از View Source برنامه


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Fox Pro 2.6</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
<!--
body,td,th {
font-family: Persian;
font-size: 36px;
color: #FF3366;
}
-->
</style></head>
<body>
<form name="_ctl0" method="post" action="test Fox 3.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE" value="dDwxMDA3MzE2MzEyOzs+MilbRAJTm/AcpJ1ShcyYq1HQdDo=" />

<input type="submit" name="test" value="test" id="test" />
<p><span id="message" style="font-family:persian;">(ح°ُجّى)ِتُ√ْ°≈ؤⁿا°≈²جتجô∙ج·ôدّ≈زجّى</span>
</p>
<p> امین</p>
</form>
</body>
</html>



79 KB persian اين لينك دانلود مستقيم فونت


http://www.neda.net/downloads/fonts/persian.zip


ممنونم از لطفتون :)
 

mazoolagh

Active Member
همونطور كه گفتم همه كارآكترها زير 255 هست. شما اين صفحه روي local host خودت اجرا كن:
کد:
<html>
<head>
<script language=vbscript >
sub window_onload
document.write ("<font face=persian size=5>")
for i=129 to 254
	document.write (i & "=" & chr(i) & "<br>")
next
document.write ("</font>")

document.write ("<font face=tahoma size=5>")
for i=1500 to 1800
	document.write (i & "=" & chrw(i) & "<br>")
next	
document.write ("</font>")
end sub
</script>
</head>
<body>
</body>
</html>

حالا ميتوني يك كد بنويسي كه هر يك از كاركترها رو قبل از چاپ تغيير كد بده - فقط يادت باشه فرضا پ كوچك و پ بزرگ هر دو بايد به كد 1662 تبديل بشن. بهتره كه يك array درست كني به اين شكل كه در ايندكس 148 و 149 مقدار 1662 داشته باشه و از اين array استفاده كني تا if-then-elseif يا select
 

aminir

Member
سلام

سلام
ببخشيد اين تبديل كد براي تبديل ACSII به UniCode چطوري بايد انجام بشه من دقيقا متوجه نشدم كاركتر هاي كه فونت Persian نشون مي ده در 255 تاي اولي من بايد نگاشتش كنم به فونت فرضي Tahoma دقيقا متوجه نشدم كه بايد چه كنم :oops: :oops: :oops: :oops:

لطفا بيشتر راهنمايي كنيد
اين نگاشتي كه شما مي گيد واضح تر بگيد ولي اينجوري كه من متوجه شدم مشكلي رو حل نمي كنه راستي با فونت Iran System هم در VFPRO اطلاعات درست نشان داده مي شود
كمـــــــــــــــــــــــــــــــــــــــــــــــــــك كنيد :( :( :( :( :(
 

mazoolagh

Active Member
راه حل كه همين نگاشت هست ! همونطور كه حدس زده بودم چون ورود اطلاعات در داس انجام ميشده از همون كارآكترست ايران سيستم استفاده شده براي همين هم هست كه شما با فونت ايران سيستم درست ميبيني.

اين كد البته نوشتنش زحمت داره و بايد براي تمام كارآكترهاي فارسي كه تو همون صفحه نمونه با كدهاي زير 256 ميبيني يك عنصر در آرايه داشته باشي چيزي شبيه به زير:
کد:
dim a(255)
a(140)=1570
...
...
a(148)=1662
a(149)=1662
...
...
a(252)=1610
a(252)=1610
a(252)=1610
...
...

function fx(x)
z=""
for i=1 to len(x)
	z="&#" & cstr(a(asc(mid(x,i,1)))) & ";"
next
fx=z
end function

حالا شما فقط كافي هست بجاي عبارت x كه از ديتابيست خوندي مقدار fx(x) رو چاپ كني! پر كردن جدولش با خودت كه از روي همون صفحه راهنما 10 دقيقه هم طول نميكشه!
 

aminir

Member
سلام
من دقيقا همين كار رو كردم ولي بازم نشد :( :( :( :(
ديگه اعصابم رو داغون كرده اين لعنتي
a(128)=1776
a(129)=1777
a(130)=1778
a(131)=1779
a(132)=1780
a(133)=1781
a(134)=1782
a(135)=1783
a(136)=1784
a(137)=1785
a(138)=1548
a(139)=1600
a(140)=1567
a(141)=1570
a(142)=1574
a(143)=1569
a(144)=1575
a(145)=1575
a(146)=1576
a(147)=1576
a(148)=1662
a(149)=1662
a(150)=1578
a(151)=1578
a(152)=1579
a(153)=1579
a(154)=1580
a(155)=1580
a(156)=1670
a(157)=1670
a(158)=1581
a(159)=1581
a(160)=1582
a(161)=1582
a(162)=1583
a(163)=1584
a(164)=1585
a(165)=1586
a(166)=1688
a(167)=1587
a(168)=1587
a(169)=1588
a(170)=1588
a(171)=1589
a(172)=1589
a(173)=1590
a(174)=1590
a(175)=1591
a(176)=9617
a(177)=9618
a(178)=6919
a(179)=9474
a(180)=9508
a(181)=9569
a(182)=9570
a(183)=9558
a(184)=9557
a(185)=9571
a(186)=9553
a(187)=9559
a(188)=9565
a(189)=9564
a(190)=9563
a(191)=9488
a(192)=9462
a(193)=9524
a(194)=9514
a(195)=9500
a(196)=9472
a(197)=9532
a(198)=9566
a(199)=9567
a(200)=9562
a(201)=9556
a(202)=9577
a(203)=9574
a(204)=9568
a(205)=9552
a(206)=9580
a(207)=9575
a(208)=9576
a(209)=9572
a(210)=9573
a(211)=9561
a(212)=9560
a(213)=9554
a(214)=9555
a(215)=9579
a(216)=9578
a(217)=9469
a(218)=9484
a(219)=9608
a(220)=9604
a(221)=9612
a(222)=9616
a(223)=9600
a(224)=1592
a(225)=1593
a(226)=1593
a(227)=1593
a(228)=1593
a(229)=1594
a(230)=1594
a(231)=1594
a(232)=1594
a(233)=1601
a(234)=1601
a(235)=1602
a(236)=1602
a(237)=1705
a(238)=1705
a(239)=1711
a(240)=1711
a(241)=1604
a(242)=1604
a(243)=1604
a(244)=1605
a(245)=1605
a(246)=1606
a(247)=1606
a(248)=1608
a(249)=1607
a(250)=1607
a(251)=1607
a(252)=1740
a(253)=1740
a(254)=1740
a(255)=160
z=""
FOR I=1 TO LEN(X)
z=z & "&#" & cstr(a(asc(mid(x,i,1)))) & ";"
NEXT
UNI=Z
من اين كد ها رو از روي فايل زير در آوردم
كمـــــــــــــــــــــــــــــــــك كمــــــــــــــــــــــــــــــــــــــــك
 

پیوست ها

  • 1_198.rar
    3.4 کیلوبایت · بازدیدها: 7

mazoolagh

Active Member
اين بايد تا حالا تموم ميشد- يكي از اون dbf ها رو برام بفرست يا سورس كامل صفحه رو - يك نكته ظريف رو احتمالا فراموش كردي
 

aminir

Member
سلام اينم كد كامل صفحم+DBF
داره ديوونم مي كنه
به زحمت مي افتيد ممنون
:oops: :oops: :oops: :oops:
بتونم جبران کنم
 

aminir

Member
سلام
من یک کاری کردم توی یک فیلد از یک رکورد دیتابیس اومدم حروف الفبای فارسی رو یکی یکی کپی کردم و تابع ASC را روی مقدار خوانده شده از همان فيلد دیتابیس امتحان کردم این تابع برای حروف الف گ ه ی عدد 63 در مبنای 10 را بر گرداند که این یعنی فاجعه یعنی برای کلمه فرضی آگهی تمام عدد های برگشتی این تابع برای تک تک حروف آن برابر است دیگه واقعا اعصابم بهم ریخته تابعی دیگه وجود نداره توی VB.NET که کد اسکی یک کلمه رو بر گرداند ممنون می شم
لطفا کمک کنید :( :( :(
 

mazoolagh

Active Member
2 تا نكته!
اول اينكه بايد از ascw و chrw استفاده كني چون اطلاعات فارسي 2 بايتي هستند. علت اينكه هميشه 63 ميديدي اينه كه تابع asc فقط مال يك بايت از يك كارآكتر 2 بايتي رو برميگردونه.

دوم اينكه اين فايل dbf كه شما فرستادي كارآكترهاي غير از محدوده مجاز داره. كدهاي فارسي تعريف شده در dos (همونكه در فونت ايران سيستم و پرشين پياده شده) بين 128 تا 175 و 224 تا 254 هست. روشي كه گفتم درسته چون سالهاست كه براي تبديل و انتقال اطلاعات اين مدلي به محيط ويندوز از اون استفاده كرده ام ولي اين ديتابيس شما كارآكترهايي داره كه با فارسي dos نميخونه مثلا ديدم كه جايي در شرح كد اسكي يك كارآكتر 183 هست كه معادل يك حرف فارسي نميشه!
شما در چه محيطي اونها رو درست ميبيني؟ شايد اين اطلاعات رمزگذاري شده؟
 

aminir

Member
سلام
من اينا رو توي همون برنامه شون كه تحت DOS درست مي بينم و هم در محيط VFPRo با فونت
ايران سيستم يا Persian
حالا چيكار كنم منهم دارم روش كار مي كنم
كمك كنيد ممنون مي شم
البته برنامه شون را تحت داس ويندوز 98 RUN مي كنن
 

جدیدترین ارسال ها

بالا