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

Вниз

проверка наличия 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;
Скачать: [xml.tar.bz2];

Наверх




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


2-1277196510
Who_is_you?
2010-06-22 12:48
2010.09.19
сбои в асинхронном приеме с сом порта


15-1277661939
ewd
2010-06-27 22:05
2010.09.19
Посоветуйте, как назвать диплом


2-1277362042
ther
2010-06-24 10:47
2010.09.19
назначение клавишы для визарда/эксперта


15-1277463616
aka
2010-06-25 15:00
2010.09.19
IP локация





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский