Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.029 c