
原因是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并打印到标准输出的控制台上。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)