Главная страница
    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
2-1277427763
Diplomat
2010-06-25 05:02
2010.09.19
Как лучше осуществить триальность программы


15-1276784558
Aleks
2010-06-17 18:22
2010.09.19
Armadillo (неожиданное автозакрытие программы)


3-1243862381
TheEd
2009-06-01 17:19
2010.09.19
Отображение изменений, внесённых в БД другими пользователями


2-1276942888
TStas
2010-06-19 14:21
2010.09.19
Засечь вставку флешки


15-1277105792
12
2010-06-21 11:36
2010.09.19
Идея такая. Пусть пользователь сам себе рисует форму..





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