Форум: "Базы";
Текущий архив: 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