Главная страница
    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-1277551866
Илья_
2010-06-26 15:31
2010.09.19
Компонент для работы с локальной сетью


3-1245325959
vanatage10
2009-06-18 15:52
2010.09.19
Как обновить значение в DBgrid измененное в другой программе


15-1277555904
Иксик
2010-06-26 16:38
2010.09.19
Прочитал Хаксли. ИШ, спасибо!


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


15-1277411278
AlexDn
2010-06-25 00:27
2010.09.19
Кто-нибудь пользовался Inno Setup?





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