请将我的SQL SERVER中的SQL语句转成我在ACCESS中使用的语句 我在ACCESS中使用老是提示:不正常的GUID ……

请将我的SQL SERVER中的SQL语句转成我在ACCESS中使用的语句 我在ACCESS中使用老是提示:不正常的GUID ……,第1张

原因是ACCESS 数据库Jet引擎无法识别“SUBSTRING”函数和LENGTH函数所致

你可以用"Mid"函数取代“SUBSTRING”函数,"LEN"函数取代“LENGTH”函数即可,

具体如下:

SUBSTRING(busrid, 1, { LENGTH(agrpid) })

改为

MID(busrid, 1, LEN(agrpid))

整条SQL,这样写

SELECT DISTINCT dsysid, dsysdesc, dlinkasp, dsysdesc AS Expr1, cprgid, cprgdesc, clinkasp AS sublink, dseq, cseq AS Expr2

FROM OA_SYY_M_POST AS a INNER JOIN

OA_SYY_M_MNU AS b ON agrpid =

Mid(busrid, 1, LEN(agrpid))

INNER JOIN

OA_SYY_M_PRG AS c ON bprgid = cprgid INNER JOIN

OA_SYY_M_SYS AS d ON csubid = dsysid

WHERE (aempno = '111') AND (cprgflog = 0) OR

(cprgflog = 0) AND (busrid = '0899')

ORDER BY dseq, dsysid, Expr2

修改后,Jet引擎就可以识别了,前提是ACCESS 数据表的结构与MSSQLSERVER的数据表结构完全相同。

  通用的GUID的结构如下  typedefstruct_GUID{  DWORDData1;  WORDData2;  WORDData3;  BYTEData4[8];  }GUID;  举一个例子:  假设一个GUID的格式是这样的6B29FC40-CA47-1067-B31D-00DD010662DA  其中Data1是32位,可以看做8个四位十六进制数,对应于上面的6B29FC40  其中Data2是16位,可以看做4个四位十六进制数,对应于上面的CA47  其中Data3是16位,可以看做4个四位十六进制数,对应于上面的1067  其中Data4比较特殊,是8个字节也就可以看做16个四位十六进制数  取其Data4[0],Data4[1]来组成4个四位十六进制数,对应于上面的B31D  取其Data4[2],Data4[3]来组成4个四位十六进制数,对应于上面的00DD  取其Data4[4],Data4[5]来组成4个四位十六进制数,对应于上面的0106  取其Data4[6],Data4[7]来组成4个四位十六进制数,对应于上面的62DA  注意:四位十六进制数对应一个GUID字符。  在Windows下提供了一个函数可以生成一个GUID。需要使用的头文件"objbaseh",需要链接的库ole32lib。  HRESULTCoCreateGuid(GUIDpguid);  在Linux下首先需要下载到相应的库文件和头文件  如果是Debian用户可以方便的通过apt命令来获取相关资源。  apt-getinstalluuid-dev  安装完成后会发现  在/usr/include/下有一个uuid文件夹,其中则包含了uuidh头文件。  在/usr/lib/下有几个libuuid的链接库文件,包括静态和动态链接库。  打开uuidh你会发现有一个uuid_generate(uuid_tout)的函数声明。我们可以通过调用这个函数来生成UUID。  uuid_generate(reinterpret_cast(&guid));  生成GUID是不是很简单!是的,因为生成的算法不用我们去实现,我们是站在前人的肩膀所以我们要感谢他们。  下面给出一个WINDOWS和LINUX下通用的程序。  //uuid_testcpp  #include  #include  #include  #include"uuid_testhpp"  #ifdefWIN32  #include  #else  #include  #endif  usingnamespacestd;  namespaceChinuxTeam  {  GUIDCreateGuid()  {  GUIDguid;  #ifdefWIN32  CoCreateGuid(&guid);  #else  uuid_generate(reinterpret_cast(&guid));  #endif  returnguid;  }  std::stringGuidToString(constGUID&guid)  {  charbuf[64]={0};  #ifdef__GNUC__  snprintf(  #else//MSVC  _snprintf_s(  #endif  buf,  sizeof(buf),  "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",  guidData1,guidData2,guidData3,  guidData4[0],guidData4[1],  guidData4[2],guidData4[3],  guidData4[4],guidData4[5],  guidData4[6],guidData4[7]);  returnstd::string(buf);  }  }  对应的头文件  //uuid_testhpp"  #include  #include  #include  typedefstruct_GUID  {  unsignedlongData1;  unsignedshortData2;  unsignedshortData3;  unsignedcharData4[8];  }GUID,UUID;  namespaceChinuxTeam  {  GUIDCreateGuid();  std::stringGuidToString(constGUID&guid);  }//namespaceChinuxTeam

  最后一个GuidToString()稍微解释一下,作用就是把GUID以固定的格式输出到标准string字符串中,  根据编译器的不同调用分别调用了不同的字符串打印函数。

  另外附一个简单的测试函数

  #include  #include  #include  #ifdefWIN32  #include"objbaseh"  #else  typedefstruct_GUID  {  unsignedlongData1;  unsignedshortData2;  unsignedshortData3;  unsignedcharData4[8];  }GUID,UUID;  #endif  namespaceChinuxTeam{  GUIDCreateGuid();  std::stringGuidToString(constGUID&guid);  }  运行后会生成一个GUID并打印到标准输出的控制台上。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/13492117.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存