PDA

View Full Version : مشکل در نمایش کاراکترها بصورت کامل



maisam57
شنبه 07 بهمن 1385, 07:34 صبح
هر چی سرچ کردم چیزی پیدا نکردم
شاید دوستان با مشکل من برخورد کرده باشن دیگه داره اعصابمو خط خطی میکنه
میخوام رکوردها رو از بانک اکسس به فاکس تبدیل کنم البته از طریق دلفی
این کد تبدیل win2dos هست که از سایت گرفتم


function WinToDosStr(WinStr:string):string;
var Nflag :boolean;
Ch : Char;
T,N,M,I,J,DosI :integer;
TmpStr,Str1,Str2 :String;
DosSt :String;
begin
DosSt:='';
// M:=length(WinStr);
// for I:=1 to M do
// if ord(winstr[i])=157 then
// WinStr[i]:=' ';
WinStr:=WinStr+' ';
M:=length(WinStr);
for I:=1 to M do
DosSt:=DosSt + #32;
DosI:=M;
Str1:='';
for I:=1 To M do
begin
Nflag:=False;
case WinStr[i] Of
' ' :Begin
Ch:=#32;
end;
'.','0' .. '9'
: begin
Ch:=chr(ord(WinStr[i])+80);
if (WinStr[i])='.' then
ch:=#140;
str1:=str1+ch;
Nflag:=true;
ch:=#0;
end;
'a' .. 'z',
'A' .. 'Z'
: begin
Ch:=WinStr[i];
str1:=str1+ch;
Nflag:=true;
ch:=#0;
end;
'Â' :begin
ch:=#141;
end;
'Æ' :Begin
Ch:=#142;
end;
'Á' :Begin
Ch:=#143;
end;
'Ç' :begin
Ch:=#145;
if((WinStr[i-1]=' ')or
(WinStr[i-1]=#157)or
(WinStr[i-1]='Ç')or
(WinStr[i-1]='æ')or
(WinStr[i-1]='Ï')or
(WinStr[i-1]='Ð')or
(WinStr[i-1]='Ñ')or
(WinStr[i-1]='Ò')or
(WinStr[i-1]='Ž')or
(i=1 )
)
then
ch:=#144;
end;
'È' : begin
Ch:=#147;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
Ch:=#146;
end;
'' : begin
Ch:=#149;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
Ch:=#148;
end;
'Ê' :begin
Ch:=#151;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
Ch:=#150;
end;
'Ë' :begin
Ch:=#153;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#152
end;
'Ì' :begin
Ch:=#155;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#154
end;
'' :begin
Ch:=#157;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#156;
end;
'Í' :begin
Ch:=#159;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#158;
end;
'Î' :begin
Ch:=#161;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#160;
end;
'Ï' :begin
Ch:=#162;
end;
'Ð' :begin
Ch:=#163;
end;
'Ñ' :begin
Ch:=#164;
end;
'Ò' :begin
Ch:=#165;
end;
'Ž' :begin
Ch:=#166;
end;
'Ó' :begin
Ch:=#168;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
Ch:=#167;
end;
'Ô' :begin
Ch:=#170;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#169;
end;
'Õ' :begin
Ch:=#172;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#171;
end;
'Ö' :begin
Ch:=#174;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#173;
end;
'Ø' :begin
ch:=#175 ;
end;
'Ù' :begin
ch:=#224
end;
'Ú' :begin
Ch:=#227;
if((WinStr[i-1]=' ')or
(WinStr[i-1]=#157)or
(WinStr[i-1]='Ç')or
(WinStr[i-1]='æ')or
(WinStr[i-1]='Ï')or
(WinStr[i-1]='Ð')or
(WinStr[i-1]='Ñ')or
(WinStr[i-1]='Ò')or
(WinStr[i-1]='Ž')or
(i=1) )
then
ch:=#228;
if ((WinStr[i+1]=' ') or (i=M)) then
if (ch=#228) then
ch:=#225
else
ch:=#226;
end;
'Û' :begin
Ch:=#231;
if((WinStr[i-1]=' ')or
(WinStr[i-1]=#157)or
(WinStr[i-1]='Ç')or
(WinStr[i-1]='æ')or
(WinStr[i-1]='Ï')or
(WinStr[i-1]='Ð')or
(WinStr[i-1]='Ñ')or
(WinStr[i-1]='Ò')or
(WinStr[i-1]='Ž')or
(i=1) )
then
ch:=#232;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
if (ch=#232) then
ch:=#229
else
ch:=#230;
end;
'Ý' :begin
Ch:=#234;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#233;
end;
'Þ' :begin
Ch:=#236;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#235;
end;
'ß' :begin
Ch:=#238;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#237;
end;
'' :begin
Ch:=#240;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#239 ;
end;
'á' :begin
Ch:=#243;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#241;
end;
'ã' :begin
Ch:=#245;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ') or (WinStr[i+1]='Â')) then
ch:=#244;
end;
'ä' :begin
Ch:=#247;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#246;
end;
'æ' :begin
ch:=#248 ;
end;
'å' :begin
Ch:=#250;
if((WinStr[i-1]=' ')or
(WinStr[i-1]=#157)or
(WinStr[i-1]='Ç')or
(WinStr[i-1]='æ')or
(WinStr[i-1]='Ï')or
(WinStr[i-1]='Ð')or
(WinStr[i-1]='Ñ')or
(WinStr[i-1]='Ò')or
(WinStr[i-1]='Ž')or
(i=1 ))
then
ch:=#251;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#249;
end;
'í' :begin
Ch:=#254;
if ((WinStr[i+1]=#157) or (WinStr[i+1]=' ')) then
ch:=#252;
if (ord(WinStr[i])=236)then
Ch:=#254;
end;
'Ü' :begin
ch:=#139 ;
end;
else
ch:=WinStr[i];
end;
if (Nflag=false) and(ch<>#0) and (DosI>0 )then
begin
N:=length(str1);
for j:=N downto 1 do
if (WinStr[i]<>#157) then
begin
DosSt[DosI]:=str1[j];
Dec(DosI);
end;
if (WinStr[i]<>#157) then
begin
DosSt[DosI]:=Ch; Dec(DosI);
end;
str1:='';
end;
end;
if (Nflag=True) and(ch=#0) and (DosI>0 )then
begin
N:=length(str1);
for j:=N downto 1 do
begin
DosSt[DosI]:=str1[j];
Dec(DosI);
end;
end;
WinToDosStr:=copy(DosSt,2,length(DosSt));
end;

اینم کد که من نوشتم


while not ADOTable2.Eof do
begin
ADOTable1.Insert;
ADOTable1.FieldValues['dsk_name']:=wintodosstr(ADOTable2.FieldValues['lname']);
ADOTable1.FieldValues['dsk_id']:=wintodosstr(ADOTable2.FieldValues['id']);
ADOTable1.FieldValues['dsk_farm']:=wintodosstr(ADOTable2.FieldValues['brithday']);
ADOTable1.Post;
ADOTable2.Next;
ADOTable1.Next;
end;

بعد از convrt خیلی از اطلاعات بصورت ? نمایش داده میشن توی اعداد هم که فقط عدد 1 بصورت ? نمایش داده میشه لطفا راهنمایی کنید

Valadi
شنبه 07 بهمن 1385, 09:00 صبح
آقای ثوامری اگر مشکل حل شد این برنامه را در سایت قرار ده که ماهم استفاده کنیم

mehdi_mohamadi
شنبه 07 بهمن 1385, 09:21 صبح
آقا میثم تا جایی که یادمه این تابع رو خودم بهت دادم. من چند بار از اون استفاده کردم هم در سیستم حقوق و دستمزد و هم در سیستم باربری, هیچ مشکلی هم نداشت.
شما با چی اطلاعاتتون رو چک میکنید ؟

maisam57
شنبه 07 بهمن 1385, 09:39 صبح
بله آقا مهدی
ولی باور کن اطلاعات رو اشتباه ثبت میکنه
اول مبخوام اینو بگب که مشکلی توی کد نیست درسته

maisam57
شنبه 07 بهمن 1385, 09:40 صبح
بانک من access
از adotable واسه بانک access
از adotable واسه لینک به بانک foxpro

arshia_
شنبه 07 بهمن 1385, 10:21 صبح
منظورت فاکس است یا کد اسکی تحت سیتم عامل داس؟
اگر می خوای توی ویندوز استفاده کنی نباید از کامپوننت تبدیل استفاده کنی
بهتره خودت یه آرایه تعریف کنی که معادل کدهای اسکی داس و ویندوز رو توی ستونهاش داشته باشی و در موقع خوندن اطلاعات به راحتی اونها رو جایگرین کنی

maisam57
یک شنبه 08 بهمن 1385, 10:37 صبح
سورس رو گذاشتم فقط اگه error داد لطفا مسیر بانک dbf رو توی connection بدید

arshia_
چهارشنبه 11 بهمن 1385, 08:29 صبح
این سورس که فقط بانک رو توی یه فایل متنی ذخیره می کنه؟
نه تبدیلی انجام می ده نه چیزی؟
آقا میثم لطف کن اون کامپوننت win2dos ‌رو به صورت اصلی و یپ شده بذار چون بصورت متنی کمی تغییر می کنه و قابل اصتفاده نیست
در ضمن بهتره بانک فاکس پرو رو به جای ado از bde کمک بگیری
خیلی احتمال داره مشکل مربوط به اون باشه
چون تحت داس است و قدیمی
من منتظرم که مواردی رو که درخواست کردم انجام بدی و اگر اون win 2 dos ‌رو بذاری خودم برنامه شما رو تست کنم

mehdi_mohamadi
چهارشنبه 11 بهمن 1385, 09:32 صبح
شما موقع خوندن متن فایلها باید از یه برنامه استفاده کنی که فایلهای تحت داس رو می خونه.
از داخل خود ویندوز اگه بخوای اون فایلها رو بخونی دچار مشکل می شی.

-----------------
m.mohamadi@icsystem.ir

maisam57
پنج شنبه 12 بهمن 1385, 07:15 صبح
ببخشید اشتباه شده بود من سورس یه برنامه دیگه رو توی شایت گذاشته بودم
آقا ارشیا من کامپوننتشو ندارم فقط یه فانکشن از اون رو دارم که بصورت text براتون میزارم من تا این تاریخ مشکلم حل نشده لطف کنید راهنمایی کنید

arshia_
پنج شنبه 12 بهمن 1385, 09:10 صبح
سلام
من یه تغییر کوچولو توی کد شما دادم و به جای adotable از table bde برای فاکس پرو استفاده کردم
و اسامی و فامیل رو تست کردم بدون مشکل تبدیل شد
برات کد رو ضمیمه کردم
اممتحان کن
امیدوارم مشکل حل بشه