![]() | ![]() Products ![]() ![]() ![]() ![]() |
Home » Technical Support » ElevateDB Technical Support » Support Forums » ElevateDB General » View Thread |
Messages 1 to 5 of 5 total |
![]() |
Mon, Apr 13 2009 10:18 AM | Permanent Link |
Roy Lambert NLH Associates ![]() | I have a bug (surprise, surprise) in a user defined function and I think its this bit that's at fault
ms := TmemoryStream.Create; ms.Write(Pointer(FldStr)^, Length(FldStr) * SizeOf(Char)); ms.Position := 0; and I think its at fault because in the function definition I'm passing it as a string function CVSearch(const docType, FldStr, TstStr, CompStr, CI: string): boolean; but in the call I'm using .AsBlob (which is what FldStr is) else if ckn = 'cvsearch' then Params.FindParam('Result').AsBoolean := CVSearch(Params.FindParam('docType').AsString, Params.FindParam('FldStr').AsBlob, Params.FindParam('TstStr').AsString, Params.FindParam('CompStr').AsString, Params.FindParam('CI').AsString); Help please. Roy Lambert |
Mon, Apr 13 2009 2:08 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Roy,
<< I have a bug (surprise, surprise) in a user defined function and I think its this bit that's at fault ms := TmemoryStream.Create; ms.Write(Pointer(FldStr)^, Length(FldStr) * SizeOf(Char)); ms.Position := 0; and I think its at fault because in the function definition I'm passing it as a string function CVSearch(const docType, FldStr, TstStr, CompStr, CI: string): boolean; but in the call I'm using .AsBlob (which is what FldStr is) >> What exactly is the problem that you're seeing ? AsBlob will return a string up until Delphi 2009, after which it returns an array of bytes. However, a type mismatch like that should get caught by the compiler, so that can't be the issue, and the above code is fine for working with a long AnsiString. -- Tim Young Elevate Software www.elevatesoft.com |
Tue, Apr 14 2009 2:35 AM | Permanent Link |
Roy Lambert NLH Associates ![]() | Tim
>What exactly is the problem that you're seeing ? AsBlob will return a >string up until Delphi 2009, after which it returns an array of bytes. >However, a type mismatch like that should get caught by the compiler, so >that can't be the issue, and the above code is fine for working with a long >AnsiString. I'm currently using D2006. What's happening is I'm storing a document in this column (generally it will be a Word document but might be pdf, spreadsheet or some other form of wp) and I want to be able to do a word search using my own SQL function. To do this I pass the column as one of the parameters and, when its a Word document I'm loading it into Scalabium's MSWord component to extract the text for further processing. This component has LoadFromFile and LoadFromStream methods neither of which I can get to work because whilst in EDBManager I can see (say) 32Kb of BLOB data when it reaches the user defined function I seem to have only 4 bytes left - I added this showmessage(fldstr+' ...:'+inttostr(length(FldStr))); before I do anything with the data and received ???? ....:4 as the message. FldStr is the blob field I'm passing across. If I push it into the memorystream and save to file I end up with a file containing ????. From my end it looks as though the data isn't getting through properly. On the other hand I could be misinterpreting things or doing something totally wrong or not allowed. I hope that helps cos I'm stuck at trying to explain it better. Roy Lambert |
Tue, Apr 14 2009 9:27 AM | Permanent Link |
Roy Lambert NLH Associates ![]() | Tim
The latest is I added a new function with just the parameter changed from BLOB to CLOB EXECUTE IMMEDIATE 'CREATE FUNCTION "xxx" (IN "docType" VARCHAR COLLATE ANSI, IN "FldStr" CLOB, IN "TstStr" VARCHAR COLLATE ANSI, IN "CompStr" VARCHAR COLLATE ANSI, IN "CI" VARCHAR COLLATE ANSI) RETURNS BOOLEAN EXTERNAL NAME "nlhFunctions"'; and the .AsBlob changed to .AsString xxx' then Params.FindParam('Result').AsBoolean := CVSearch(Params.FindParam('docType').AsString, Params.FindParam('FldStr').AsString, Params.FindParam('TstStr').AsString, Params.FindParam('CompStr').AsString, Params.FindParam('CI').AsString); and CAST the field in the sql statement xxx(_LatestCVType, cast(_LatestCV as clob), 'CONTAINS' , 'watling', 'Y') This works and even returns the correct result which I think validates my code ![]() Roy Lambert |
Thu, Apr 16 2009 5:09 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Roy,
<< This works and even returns the correct result which I think validates my code ![]() parameter passing or the .AsBlob >> I'm still looking into this, and should have something for you soon. -- Tim Young Elevate Software www.elevatesoft.com |
This web page was last updated on Wednesday, July 2, 2025 at 06:46 PM | Privacy Policy![]() © 2025 Elevate Software, Inc. All Rights Reserved Questions or comments ? ![]() |