From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-0.9 required=3.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: =?UTF-8?Q?Bj=c3=b6rn_Lundin?= Newsgroups: comp.lang.ada Subject: Re: converting pointer to value Date: Fri, 5 Mar 2021 12:57:20 +0100 Organization: A noiseless patient Spider Message-ID: References: <02709d96-50fe-4e87-bdb5-4f430fa2717an@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 5 Mar 2021 11:57:21 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="c9e3b2236f724ff4b8eeba0adbb7f865"; logging-data="16162"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/TWQXbrhFnlOZg2vpJDxKJ" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 Cancel-Lock: sha1:NCpY/L2xP/XHr8S7mz/rR9L2imQ= In-Reply-To: Content-Language: sv Xref: reader02.eternal-september.org comp.lang.ada:61484 List-Id: Den 2021-03-05 kl. 12:02, skrev Björn Lundin: > > SQLParamData1.2:  4790608 > > > I'm thinking that I may be dealing with a pointer to a pointer here? > hmm, needs more testing. I changed the expected value from 5 to 7. Still > a bit off... > The way I put the value 5 or 7 into the API is procedure Bind_Parameter(Statement : in out Statement_Type; Column_Index : in Positive; Value : in CLOB; Null_Value : in Boolean := False) is A : Bind_Parameter_Type; L : Sqlulen := Sqlulen(Length(Value)); Rc : Sqlreturn := 0; Local_Length : Sqllen ; begin Local_Length := Sqllen(Sqllen(-100) -Sqllen(L)); --Sqllen'(SQL_LEN_DATA_AT_EXEC_OFFSET - L); A.String_Pointer := new String'(To_String(Value) & Ascii.Nul); if Null_Value then A.Length_Pointer := new Sqllen'(Sql_Null_Data); else A.Length_Pointer := new Sqllen'(Local_Length); end if; Rc := gnu.Db.Sqlcli.Sqlbindparameter (Statementhandle => Statement.Get_Handle, Parameternumber => Sql_Parameter_Number (Column_Index), Inputoutputtype => Sql_Param_Input, Valuetype => Sql_C_Char, Parametertype => Sql_Char, Columnsize => L, Decimaldigits => 0, Value => 7, --<-- here Bufferlength => 0, Strlen_Or_Indptr => A.Length_Pointer); exception when Gnu.Db.Sqlcli.Table_Not_Found => raise Sql.No_Such_Object; end Bind_Parameter; where Bind_parameter_Type contains Length_Pointer : aliased PTR_SQLLEN := null; String_Pointer : aliased PTR_STRING := null; and PTR_types defined as type PTR_STRING is access all String; Type PTR_SQLLEN is access all SQLLEN; and SQLLEN is a signed 64-bit integer and SQLBindParameter looks like function SQLBindParameter (StatementHandle : in SQLHSTMT; ParameterNumber : in SQL_Parameter_Number; InputOutputType : in SQL_Parameter_Type; ValueType : in SQL_C_DATA_TYPE; ParameterType : in SQL_DATA_TYPE; ColumnSize : in SQLULEN; DecimalDigits : in SQLSMALLINT; Value : in SQLINTEGER; BufferLength : in SQLLEN; StrLen_Or_IndPtr : access SQLLEN) return SQLRETURN is function BindParameter (StatementHandle : in SQLHSTMT; ParameterNumber : in SQL_Parameter_Number; InputOutputType : in SQL_Parameter_Type; ValueType : in SQL_C_DATA_TYPE; ParameterType : in SQL_DATA_TYPE; ColumnSize : in SQLULEN; DecimalDigits : in SQLSMALLINT; Value : in SQLINTEGER; BufferLength : in SQLLEN; StrLen_Or_IndPtr : access SQLLen) return SQLRETURN; pragma Import (Stdcall, BindParameter, "SQLBindParameter"); begin return BindParameter (StatementHandle, ParameterNumber, InputOutputType, ValueType, ParameterType, ColumnSize, DecimalDigits, Value, BufferLength, StrLen_Or_IndPtr); end SQLBindParameter; /Björn -- Björn