Страница 1 из 1

not in edit mode

Добавлено: 22 окт 2007, 15:38
DenTig
Читаю из текстового файла и пытаюсь добавить новую запись в базу.
procedure ins;
var
f:textfile;

d,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22:string;
d23,d24,d25,d26,d27,d28,d29:string;

i,k,j:integer;
begin
assignfile(f,'c:\Program files\1cv77\query.txt');
reset(f);
for j:=1 to 29 do
readln(f,d);
closefile(f);
form1.IBQuery1.SQL.Clear;
form1.IBQuery1.SQL.Add('select * from CARD where uid='+trim(D));
form1.IBQuery1.Active:=true;
form1.DataSource1.DataSet:=form1.IBQuery1;
if form1.IBQuery1.RecordCount > 0 then
begin
logfile(1);
form1.IBQuery1.Active:=false;
end

else
begin
assignfile(f,'c:\Program files\1cv77\query.txt');
reset(f);
readln(f,d);
closefile(f);
form1.IBQuery1.SQL.Clear;
form1.IBQuery1.SQL.Add('select * from CARD where cardnum='+trim(D));
form1.IBQuery1.Active:=true;

if form1.IBQuery1.RecordCount > 0 then
begin
logfile(2);
form1.IBQuery1.Active:=false;
end
else
begin
reset(f);
while not eof(f) do
begin
readln(f,d1);
readln(f,d2);
readln(f,d3);
readln(f,d4);
readln(f,d5);
readln(f,d6);
readln(f,d7);
readln(f,d8);
readln(f,d9);
readln(f,d10);
readln(f,d11);
readln(f,d12);
readln(f,d13);
readln(f,d14);
readln(f,d15);
readln(f,d16);
readln(f,d17);
readln(f,d18);
readln(f,d19);
readln(f,d20);
readln(f,d21);
readln(f,d22);
readln(f,d23);
readln(f,d24);
readln(f,d25);
readln(f,d26);
readln(f,d27);
readln(f,d28);
readln(f,d29);
end;
closefile(f);

form1.IBQuery1.Active:=false;
form1.DataSource1.DataSet:=form1.IBTable1;

form1.DBNavigator1.BtnClick(nbInsert);
val(d1,i,k);
form1.IBTable1CARDNUM.Value:=i;
val(d2,i,k);
form1.IBTable1Acclevel.Value:=i;
val(d3,i,k);
form1.IBTable1Limit.Value:=i;
val(d4,i,k);
form1.IBTable1Issue.Value:=i;
val(d5,i,k);
form1.IBTable1Pin.Value:=i;
form1.IBTable1Name1.Value:=d6;
form1.IBTable1Name2.Value:=d7;
form1.IBTable1Name3.Value:=d8;
val(d9,i,k);
form1.IBTable1IsActive.Value:=i;
val(d10,i,k);
form1.IBTable1APB.Value:=i;
form1.IBTable1Department.Value:=d11;
form1.IBTable1Title.Value:=d12;
//form1.IBTable1Hstart.Value:=StringToDate(d13);
//form1.IBTable1Hend.Value:=StringToDate(d14);
form1.IBTable1Created.Value:=StringToDate(d15);
form1.IBTable1Expires.Value:=StringToDate(d16);
form1.IBTable1Other1.Value:=d17;
form1.IBTable1Other2.Value:=d18;
form1.IBTable1Other3.Value:=d19;
form1.IBTable1Other4.Value:=d20;
form1.IBTable1Other5.Value:=d21;
form1.IBTable1Other6.Value:=d22;
form1.IBTable1Other7.Value:=d23;
form1.IBTable1Other8.Value:=d24;
form1.IBTable1Other9.Value:=d25;
form1.IBTable1Other10.Value:=d26;
val(d27,i,k);
form1.IBTable1WORKMODE.Value:=i;
val(d28,i,k);
form1.IBTable1Maket.Value:=i;
val(d29,i,k);
form1.IBTable1UID.Value:=i;
form1.DBNavigator1.BtnClick(nbPost);
logfile(0);
form1.IBQuery1.Active:=false;
end;
end;
end;

procedure del;
var
del:textfile;
f1,f:string;
begin
assignfile(del,'c:\Program files\1cv77\DelApacs.txt');
reset(del);
readln(del,f);
readln(del,f1);
closefile(del);
form1.IBQuery1.SQL.Clear;
form1.IBQuery1.SQL.Add('select * from CARD where (uid='+trim(f)+') and (cardnum='+trim(f1)+')');
form1.IBQuery1.Active:=true;
form1.DataSource1.DataSet:=form1.IBQuery1;
if form1.IBQuery1.RecordCount > 0 then
begin
form1.IBQuery1.Active:=false;
form1.IBQuery1.SQL.Clear;
form1.IBQuery1.SQL.Add('delete from CARD where uid='+trim(f));
form1.IBQuery1.Active:=true;
logfile(0);
form1.IBQuery1.Active:=false;
end
else
begin
logfile(3);
form1.IBQuery1.Active:=false;
end;
end;


при выполнении процедуры ins выдает not in edit mode
в чем проблем?

Добавлено: 22 окт 2007, 16:04
СанЕк
при использовании IBTable перед редактированием/вставкой необходимо открыть таблицу для редактирования/вставки, а затем сделать ей Post.

то есть для примера
IBTable.Edit; или IBTable.Insert;
изменения
IBTable.Post;

Добавлено: 22 окт 2007, 16:18
kdv
и вообще, для автоматического залива данных IBTable категорически не рекомендуется использовать.

Re: not in edit mode

Добавлено: 22 окт 2007, 16:30
WildSery
DenTig писал(а):Active:=true;
Срочно читать книжки, с самого начала.

Добавлено: 22 окт 2007, 16:42
kdv
да тут код вообще и неформатированный и сам по себе ужасный. особенно где сначала IBQuery1 выбирает записи которые надо удалить, а потом этим же датасетом начинают якобы поштучно записи удалять.
Причем вызывая для delete IBQuery.Active:=True...

читать www.ibase.ru/devinfo/ibx.htm как минимум.

Добавлено: 23 окт 2007, 08:24
DenTig
form1.IBQuery1.Active:=false;
form1.DataSource1.DataSet:=form1.IBTable1;

добавил сюда form1.IBTable1.Edit;

теперь ругается can not perform closed dataset

Добавлено: 23 окт 2007, 09:12
kdv
теперь ругается can not perform closed dataset
нет, так не пойдет. я бы предложил весь этот код написать заново,
читая книжки и заглядывая в справку.
здесь на форуме процесс отладки таких элементарных вещей излагать не надо.

и еще рекомендую не писать процедуру обработки в коде, а писать обработчик например нажатия на кнопку, чтобы вот этого
form1.a
form1.b
form1.a
form1.b
в коде не было. Или писать with form1 do.

в общем, читать книжки по дельфям для начинающих.

Добавлено: 23 окт 2007, 09:38
DenTig
Нигде не найду пример добавления новой записи в базу. Дайте ссылку. Я к программированию имею отдаленное отношение. Кто это писал уволился. Мне чтоб заработала всего лишь запись изучить делфи и тд мягко говоря нерентабельно. Поэтому и прошу у Вас помощи...

Добавлено: 23 окт 2007, 11:03
DenTig
Поставил form1.DataSource1.DataSet.Open;
все пошло.