![]() |
![]() ![]() ![]() ![]() |
|
Проблемы StoredProc у SQL serverDelphi , Базы данных , SQLПроблемы StoredProc у SQL serverАвтор: David Gecawich Обнаруженная мною проблема заключается в ненормальной работе BDE с TStoredProc, когда хранимая процедура SQL получает на входе параметр типа String. Как я понял, BDE/SQL Links перед вызовом хранимой процедуры заносит в строку управляющие символы. Чтобы обойти эту проблему, Borland предлагает использовать TQuery. Конечно, ничего не стоит перевести TStoredProcs в TQuerys (с сохранением полного набора характеристик и без потери скорости), но мне стала интересна причина такого поведения компонента, и я решил покопаться в TStoredProc насколько это было мне возможно и интересно, для чего я добавил дополнительный параметр к хранимой процедуре, позволяющий указывать длину передаваемой процедуре строки. Затем, уже в процедуре, если реальная длина строки оказывалась больше, с помощью дополнительно передаваемого параметра бралась, и в дальнейшем использовалась только левая часть строки, а остальные управляющие символы игнорировались. Вот пример: Приведенная ниже процедура SQL Server возвращает 1 если таблица существует, и 2 в противном случае.
CREATE PROCEDURE up_TableExists
( @TableName varchar(50), @TableNameLen int = null)
AS
declare @CleanTblName varchar(50)
if @TableNameLen is not null
select @CleanTblName = SubString(@TableName,1,@TableNameLen)
else
select @CleanTblName = @TableName
if EXISTS (SELECT name FROM sysobjects WHERE name = @CleanTblName)
RETURN 1
else
RETURN 2Поехали...
В Delphi, прежде чем вызвать ExecProc, установите параметр длины строки... вот пример вызова хранимой процедуры в Delphi...
Проблема StoredProc в SQL Server заключается в том, что Borland Database Engine (BDE) автоматически добавляет управляющие символы в строку при передаче параметра типа String хранимой процедуре, что может привести к неправильной работе. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
|||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | |||||