![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить наличие записи в табл. Access? [D7, Access]
UnDISCOvery © (2004-09-27 17:23:00)Всем привет!
Можно ли в Access узнать существует ли запись с определенным значением в таблице? Что-то типа выражения T-SQL "if exist"?
Пока что сделал уникальный индекс на поле и пробегаю по всем данным втупую пытаясь добавить данные и отлавливай exception.
По-моему не самый быстрый вариант :)
sniknik (2004-10-01 20:13:00) [1]... (женщина легкого поведения). что за привычка задавать вопросы/отвечать на наводящие так будто исходные данные по меньшей мере секреты родины?
насколько неформатированного? КАКсам распознаеш? пример можеш привести, или решение не нужно? форум на то и нужен чтобы обсуждать а не готового решения ждать (откуда оно возьмется без обсуждений? для готового уже все сказано).
метод доступа? "уникальный индекс" (значение) откуда береш? как данные заносиш? ... в общем не будь скромником, опиши задачу.
UnDISCOvery (2004-10-01 19:32:00) [2]И к сожалению неформатированного, сам распознаю и то, что нужно заношу в БД
sniknik (2004-10-01 11:11:00) [3]> Новые из текстового файла, к сожалению :(
форматированного? сам как распознаеш?
UnDISCOvery (2004-10-01 10:59:00) [4]Новые из текстового файла, к сожалению :(
ЮЮ (2004-10-01 03:38:00) [5]А новые откуда берутся? Если тоже из БД, то связать обе таблицы и получить список только новых записей
UnDISCOvery (2004-09-30 15:03:00) [6]Потому что новых данных гораздо меньше, а при попытке вставить старые (уже добавленные) возникает искл. ситуация из-за уникальности индекса в БД
Sergey13 (2004-09-28 09:23:00) [7]2[3] UnDISCOvery (27.09.04 17:35)
>Exception происходит очень часто :)
Почему?
Sandman25 (2004-09-27 17:43:00) [8]query2.sql.text := 'insert into mytable(id, value) values(:id, :value)';
...
query1.sql.text := 'update mytable set value = :value where id = :id';
query1.prepare;
while ... do
begin
query1.params[1].asinteger := myid;
query1.params[0].asfloat := myvalue;
query1.execsql;
if query1.rowsaffected = 0 then
begin
query2.params[0].asinteger := myid;
query2.params[1].asfloat := myvalue;
query2.execsql;
end
end
Sandman25 (2004-09-27 17:42:00) [9]query2.sql.text := 'insert into mytable(id, value) values(:id, value)';
...
query1.sql.text := 'update mytable set value = :value where id = :id';
query1.prepare;
while ... do
begin
query2.params[1].asinteger := myid;
query2.params[0].asfloat := myvalue;
query1.execsql;
if query1.rowsaffected = 0 then
begin
query2.params[0].asinteger := myid;
query2.params[1].asfloat := myvalue;
query2.execsql;
end
end
UnDISCOvery (2004-09-27 17:35:00) [10]Exception происходит очень часто :)
Можно поподробнее с вариантом про "тупой" update?
Алгоритм критичен ко времени, он должен выполняться как можно быстрее ... Ваш совет?
Sandman25 (2004-09-27 17:29:00) [11]UnDISCOvery (27.09.04 17:23)
Если exception происходит не слишком часто - то это самый быстрый вариант.
Если, наоборот, очень редко встречаются новые данные, то нужно "втупую" делать update, затем анализировать число измененных записей и в случае необходимости добавлять новую строку.
Sergey13 (2004-09-27 17:26:00) [12]select count(*) from table
where field1='my value'