Главная страница
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.008 c
15-1277095834
И. Павел
2010-06-21 08:50
2010.09.19
Странное переполнение


15-1276851347
Kerk
2010-06-18 12:55
2010.09.19
Кто-нибудь сталкивался с nosql-базами?


15-1277470736
12
2010-06-25 16:58
2010.09.19
Киньтесь ссылкой на архив иконок


2-1277129198
WHR
2010-06-21 18:06
2010.09.19
Что выбрать: AdoDataSet, ADOQuery, ADOCommand,...?


11-1214765166
<>
2008-06-29 22:46
2010.09.19
Программа, написанная на KOL определяется как вирус!