Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Вниз

fb и добавление записей   Найти похожие ветки 

 
nortsov   (2003-08-14 20:43) [0]

Доброе время суток
Использую FB, вот такой фрагмент кода, все ок работает, а
вот кусок ниже дублирует добавления записей. Собственно вопрос
правильно ли я добавляю записи в fb? Сначала insert, потом формирую
запись и IBUpdateFacecard.Apply(ukInsert); сохраняю в таблице. Не
пойму в первом случаи все ок, во втором дублирование.
Спасибо,
С уваженем, Андрей

while not nedoimka.Eof do
begin
for i:=1 to nedoimka.FieldCount-2 do
begin
facecard.Insert;
facecard.fieldbyname("kod").asstring:=nedoimka.fieldbyname("kod").asst ring;
facecard.fieldbyname("nach").asfloat:=nedoimka.fields[i].asfloat;
facecard.fieldbyname("upl").asfloat:=0;
facecard.fieldbyname("flocate").value:=nedoimka.fieldbyname("flocate") .value;
case i of
1:facecard.fieldbyname("date_").asdatetime:=strtodate("28.02."+form1.g lobal_year);
2:facecard.fieldbyname("date_").asdatetime:=strtodate("31.03."+form1.g lobal_year);
3:facecard.fieldbyname("date_").asdatetime:=strtodate("30.04."+form1.g lobal_year);
4:facecard.fieldbyname("date_").asdatetime:=strtodate("31.05."+form1.g lobal_year);
5:facecard.fieldbyname("date_").asdatetime:=strtodate("30.06."+form1.g lobal_year);
6:facecard.fieldbyname("date_").asdatetime:=strtodate("31.07."+form1.g lobal_year);
7:facecard.fieldbyname("date_").asdatetime:=strtodate("31.08."+form1.g lobal_year);
8:facecard.fieldbyname("date_").asdatetime:=strtodate("30.09."+form1.g lobal_year);
9:facecard.fieldbyname("date_").asdatetime:=strtodate("31.10."+form1.g lobal_year);
10:facecard.fieldbyname("date_").asdatetime:=strtodate("30.11."+form1. global_year);
11:facecard.fieldbyname("date_").asdatetime:=strtodate("31.12."+form1. global_year);
12:facecard.fieldbyname("date_").asdatetime:=strtodate("30.01."+inttos tr(strtoint(form1.global_year)+1));
end;
// facecard.Post;
IBUpdateFacecard.Apply(ukInsert);
end;
nedoimka.Next;
end;
--------------------
а вот другой

while not ned_rep.Eof do
begin
reports.Insert;
// showmessage(ned_rep.Fields[0].Value);
reports.Fields[0].Value:=ned_rep.Fields[0].Value;
reports.Fields[1].Value:=ned_rep.Fields[1].Value;
reports.Fields[2].Value:=ned_rep.Fields[2].Value;

rep_pen.Params[1].asstring:=ned_rep.Fields[0].asstring;
rep_pen.Params[2].value:=ned_rep.Fieldbyname("flocate").value;
rep_pen.Prepare;
rep_pen.Open;

reports.Fields[3].Value:=rep_pen.Fields[1].Value;
reports.Fieldbyname("flocate").value:=ned_rep.Fieldbyname("flocate").v alue;
if rep_pen.RecordCount<>0 then
begin
if (ned_rep.Fields[2].Value-ned_rep.Fields[1].Value-rep_pen.Fields[1].Val ue>=0 )then
begin
reports.Fields[4].Value:=ned_rep.Fields[2].Value-ned_rep.Fields[1].Val ue-rep_pen.Fields[1].Value;
reports.Fields[5].Value:=0;
end;
if (ned_rep.Fields[2].Value-rep_pen.Fields[1].Value>0) and
(ned_rep.Fields[2].Value-ned_rep.Fields[1].Value-rep_pen.Fields[1].Val ue<0 ) then
begin
if (ned_rep.Fields[2].Value-ned_rep.Fields[1].Value>rep_pen.Fields[1].Val ue) then
reports.Fields[4].Value:=ned_rep.Fields[2].Value-ned_rep.Fields[1].Val ue
else
begin
reports.Fields[4].Value:=0;
reports.Fields[5].Value:=rep_pen.Fields[1].Value+ned_rep.Fields[1].Val ue-ned_rep.Fields[2].Value;
end;
end;
if (ned_rep.Fields[2].Value-ned_rep.Fields[1].Value<=0) then
begin
reports.Fields[4].Value:=ned_rep.Fields[2].Value-ned_rep.Fields[1].Val ue;
reports.Fields[5].Value:=rep_pen.Fields[1].Value;
end;
end
else
reports.Fields[4].Value:=ned_rep.Fields[2].Value-ned_rep.Fields[1].Val ue;

IBUpdatereports.Apply(ukInsert);
rep_pen.Close;
// ProgressBar1.StepIt;
ned_rep.Next;
end;


 
VID   (2003-08-14 21:18) [1]

такой метод добавления записей в таблицу плох тем, что при большом количестве вызовов
IBDataSet.Edit...IBDataSet.Post
или
IBDataSet.Insert...IBDataSet.Post
работа программы замедляется, где то после 3000 записи. к тому же этот вариант сжирает кучу памяти.
Лучше научись выполнять АБСОЛЮТНО ВСЕ операции массовых постов (POST) с помошью TIBQuery (или TFIBQuery).


 
Johnmen   (2003-08-14 23:27) [2]

Вникать глубоко неинтересно... Притом, что все это делается совсем не так, не в таком стиле, не такими способами...
А навскидку, ряд ошибок, например здесь :
...
rep_pen.Open;

reports.Fields[3].Value:=rep_pen.Fields[1].Value;
// если записей нет, то что будет ?
reports.Fieldbyname("flocate").value:=ned_rep.Fieldbyname("flocate").v alue;
if rep_pen.RecordCount<>0 then
// использовать RecordCount неверно
...


 
Zacho   (2003-08-15 08:00) [3]


> VID © (14.08.03 21:18) [1]
> Лучше научись выполнять АБСОЛЮТНО ВСЕ операции массовых
> постов (POST) с помошью TIBQuery (или TFIBQuery).

Похоже, ты перепутал TIBQuery и TIBSQL :)


 
nortsov   (2003-08-15 09:12) [4]

А как правильно добавлять записи ? В TIBQuery добавлять insert? И какая альтернатива RecordCount. Писать select count(*)


 
Johnmen   (2003-08-15 09:17) [5]

>nortsov (15.08.03 09:12) [4]

Да. Да.



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

Форум: "Базы";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
3-10600
Сергей77
2003-08-14 09:14
2003.09.04
Навигация в DBGrid


3-10622
rosl
2003-08-13 12:16
2003.09.04
копирован ие3


3-10547
Lapin
2003-08-12 10:31
2003.09.04
Operation not applicable


14-10932
iusupp
2003-08-13 01:19
2003.09.04
Помогите ... Есть два вопроса...


3-10565
nortsov
2003-08-14 20:43
2003.09.04
fb и добавление записей





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