Delphi6及SqlServer对于生僻字䶮的支持测试

xiaoxiao2021-02-28  36

1.二进制SqlServer正像现场反馈的这样,后台字段只能以nvarhcar类型来保存,并且插入和更新的时候需要在字段前加’N’,例: update SF_BRXXK set hzxm=N’䶮’ 可参见:https://blog.csdn.net/chinahuyong/article/details/78558695 2.Delphi6当前的控件也无法显示该生僻字,需要安装TNT系列的控件,才能支持 生僻字的录入与显示。 tntunicodecontrol控件,百度云下载地址链接:https://pan.baidu.com/s/152GP1bVxijo4e2frqVljRg 密码:uwxn 3.以上两点可以实现数据库的存储和前台的录入与显示,但是如何将后台保存的生僻字读取到前台,以及将前台录入的生僻字保存在后台。经测试使用框架的ztsql,ClientDataSet,TDCOMconnection等都无法实现,只有使用TADOConnection才能完成。

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TntStdCtrls, DB, ADODB, RzButton, ExtCtrls, RzPanel; type TForm1 = class(TForm) btn2: TRzBitBtn; lbl3: TLabel; EditConnectionString: TEdit; ADOConn: TADOConnection; Query3: TADOQuery; btn4: TRzBitBtn; rzgrpbx1: TRzGroupBox; lbl2: TLabel; EditHzxm1: TEdit; btn1: TRzBitBtn; lbl4: TLabel; EditHzxmnew1: TEdit; rzgrpbx2: TRzGroupBox; lbl5: TLabel; lbl6: TLabel; EditHzxm2: TTntEdit; btn3: TRzBitBtn; EditHzxmNew2: TTntEdit; procedure btn2Click(Sender: TObject); procedure btn4Click(Sender: TObject); procedure btn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btn3Click(Sender: TObject); private { Private declarations } strsql,errmsg : widestring; g_connection :boolean; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn2Click(Sender: TObject); var strConnection :string; begin strConnection := trim(EditConnectionString.Text); ADOConn.ConnectionString:=strConnection; try ADOConn.Connected := true; except On E:Exception do begin showmessage('连接数据库失败:'+e.Message); exit; end end; if ADOConn.Connected then begin showmessage('数据库连接成功!'); g_connection := true; end else begin showmessage('数据库连接失败!'); g_connection := false; end; end; procedure TForm1.btn4Click(Sender: TObject); var rec:_Recordset; begin if not g_connection then begin showmessage('请先连接数据库'); exit; end; //1 初始化表 strsql := ' if not exists(select 1 from sysobjects where name = "nvarcharTest" and type = "U")' + ' begin' + ' create table nvarcharTest' + ' (' + ' hzxm nvarchar(64)' + ' )' + ' insert into nvarcharTest(hzxm) values("张三") ' + ' end '; strsql := stringreplace(strsql,'"','''',[rfReplaceAll]); try ADOConn.Execute(strsql); except on E: Exception do begin showmessage(' -- 错误描述:'+E.Message); Exit; end; end; //2 用ADOQuery连接数据库可以更新生僻字到数据库 strsql := 'select * from nvarcharTest '; try rec:= ADOConn.Execute(strsql); except on E: Exception do begin showmessage(' -- 错误描述:'+E.Message); Exit; end; end; if (assigned(rec)) and (not rec.eof) then begin EditHzxm1.Text := widestring(rec.Fields[0].Value); EditHzxm2.Text := widestring(rec.Fields[0].Value); EditHzxmnew1.Text := ''; EditHzxmNew2.Text := ''; end; //3 用Query连接ADOQuery连接数据库可以读到生僻字 end; procedure TForm1.btn1Click(Sender: TObject); begin if not g_connection then begin showmessage('请先连接数据库'); exit; end; strsql := widestring(' update nvarcharTest set hzxm = N'''+widestring(EditHzxmnew1.Text)+''''); try ADOConn.Execute(strsql); except on E: Exception do begin showmessage(' -- 错误描述:'+E.Message); Exit; end; end; btn4.Click; end; procedure TForm1.FormCreate(Sender: TObject); begin g_connection := false; end; procedure TForm1.btn3Click(Sender: TObject); begin if not g_connection then begin showmessage('请先连接数据库'); exit; end; strsql := widestring(' update nvarcharTest set hzxm = N'''+widestring(EditHzxmnew2.Text)+''''); try ADOConn.Execute(strsql); except on E: Exception do begin showmessage(' -- 错误描述:'+E.Message); Exit; end; end; btn4.Click; end; end.
转载请注明原文地址: https://www.6miu.com/read-2632882.html

最新回复(0)