線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3854
推到 Plurk!
推到 Facebook!

中文顯示亂碼問題

 
wangwb_1027
一般會員


發表:6
回覆:13
積分:3
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-08-24 16:43:16 IP:61.66.xxx.xxx 未訂閱
哪位大大幫幫小弟,小弟才開始學習DELPHI,遇到麻煩了,我從資料庫內查詢出來的中文字顯示亂碼。不知道該怎麼辦了。急急急。。。。
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-08-29 14:23:01 IP:210.241.xxx.xxx 未訂閱

沒有仔細描述...

是所有的中文均是亂碼嗎?還是只些特殊的字才是亂碼?你是用Delphi那一版?

------
Kevin
wangwb_1027
一般會員


發表:6
回覆:13
積分:3
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-08-30 19:36:54 IP:61.66.xxx.xxx 未訂閱

真不好意思,我用的是DELPHI6,從資料庫中查詢出來的所有中文字都是亂碼。操作系統是繁體win2000

herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-08-31 02:46:32 IP:211.72.xxx.xxx 未訂閱

可能是 DataBase 使用之字集, BDE 或 ODBC 設定的字集不匹配導致的吧!

feng6060_cn
一般會員


發表:0
回覆:1
積分:0
註冊:2003-06-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-09-01 13:08:49 IP:218.15.xxx.xxx 未訂閱
看看连接的参数是否带Auto Translate=True, 试试改成False
wangwb_1027
一般會員


發表:6
回覆:13
積分:3
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-09-15 08:54:29 IP:61.66.xxx.xxx 未訂閱

代碼如下:幫忙看看

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, comobj, StdCtrls, Buttons, Grids, DBGrids;


type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
DB1: TDatabase;
Query1: TQuery;
DataSource1: TDataSource;
BitBtn2: TBitBtn;
SaveDialog1: TSaveDialog;
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
close;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var sql:string;
begin
query1.SQL.Clear;
query1.SQL.Add('select DISTINCT a.op_no,a.op_date,b.cusord_no,c.exop_no,d.cus_no,i.cussite_no,a.due_date,a.need_date,');
query1.SQL.Add('e.st_no,f.ship_no,f.ship_name,convert(nvarchar(40),k.excus_name) as excus_name,');
query1.SQL.Add('convert(nvarchar(40),k.excussite_name) as excussite_name,g.inv_no,g.inv_name,g.inv_spec,');
query1.SQL.Add('a.qty,isnull(h.pac_qty,0) as pac_qty,a.qty-isnull(h.pac_qty,0) as f_qty');
query1.SQL.Add('from soordd a');
query1.SQL.Add('left join soordm b on a.orderm_id=b.orderm_id');
query1.SQL.Add('left join scmpo_in c on b.cusord_no=c.exop_no');
query1.SQL.Add('left join bstcus d on a.cus_id=d.cus_id');
query1.SQL.Add('left join mtlstorage e on a.st_id=e.st_id');
query1.SQL.Add('left join bstship f on a.ship_id=f.ship_id');
query1.SQL.Add('left join mtlinv g on a.inv_id=g.inv_id');
query1.SQL.Add('left join mtltran h on a.orderd_id=h.orderd_id');
query1.SQL.Add('left join bstcussite i on b.cussite_id=i.cussite_id');
query1.SQL.Add('left join scmpoline_in j on c.selfsoa_id=j.selfsob_id');
query1.SQL.Add('left join scmso_in k on c.soscm_uid=k.scm_uid');
query1.SQL.Add('where a.state=1');
query1.SQL.Add('order by a.op_no');
query1.Prepare;
query1.Open;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DB1.DriverName:='MSSQL';
DB1.Params.Clear;
DB1.Params.Add('SERVER NAME=MIS-08');
DB1.Params.Add('DATABASE NAME=AXMTWDB');
DB1.Params.Add('USER NAME=sa');
DB1.DatabaseName:='MSQL';
DB1.LoginPrompt:=false;
DB1.Connected:=TRUE;
Query1.DatabaseName:='MSQL';
Query1.RequestLive:=False;
DBGrid1.ReadOnly:=true;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
i:integer;
xlsfile:string;
elcapp,workbook:variant;
begin
savedialog1.Execute;
xlsfile:=savedialog1.filename;
elcapp:=Createoleobject('excel.application');
workbook:=createoleobject('excel.sheet');
workbook:=elcapp.workbooks.add;
elcapp.cells(1,1):='銷售訂單';
elcapp.cells(1,2):='訂單日期';
elcapp.cells(1,3):='採購訂單';
elcapp.cells(1,4):='客戶PO';
elcapp.cells(1,5):='客戶編號';
elcapp.cells(1,6):='地址編號';
elcapp.cells(1,7):='預定交期';
elcapp.cells(1,8):='生管CFM交期';
elcapp.cells(1,9):='倉庫編號';
elcapp.cells(1,10):='運送方式編號';
elcapp.cells(1,11):='運送方式';
elcapp.cells(1,12):='客戶名稱';
elcapp.cells(1,13):='交貨地址';
elcapp.cells(1,14):='機種編號';
elcapp.cells(1,15):='機種名稱';
elcapp.cells(1,16):='規格';
elcapp.cells(1,17):='數量';
elcapp.cells(1,18):='已交數量';
elcapp.cells(1,19):='未交數量';
query1.First;
for i:=0 to query1.recordcount-1 do
begin
elcapp.cells(i 2,1):=query1.fieldbyname('op_no').asstring;
elcapp.cells(i 2,2):=query1.fieldbyname('op_date').asstring;
elcapp.cells(i 2,3):=query1.fieldbyname('cusord_no').asstring;
elcapp.cells(i 2,4):=query1.fieldbyname('exop_no').asstring;
elcapp.cells(i 2,5):=query1.fieldbyname('cus_no').asstring;
elcapp.cells(i 2,6):=query1.fieldbyname('cussite_no').asstring;
elcapp.cells(i 2,7):=query1.fieldbyname('due_date').asstring;
elcapp.cells(i 2,8):=query1.fieldbyname('need_date').asstring;
elcapp.cells(i 2,9):=query1.fieldbyname('st_no').asstring;
elcapp.cells(i 2,10):=query1.fieldbyname('ship_no').asstring;
elcapp.cells(i 2,11):=query1.fieldbyname('ship_name').asstring;
elcapp.cells(i 2,12):=query1.fieldbyname('excus_name').asstring;
elcapp.cells(i 2,13):=query1.fieldbyname('excussite_name').asstring;
elcapp.cells(i 2,14):=query1.fieldbyname('inv_no').asstring;
elcapp.cells(i 2,15):=query1.fieldbyname('inv_name').asstring;
elcapp.cells(i 2,16):=query1.fieldbyname('inv_spec').asstring;
elcapp.cells(i 2,17):=query1.fieldbyname('qty').asstring;
elcapp.cells(i 2,18):=query1.fieldbyname('pac_qty').asstring;
elcapp.cells(i 2,19):=query1.fieldbyname('f_qty').asstring;
query1.Next;
end;
workbook.saveas(xlsfile);
workbook.close;
showmessage('恭喜你,轉出成功\');
end;


end.

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-09-16 10:50:58 IP:61.67.xxx.xxx 未訂閱

你是否使用 MS-SQL, 可能檢查一下DATABASE是否是存UNICODE的字集, 在Delphi上並不支援, 所以用Delphi標準的vcl元件來顯示unicode字集才會都變成亂碼!

wangwb_1027
一般會員


發表:6
回覆:13
積分:3
註冊:2006-07-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-09-16 14:40:02 IP:61.66.xxx.xxx 未訂閱

我沒有用到MSSQL。請問一下在哪裡去設置!


===================引 用 文 章===================

你是否使用 MS-SQL, 可能檢查一下DATABASE是否是存UNICODE的字集, 在Delphi上並不支援, 所以用Delphi標準的vcl元件來顯示unicode字集才會都變成亂碼!

michelsn
一般會員


發表:0
回覆:1
積分:0
註冊:2006-08-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-09-18 08:53:06 IP:220.160.xxx.xxx 未訂閱

应该是delphi vcl组件的问题,delphi vcl原生组件不支持UNICODE的显示,你可以试试用这套组件:Tnt Delphi Unicode Controls

wangwb_1027
一般會員


發表:6
回覆:13
積分:3
註冊:2006-07-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2006-09-22 19:44:29 IP:211.23.xxx.xxx 未訂閱
我已經下載Tnt Delphi Unicode Controls安裝了,我不會使用這個VCL組件。我試了一下出錯啦,幫幫忙看看錯誤如下:

General SQL error.

Unicode data in a unicode-only collationor ntext data cannot be sent to clients using DB-library

(such as SQL) or ODBC

versio?

代碼如下:

unit u_tnt;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TntDialogs, Grids, DBGrids, TntDBGrids, DB, DBTables, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Query1: TQuery;
DB1: TDatabase;
TntDBGrid1: TTntDBGrid;
TntSaveDialog1: TTntSaveDialog;
DataSource1: TDataSource;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var sql1:string;
begin
query1.SQL.Clear;
query1.SQL.Add('select cus_no,cus_name,cus_sht,co_addr,brief,potel1,pofax1,porep_man,pobarg_term');
query1.SQL.add('from bstcus');
query1.Prepare;
query1.Open;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DB1.DriverName:='MSSQL';
DB1.Params.Clear;
DB1.Params.Add('SERVER NAME=MIS-08');
DB1.Params.Add('DATABASE NAME=newtest');
DB1.Params.Add('USER NAME=sa');
DB1.DatabaseName:='MSQL';
DB1.LoginPrompt:=false;
DB1.Connected:=TRUE;
Query1.DatabaseName:='MSQL';
Query1.RequestLive:=False;
tntDBGrid1.ReadOnly:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

end.
===================引 用 文 章===================

应该是delphi vcl组件的问题,delphi vcl原生组件不支持UNICODE的显示,你可以试试用这套组件:Tnt Delphi Unicode Controls

lin
一般會員


發表:1
回覆:12
積分:7
註冊:2002-09-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2006-09-27 12:22:04 IP:61.218.xxx.xxx 未訂閱

DB1.DriverName:='MSSQL';
DB1.Params.Clear;
DB1.Params.Add('SERVER NAME=MIS-08');
DB1.Params.Add('DATABASE NAME=newtest');
DB1.Params.Add('USER NAME=sa');
DB1.DatabaseName:='MSQL';
DB1.LoginPrompt:=false;
DB1.Connected:=TRUE;
Query1.DatabaseName:='MSQL';
Query1.RequestLive:=False;
tntDBGrid1.ReadOnly:=true;


改成

DATABASE NAME=newtest
SERVER NAME=MIS-08
USER NAME=sa
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
BLOB EDIT LOGGING=
LANGDRIVER=taiwan
SQLQRYMODE=
SQLPASSTHRU MODE=SHARED AUTOCOMMIT
DATE MODE=0
SCHEMA CACHE TIME=-1
MAX QUERY TIME=300
MAX ROWS=-1
BATCH COUNT=200
ENABLE SCHEMA CACHE=FALSE
SCHEMA CACHE DIR=
HOST NAME=MIS-08
APPLICATION NAME=
NATIONAL LANG NAME=
ENABLE BCD=FALSE
TDS PACKET SIZE=512
BLOBS TO CACHE=64
BLOB SIZE=32
PASSWORD=

試試看最重要的是

LANGDRIVER=taiwan

------
wangwb_1027
一般會員


發表:6
回覆:13
積分:3
註冊:2006-07-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2006-09-27 15:12:28 IP:211.23.xxx.xxx 未訂閱

我改好後執行出錯

錯誤如下:

[Error] File not found: 'Unicode.res'


===================引 用 文 章===================

DB1.DriverName:='MSSQL';
DB1.Params.Clear;
DB1.Params.Add('SERVER NAME=MIS-08');
DB1.Params.Add('DATABASE NAME=newtest');
DB1.Params.Add('USER NAME=sa');
DB1.DatabaseName:='MSQL';
DB1.LoginPrompt:=false;
DB1.Connected:=TRUE;
Query1.DatabaseName:='MSQL';
Query1.RequestLive:=False;
tntDBGrid1.ReadOnly:=true;


改成

DATABASE NAME=newtest
SERVER NAME=MIS-08
USER NAME=sa
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
BLOB EDIT LOGGING=
LANGDRIVER=taiwan
SQLQRYMODE=
SQLPASSTHRU MODE=SHARED AUTOCOMMIT
DATE MODE=0
SCHEMA CACHE TIME=-1
MAX QUERY TIME=300
MAX ROWS=-1
BATCH COUNT=200
ENABLE SCHEMA CACHE=FALSE
SCHEMA CACHE DIR=
HOST NAME=MIS-08
APPLICATION NAME=
NATIONAL LANG NAME=
ENABLE BCD=FALSE
TDS PACKET SIZE=512
BLOBS TO CACHE=64
BLOB SIZE=32
PASSWORD=

試試看最重要的是

LANGDRIVER=taiwan

系統時間:2024-06-02 1:15:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!