Форум: "Базы";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
Внизиз Delphi получить все параметры процедуры MsSql-сервера Найти похожие ветки
← →
Nilov Serge (2005-08-11 12:24) [0]Поскажите, пожалуйста. Есть необходимость из Delphi по имени процедуры MsSql-сервера получить все параметры процедуры.
Делаю:
spGlobal: TADOStoredProc;
begin
spGlobal := TADOStoredProc.Create(nil);
try
spGlobal.ProcedureName := "userpublish.pmi_Codes"; // Имя СУЩЕСТВУЮЩЕЙ процедуры
spGlobal.Connection := MyConnection; // Обьект коннекта
spGlobal.Prepared := True;
ShowMessage( IntToStr(spGlobal.Parameters.Count) ); // Получаю 0
и массив spGlobal.Parameters пустой! В чем может быть проблема? Процедуру задавал в виде
"pmi_Codes", "[userpublish].[pmi_Codes]" - результат тотже. Правда и если задаю имя
несуществующей процедуры результат тотже. Конектюсь под "userpublish". Delphi 6 (Build 6.163).
А как правильно?
С уважением,
Нилов Сергей.
← →
Nikolay M. © (2005-08-11 13:09) [1]Недокументированная хранимка спасет отца русской демократии?
EXEC sp_procedure_params_rowset "моя процедура"
← →
sniknik © (2005-08-11 13:10) [2]правильно (документировано ;).
см. ADOConnection.OpenSchema и siProcedureParameters + F1 ;о)
(я бы помог, это всетаки довольно сложно (относительно конечно), но вот именно по параметрам у меня ничего нет, не приходилось... а в инете найти... сам сможеш с тем же успехом)
как OpenSchema работает (принцип) можеш посмотреть в ADODB.ADOConnection.GetTableNames к примеру.
← →
Nilov Serge (2005-08-11 15:11) [3]Спасибо, "EXEC sp_procedure_params_rowset "моя процедура"" - дешево и сердито и то что надо для спасения "отца русской демократии".
С уважением,
Нилов Сергей.
← →
Nikolay M. © (2005-08-11 15:53) [4]Пыж. Обращайтесь :)
← →
AlexWlad © (2005-08-11 20:05) [5]SP_Any - некая СП
Q_SP_par - временный Query
procedure TDM_ArchVisa.prReadSPparam(base, name: String);
Var
i : Integer;
begin
SP_Any.Parameters.Clear;
Q_SP_par.SQL.Clear;
Q_SP_par.SQL.Add("exec "+base+"..sp_procedure_params_rowset """+
name+
""", 1, NULL, NULL");
Q_SP_par.Open;
Q_SP_par.First;
while not Q_SP_par.eof do
begin
SP_Any.Parameters.AddParameter;
i := SP_Any.Parameters.Count-1;
if Q_SP_parIS_NULLABLE.AsBoolean then
SP_Any.Parameters.Items[i].Attributes := [paNullable];
case Q_SP_parDATA_TYPE.AsInteger of
2: begin // smallint
SP_Any.Parameters.Items[i].DataType := ftSmallInt;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
3: begin // integer
SP_Any.Parameters.Items[i].DataType := ftInteger;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
4..5: begin // real, float
SP_Any.Parameters.Items[i].DataType := ftFloat;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
6,131: begin // money,smallmoney, decimal,numeric
SP_Any.Parameters.Items[i].DataType := ftBCD;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
11: begin // bit
SP_Any.Parameters.Items[i].DataType := ftBoolean;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
17: begin // tinyint
SP_Any.Parameters.Items[i].DataType := ftWord;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
20: begin // bigint
SP_Any.Parameters.Items[i].DataType := ftLargeInt;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
72: begin // uniqueidentifier
SP_Any.Parameters.Items[i].DataType := ftGuid;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
128: begin // binary,varbinary,image
SP_Any.Parameters.Items[i].DataType := ftVarBytes;
SP_Any.Parameters.Items[i].Precision := Q_SP_parNUMERIC_PRECISION.AsInteger;
end;
129: begin // char,varchar,text
SP_Any.Parameters.Items[i].DataType := ftString;
SP_Any.Parameters.Items[i].Size := Q_SP_parCHARACTER_MAXIMUM_LENGTH.AsInteger;
end;
135: // datetime,smalldatetime
SP_Any.Parameters.Items[i].DataType := ftDateTime;
end;
case Q_SP_parPARAMETER_TYPE.AsInteger of
1: SP_Any.Parameters.Items[i].Direction := pdInput;
2: SP_Any.Parameters.Items[i].Direction := pdInputOutput;
4: SP_Any.Parameters.Items[i].Direction := pdReturnValue;
end;
SP_Any.Parameters.Items[i].Name := Q_SP_parPARAMETER_NAME.AsString;
Q_SP_par.Next;
end;
Q_SP_par.Close;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c