Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.19;
Скачать: CL | DM;

Вниз

проверка наличия IDs в таблице   Найти похожие ветки 

 
Scot Storch   (2010-06-28 14:32) [0]

имеется таблица "A" с полем "ID". Нужно написать процедуру которая принимает в качестве входного параметра строку IDшников (символ-разделитель запятая) и проверяет имеет ли таблица "A" поле "ID" со значением ID из строки. Сделал так. Пока что сделал так (хреново как мне кажется):


procedure chk_IDs(const IDs: string);
var
 all, I, ID: Integer;
 cmp_query: TQuery;
 sSQLFmt: string;
 str_lst_IDs: TStrings;
begin
 str_lst_IDs := TStringList.Create;
 try
   str_lst_IDs.DelimitedText := IDs;
   cmp_query := TQuery.Create(nil);
   try
     cmp_query.DatabaseName :=  DB_NAME;
     cmp_query.SessionName  := SSN_NAME;
     all := str_lst_IDs.Count;
     for I := 0 to all - 1 do
     begin
       ID := StrToInt(str_lst_IDs[I]);
       cmp_query.SQL.Text := Format("SELECT * FROM items WHERE item_id = %d",
         [ID]);
       cmp_query.Open;
       if cmp_query.RowsAffected = 0 then
         raise Exception.CreateRes(@SCN_NOT_EXISTS, [ID]);
     end;
   finally
     cmp_query.Free;
   end;
 finally
   str_lst_IDs.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 chk_IDs("11,24,37,59,61,98");
end;


Получается, чтобы проверить каждый из ID нужно делать запрос. Дайте советы по оптимизации.


 
И. Павел ©   (2010-06-28 14:36) [1]

Можно преобразовать 11,24,... в id=11 or id=24 и запросить сразу все id из таблицы. Если recordcound<количества id, то какой-то id не нашли (это если id уникален для каждой строки).


 
Sergey13 ©   (2010-06-28 14:37) [2]

Если на входе строка не шибко здоровая, то можно так попробовать
select id from table where id in (твоя строка из идшников)


 
Scot Storch   (2010-06-28 14:41) [3]

проблема в том, что нужно генерить exception для несуществующего ID. если посылать все сразу (IN), то нельзя отследить какой из них ошибочный.


 
Sergey13 ©   (2010-06-28 14:50) [4]

> [3] Scot Storch   (28.06.10 14:41)

> если посылать все сразу (IN), то нельзя отследить какой
> из них ошибочный

сравни результат с входной строкой.



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

Текущий архив: 2010.09.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1277370419
partizan
2010-06-24 13:06
2010.09.19
Открыть веб-страницу


15-1277497794
Юрий
2010-06-26 00:29
2010.09.19
С днем рождения ! 26 июня 2010 суббота


15-1276780683
shaman
2010-06-17 17:18
2010.09.19
объектно-ориентированное програмирование


15-1277411728
DevilDevil
2010-06-25 00:35
2010.09.19
Валидация нескольких XML по одному XSD


15-1277560566
Typer
2010-06-26 17:56
2010.09.19
Как выделить все ветки созданные одним автором??