将Oracle LONG解压缩到VBA中的string

我很难从数据库中获取LONG字段,并进入我的Excel(VBA + ADO)应用程序。 我想知道有没有人可以帮忙?

这样做根本没有任何效果(投射到一个string,或不)。

 myString = dataset!long_field 

我尝试了GetChunk方法,它应该做我希望的:

 myString = CStr(dataset!long_field.GetChunk(1000)) 

这确实得到了一些东西,但这不是我期望的数据(通常是一些乱码)。 奇怪的是,如果我尝试在立即窗口中运行这个代码,那么我会得到一些希望:

 Debug.Print CStr(dataset!long_field.GetChunk(1000)) ello W orld ! 

我不知道为什么(有点)在立即窗口而不是其他地方。 另外注意:

  • 甲骨文似乎正在使用某种2字节编码,所以有奇怪的间距

  • 从一开始就有大量的数据丢失; 这应该是“Hello World!”

我的另一个攻击计划是在数据库端编写一个函数,将long转换为varchar2 。 不幸的是,这也失败了,因为我需要访问的表是在我的模式之外,我没有从function中select数据的合适的授权(Oracle抱怨没有find表)。

所以我有点失落:(任何想法?

这适用于我:

 Debug.Print BinaryToString(RS.Fields("long_raw").Value) 

其中“RS”是包含查询结果的ADOlogging集,“BinaryToString”如下所示。

 Function BinaryToString(Binary) 'Antonin Foller, http://www.motobit.com 'Optimized version of a simple BinaryToString algorithm. Dim cl1, cl2, cl3, pl1, pl2, pl3 Dim L cl1 = 1 cl2 = 1 cl3 = 1 L = LenB(Binary) Do While cl1 <= L pl3 = pl3 & Chr(AscB(MidB(Binary, cl1, 1))) cl1 = cl1 + 1 cl3 = cl3 + 1 If cl3 > 300 Then pl2 = pl2 & pl3 pl3 = "" cl3 = 1 cl2 = cl2 + 1 If cl2 > 200 Then pl1 = pl1 & pl2 pl2 = "" cl2 = 1 End If End If Loop BinaryToString = pl1 & pl2 & pl3 End Function 

结果GetChunk确实有效:我做了一些沙箱testing,虽然仍然有奇怪的编码,但它确实返回了我想要的所有数据。 因此,我不知道为什么数据在我的主要查询中出现乱码; 所以我的解决scheme是只使用一个获取长数据的函数并解码它,并在需要时调用它,而不是将数据包含在主查询中。