最近做个项目,甲方要求数据库表明必须为英文或者字母,字段也是一样,包括存储过程,函数触发器等,除注释外不能包含中文,这个是给外国佬做的项目,现在的问题是我们的数据库大部分是中文,兄弟们有没有什么办法啊,还有程序里面的也是一样,数据库该了,代码里面也要修改啊,太他妈的变态了,简直疯了,项目有1000多个form,相当于是把所有代码,和数据库重新翻写一遍,要人命啊,咋个整哦,高分求解,可以真金白银的给人民币

解决方案 »

  1.   

      楼主问这个问题有点让人纳闷啊,我们做数据库这么长时间,还从来没有用汉字来定义过表格、字段、存储过程或函数,不知道你“现在的问题是我们的数据库大部分是中文”是什么意思?
      至于软件,如果采用.Net开发,只要在Language中选择[中文(中华人民共和国)]设置好中文,选择[英文]设置好英文,打包后软件安装在英文操作系统,就显示英文了。
      

  2.   

    趁这次,彻底的改了吧,这年头做程序的那个不认识1、2千个英语单词啊,谁还愿意在SQL里打一大堆汉字?再说很多数据库不支持汉字表名、字段的。
      

  3.   

    数据库方面,可以写脚本改,今年我们公司就把使用了10多年的繁体ERP系统改为简体,也是很多都有改名的,Form方面你也可以批量替换
      

  4.   

    呵呵,谢谢大家的回复,这几天一直在跟甲方进行艰苦的谈判,博弈啊,累死了,对方坚决不松口啊,我们的数据库表名和字段大部分都是中文,存储过程和函数的名称也大部分是中文,咋是中国人,中文方便啊,一看就懂,现在要全部改过来,除了数据库要改外,还有前后台的代码。服务程序的一大堆delphi的code啊,而且我们现在还是用的bde,不能再64位机上运行,甲方基本都是win7 64位的,我们还要修改为ado才行,1个多G的源代码啊,而且要编译64位的,我们打算用delphi xe4,但是要从可怜的delphi7转过来,真的是没有多大把握啊,有没有什么办法写个程序,遍历所有源代码,把所有query和代码中的表明先修改过来,我现在是准备建一个表,用来存放中文表和英文表的映射关系,然后逐一对照替换,希望大家多个点意见啊,如果有整套的解决方案,经过我们论证确实可行的话,可以人民币交易的
      

  5.   

    遍历query和代码应该是比较好实现的,映射表做好了,替换起来会比较快,就在xe中跑起来要花不少时间
      

  6.   

    楼上的,我想写个程序来遍历query,改怎么做呢
      

  7.   

    问题是delphi的代码和form是分开的啊,我在程序中怎么打开.pas和form里面的query呢
      

  8.   

    前几天把库里面的表,视图,函数,存储过程,触发器全部做了个对照表,视图,存储过程等的文本又写入了一个文本表中,然后用对象表中的英文名称来做替换,现在的问题是,我想把视图,函数,存储过程等里面的中文表名替换掉,写了个存储过程,执行了半天,替换不了
    ALTER procedure [dbo].[置换文本存储过程]
    as 
    begin
        declare @texttypetable table(id int identity,对象类型 varchar(30))
    declare @minviewid int,@objid int,@mintextid int,@minallobjid int,@textstr nvarchar(4000),
    @chsname varchar(50),@engname varchar(50),@allnextobjid int,@objtype varchar(50)
    declare @viewtable table(id int,中文名称 varchar(50),英文名称 varchar(50),对象类型 varchar(50),原对象id int)
    declare @commentstable table(id int,文本 nvarchar(4000))
    declare @allobjtable table(id int,中文名称 varchar(50),英文名称 varchar(50),对象类型 varchar(50),原对象id int)
    declare @changetable table(id int,中文名称 varchar(50),英文名称 varchar(50),替换文本 nvarchar(4000))
    declare @inum int,@typename varchar(30)
    --置换文本中的表名
    insert into @commentstable select id,text from 对象文本表 order by id
    insert into @allobjtable select * from 中英文对照表 order by id
    select @minallobjid=MIN(id) from @allobjtable
    while @minallobjid is not null 
    begin
    select @chsname=rtrim(ltrim(中文名称)),@engname=rtrim(ltrim(英文名称)) 
    from @allobjtable where id=@minallobjid

    set @mintextid=null
    select @mintextid=MIN(id) from @commentstable
    while @mintextid is not null 
    begin
    select @textstr=文本 from @commentstable where id=@mintextid
    set @textstr=REPLACE(@textstr,@chsname,@engname)
    update 对象文本表 set text=@textstr where id=@mintextid
    select @allnextobjid=@mintextid,@mintextid=null
    select @mintextid=MIN(id) from @commentstable where id>@allnextobjid
    end
    delete @allobjtable where id=@minallobjid
    set @minallobjid=null
    select @minallobjid=MIN(id) from @allobjtable
    end    
    end思路就是用对照表中的英文名称去遍历文本表中的文本,把每个文本取出来替换一下,然后更新回去,结果是没有效果,各位有什么好办法吗?
    救急啊!!!
      

  9.   

    现在dfm和pas文件都可以替换了,数据库也已经替换了,最后的问题是字段怎么替换,在数据库和程序代码中
      

  10.   

    可以考虑把原来数据库生成sql语句,所有表,视图和存储过程。再修改成中文。可能会比较快。另外code中只有改啦没法的。