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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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.

猜你喜欢

转载自blog.csdn.net/weixin_41660162/article/details/80363520