Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Poisk zapisi v Interbase table   Найти похожие ветки 

 
Alexei Sviridov   (2003-05-30 22:41) [0]

Dobroe vremja sutok...Podskazhite kak b tablice Interbase bistro opredelit suschestvuet li zapis i esli da to bistro k nej peremestitsja.
Na danni moment ja delaju tak:
countquery:=TIBQuery.Create(owner);
countquery.Database:=dm.DB;
importquery.close;
importquery.sql.add("select * from stocklistwhere upper(code)=:param0");
importquery.open;
countquery.SQL.Add("select count(code) from stocklist where upper(code)=:param0");
if countquery.Fields[0].Value<>0
then importquery.edit
else importquery.insert.... i t.d.
Pri bolshom ob"eme dannih poisk odnoj zapisi( code - Primary Key) eto navernoe daleko ne samij elegantnij algoritm, mozhet kto-to podskazhet chto-nibud?


 
Zacho ©   (2003-05-30 23:04) [1]


> Alexei Sviridov (30.05.03 22:41)

Все гораздо проще :-)
importquery.sql.add("select * from stocklistwhere upper(code)=:param0");
importquery.open;
if importquery.Locate("code",code,[]) then
begin
importquery.Edit;
...
end else
begin
importquery.insert;
....
end
Здесь второй параметр в Locate - нужное значение PK.


 
Avreliy   (2003-05-30 23:08) [2]

При использовании BDE можно попробывать табличный метод
FindKey(). Можеть быть можно и для IBX-таблиц?


 
Dred2k ©   (2003-05-30 23:11) [3]

Для "серверных" датасетов все одно...
Хотя, реализация бывает разной.


 
Alexei Sviridov   (2003-05-30 23:30) [4]

To Zacho
VSe bi horosho, no Locate ne katit. Locatom u menja do etogo rabotalo. No problema v tom chto v baze 110 000 records i pri metode LOcate nabljudajutsja bolshie tormoza!!!


 
Zacho ©   (2003-05-30 23:30) [5]

Что-то я не сразу сообразил, что именно надо. Можно еще проще:
importquery.sql.add("select * from stocklistwhere upper(code)=:param0");
importquery.open;
if importquery.IsEmpty then
begin
importquery.Insert;
...
end else
begin
importquery.Edit;
....
end

Но я бы сделал хранимую процедуру. Или VIEW с триггерами, в зависимости от задачи.


 
Zacho ©   (2003-05-30 23:33) [6]


> Alexei Sviridov (30.05.03 23:30)

Судя по запросу - этого не может быть. Если code - PK то запрос должен возвращать всего одну запись, и Locate тормозить просто не может.


 
Alexei Sviridov   (2003-05-31 01:04) [7]

>Zacho
Code dejstvitelno PK. A Locate ne budet tormozit tolko v tom sluchae esli stocklist.FetchAll - chto samo po sebe emkaja zadacha (110 000 records). Spasibo


 
Zacho ©   (2003-05-31 01:29) [8]


> Alexei Sviridov (31.05.03 01:04)

Да собственно дело в том, что приведенный тобой запрос должен выбирать только одну запись. А в этом случае тормозить Locate никак не может.
И еще раз скажу: для такой цели (UPDATE записи если она есть, или INSERT если нет) я бы предпочел ХП.


 
Alexei Sviridov   (2003-05-31 02:03) [9]

Prostite za glupij vopros: a chto takoe "ХП"?


 
VMcL ©   (2003-05-31 04:10) [10]

>Alexei Sviridov (31.05.03 02:03)
>Prostite za glupij vopros: a chto takoe "ХП"?

Судя по постам, "ХП" - хранимая процедура.


 
Alexei Sviridov   (2003-05-31 05:07) [11]

> VMcL
Spasibo, k etomu vremeni ja uzhe perepisal modul s ХП.
Vot gde ona sila SQL"evskaja. Spasibo vsem



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
14-84703
kull
2003-06-04 18:36
2003.06.26
А кто знает какие системы регистрации багов?


3-83941
Stam
2003-05-23 10:26
2003.06.26
Ошибка при работе с Oracle - ORA-04031. Помогите...


3-83886
Uran
2003-06-02 16:48
2003.06.26
DBF в рантайм.


6-84476
shurik
2003-04-19 15:33
2003.06.26
Работа ссетью


1-84141
NailMan
2003-06-10 16:32
2003.06.26
Отключение скринсейвера