跳转至主内容

 none
ACCESS数据库更新的问题,急急急! RRS feed

  • 问题

  • 要更改的表叫CHINESE ,字段有 PP,XJ,UNI,MY
    参数源表叫UC,字段有 UNI,YSH,LBID,YS
    这次大动工要完成的任务就是用 CHINESE.MY与UC.YSH比较,相等则CHINESE.UNI被更新为UC.UNI
    请大师指点,我想在查询中批量解决它,谢谢。
    2019年9月23日 1:48

答案

全部回复

  • Hi czhch,

     

    请你尝试使用下面的代码:

     

    update a

    set a.uni=b.uni

    from chinese a

    join uc b on a.my =b.ysh

     

    Best regards,

    Dedmon Dai


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com

    2019年9月24日 1:33
  • 还是出错,我认为可能是因为Chinese表是有重复、uc表没有重复的缘故。


    2019年9月25日 0:34
  • 能否提供样例数据

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com

    2019年9月25日 1:26
  • Chinese表如图,真名为汉字的醚侎芪法

    uc表真名字符,如图所示

    既然字符表每个字符和万国码都一对一在此,我也见识过模样相同万国码不同的情形,所以给定万国码才是关键。这次任务就是把Chinese表每条Uni补上。

    2019年9月25日 2:28
  • 是你表内有重复的值造成的问题

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com

    2019年9月25日 5:20
  • //我用.NET从外面用控制台执行代码如下
    using(var adap=new OleDbDataAdapter("SELECT 模样 FROM 汉字的醚侎忯芪法 ",$"{conndll.Properties.Settings.solveRead_accdb}Data source=d:\\安装\\练习打字\\醚芪考试题.accdb")){
    	dt=new DataTable();adap.Fill(dt);
    }for(int n=0;n<dt.Rows.Count;n++){
    	if(dt.Rows[n][0].ToString()!="∄"){
    		raded[0]=dt.Rows[n][0].ToString();
    			using(var co=new OleDbConnection()){
    			using(var cmd=new OleDbCommand()){
    		co.ConnectionString="provider=microsoft.ace.oledb.12.0;data source=d:\\安装\\练习打字\\醚芪考试题.accdb";
    	cmd.Connection=co;
    	using(var adap=new OleDbDataAdapter($"SELECT [Uni] FROM  字符 where [映射] ='{raded[0]}'",$"{conndll.Properties.Settings.solveRead_accdb}Data source=d:\\安装\\练习打字\\醚芪考试题.accdb")){
    	var dt2=new DataTable();adap.Fill(dt2);
    	raded[1]=dt2.Rows[0][0].ToString();
    	}
    	cmd.CommandText=$"update 汉字的醚侎忯芪法 set Uni='{raded[1]}' where 模样='{raded[0]}'";
    								co.Open();cmd.ExecuteNonQuery();co.Close();
    							}}}
    大部分都成了,但是扩展字都不成且得到的答案都是  001F6  ,为什么?
    2019年9月25日 6:54
  • 什么是扩展字,与普通字有什么区别。
    2019年9月25日 7:12
  • 这个概念属我们输入法学界的机密,举个例子吧,‘㺈’  复制到记事本上会出现

    明白了吗?除了扩展字以外还有好多ANSI容不下的字符呢。


    • 已编辑 czhch 2019年9月25日 8:20 11
    2019年9月25日 8:16
  • “㺈”字的unicode编码为3E88,不属于GBK字符集的,因此被称为扩展字,明白了,谢谢!
    2019年9月25日 8:23
  • 记事本可以调一下编码,Unicode  or  be-Unicode or  UTF-8都行,可是access库好像没有调编码,类型短文本还是短文本,unicode压缩我也改成否,没用。怎么办
    2019年9月26日 2:01
  • Unicode原码转UTF-16BE/LE  示意图还是您给我的呢,有了此示意图,我终于制出FiveHexToFourBytes函数。

    我也要说声谢谢!

    2019年9月26日 2:29
  • Unicode原码转UTF-16BE/LE  示意图还是您给我的呢,有了此示意图,我终于制出FiveHexToFourBytes函数。

    我也要说声谢谢!

    除了ACCESS数据库存在你提出的问题,在SQL Server数据库中也存在同样的问题,这可能与数据库底层的编码有关,

    SQL Server数据库有varchar和nvarchar两种数据类型,这两种数据类型的区别就是varchar用OS本地编码,而nvarchar用

    unicode编码,varchar和nvarchar类型可以自由转换,应该是OS系统内部设置有一一对应的关系,这种关系只针对OS的本地

    编码有效,你所谓的扩展字不在此范围内,系统不能正常识别是可以理解的。

    2019年9月26日 4:58
  • 我自己手动吧,让程序替我干完这事是没戏了。
    • 已标记为答案 czhch 2019年9月26日 6:59
    2019年9月26日 6:59
  • 通过ACCESS系统实现扩展字的功能是没戏的,但你可以尝试其他的数据库系统,譬如支持UTF-8编码格式的数据库。
    2019年9月26日 7:27