Форум: "Начинающим";
Текущий архив: 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