Delphi WideStringType OutParameter中的Firebird异常

时间:2012-06-14 21:31:10

标签: delphi parameters firebird

我有示例firebird存储过程

PROCEDURE PROCEDURE01
RETURNS (
 PARAMETER01 VARCHAR(50))
AS 
BEGIN
  PARAMETER01 = 'Hello';
END

并且在Delphi方面

LCommand := SQLConnection1.DBXConnection.CreateCommand;
LCommand.CommandType := TDBXCommandTypes.DbxStoredProcedure;
LCommand.Text := 'PROCEDURE01';
LIdOut := LCommand.CreateParameter;
LIdOut.ParameterDirection := TDBXParameterDirections.OutParameter;
LIdOut.DataType := TDBXDataTypes.WideStringType;
LIdOut.Name := 'PARAMETER01';
LCommand.Parameters.AddParameter(LIdOut);
LCommand.Prepare;
LReader := LCommand.ExecuteQuery;

并收到例外

“算术异常,数字溢出或字符串截断”

3 个答案:

答案 0 :(得分:4)

似乎是TDBXCommand(或者可能是Dbexpress firebird驱动程序)的限制,因为使用其他类型的输出参数都可以正常工作。作为解决方法,您可以使用TSQLStoredProc类。

试试这个样本。

var
 LSQLStoredProc :  TSQLStoredProc;
begin
  LSQLStoredProc:=TSQLStoredProc.Create(nil);
  try
    LSQLStoredProc.SQLConnection:=SQLConnection1;
    LSQLStoredProc.StoredProcName:='PROCEDURE01';
    LSQLStoredProc.ExecProc;
    ShowMessage(LSQLStoredProc.ParamByName('PARAMETER01').AsString);
  finally
    LSQLStoredProc.Free;
  end;
end;

答案 1 :(得分:1)

将数据库设置为UTF-8作为示例。

CREATE DATABASE localhost:mybase
  USER SYSDBA
  PASSWORD masterkey
  PAGE_SIZE 8192
  DEFAULT CHARACTER SET UTF8;
  SET NAMES ISO8859_1;

CREATE TABLE scales (
  ID ...,      
  byteken VARCHAR(50) COLLATE DE_DE,

Arithmetic exception, numeric overflow, or string truncation

查看我的回答

答案 2 :(得分:-1)

首先在存储过程“END”之前放置“SUSPEND”