Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Получения значения OUT параметра   Найти похожие ветки 

 
Гаврила ©   (2005-01-13 11:17) [0]

Доброго времени суток
имеем базу на MSSQL 2000
в ней таблица "folders"
имеем потомка от TADOQuery
задача - добавить запись в таблицу и получить ее ID
(ID - автоинкремент-поле в таблице типа int)

пишу код (это тестовый код, так что не обращайте внимания на его шероховатости)

procedure TCustomNBQuery.CreateDBO(const AObject: IDBObject);
var
 s: string;
 Param: TParameter;
 N: Variant;
begin
 Close;
 Parameters.Clear;
 s:="Insert into folders (Title, ParentID, Position) Values (""новая папка"", 0, 0) SET :IDParam = SCOPE_IDENTITY()";
 Param:=Parameters.AddParameter;
 Param.Name:="IDParam";
 Param.Direction:=pdOutput;
 Param.DataType:=ftInteger;
 Param.Size:=4;
 SQL.Text:=s;
 ExecSQL;
 N:=Parameters[0].Value;
end;


Запись добавляется, но в переменной N значение NULL

как победить ?


 
Соловьев ©   (2005-01-13 11:45) [1]

Insert into folders (Title, ParentID, Position) Values (""новая папка"", 0, 0)
select @current_ident("folders")
...

вместо ExecSQL; - Open;


 
Соловьев ©   (2005-01-13 11:48) [2]

сорри забыл :)

select ident_current("folders")


 
sniknik ©   (2005-01-13 11:52) [3]

paramcheck включен или выключен?
в любом случае работа с параметром должна быть после внесения запроса (если конечно само внесение не переопределено както по своему)

как вариант (для включенного)
procedure TCustomNBQuery.CreateDBO(const AObject: IDBObject): Variant;
begin
 SQL.Text:= "Insert into folders (Title, ParentID, Position) Values (""новая папка"", 0, 0) SET :IDParam = SCOPE_IDENTITY()";
 with Parameters[0] do begin
   Direction:= pdOutput;
   DataType:= ftInteger;
 end;
 ExecSQL;

 result:= Parameters[0].Value;
end;


сомневаюсь... (без теста) но попробуй...


 
sniknik ©   (2005-01-13 11:53) [4]

Соловьев ©   (13.01.05 11:45) [1]
а это без параметра, неинтересно... ;)


 
Гаврила ©   (2005-01-13 12:06) [5]


> [1] Соловьев ©


Как я понял ,в этом случае будет возвращен рекордсет с единственной записью и единственным полем ?

В принципе, это подходит, но что будет со скоростью по сравнению с параметрическим вариантом ?
Если то же самое, то годится, так как для этой операции скорость очень критична (будет вызываться в цикле десятки тысяч раз)
(сравнить скорость не могу так как второй вариант пока не работает)


>  [3] sniknik ©


Я уже потом понял, что с параметрами надо работаать после определения SQL:-), и написал приблизительно то же самое

имеем исключение "строка 1 - некореектный синтаксис около "= "

ParamCheck включен


 
sniknik ©   (2005-01-13 12:33) [6]

Гаврила ©   (13.01.05 12:06) [5]
хм... проверил (без переписывания компонента правда) работает, счас другой вариант проверю

 ADOCommand1.CommandText:=
   "INSERT INTO ATable (Name) VALUES ("" hjhg"") "+
   "SELECT :PVal = SCOPE_IDENTITY()";
 with ADOCommand1.Parameters[0] do begin
   Direction:= pdOutput;
   DataType:= ftInteger;
 end;
 ADOCommand1.Execute;
 Label1.Caption:= IntToStr(ADOCommand1.Parameters[0].Value);


 
sniknik ©   (2005-01-13 12:41) [7]

у меня и второй, как и первый вариант работает
 ADOCommand1.ParamCheck:= false;
 ADOCommand1.CommandText:=
   "INSERT INTO ATable (Name) VALUES ("" hjhg"") "+
   "SELECT ? = SCOPE_IDENTITY()";
 ADOCommand1.Parameters.CreateParameter("PVal", ftInteger, pdOutput, 0, 0);
 ADOCommand1.Execute;
 Label1.Caption:= IntToStr(ADOCommand1.Parameters[0].Value);

если не пройдет, то может это в вашем компоненте дело? или в  (ADOQuery)?


 
ЮЮ ©   (2005-01-13 12:45) [8]

>или в  (ADOQuery)?

Остается проверить на ADOTable и ADOStoredProc :)


 
Гаврила ©   (2005-01-13 13:57) [9]

В общем, вариант с параметрами так и не заработал, почему - не понятно.
Времени разбираться сейчас нет, поэтому сделал по варианту
[1] Соловьев ©

всем спасибо



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
14-1106244642
netnetnetnet
2005-01-20 21:10
2005.02.13
Физика


14-1106208532
YurikGL
2005-01-20 11:08
2005.02.13
Куда идти молодому специалисту.


1-1106990305
ivane
2005-01-29 12:18
2005.02.13
Графика в TRichEdit


14-1106542876
Kerk
2005-01-24 08:01
2005.02.13
Филармония.


14-1106412939
thaddy
2005-01-22 19:55
2005.02.13
A bit off topic, but kol related!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский