版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41660162/article/details/80363520
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.