1

サンプルの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;

そして例外を受け取ります

「算術例外、数値のオーバーフロー、または文字列の切り捨て」

4

3 に答える 3

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;
于 2012-06-15T13:53:57.073 に答える
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,

算術例外、数値オーバーフロー、または文字列の切り捨てで私の答えを見てください

于 2012-06-15T20:25:45.873 に答える
-1

最初に、ストアド プロシージャの "END" の前に "SUSPEND" を置きます

于 2012-06-15T03:33:41.033 に答える