not in edit mode

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
DenTig
Сообщения: 4
Зарегистрирован: 22 окт 2007, 15:28

not in edit mode

Сообщение DenTig » 22 окт 2007, 15:38

Читаю из текстового файла и пытаюсь добавить новую запись в базу.
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
в чем проблем?

СанЕк
Сообщения: 25
Зарегистрирован: 25 окт 2005, 11:45

Сообщение СанЕк » 22 окт 2007, 16:04

при использовании IBTable перед редактированием/вставкой необходимо открыть таблицу для редактирования/вставки, а затем сделать ей Post.

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 22 окт 2007, 16:18

и вообще, для автоматического залива данных IBTable категорически не рекомендуется использовать.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: not in edit mode

Сообщение WildSery » 22 окт 2007, 16:30

DenTig писал(а):Active:=true;
Срочно читать книжки, с самого начала.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 22 окт 2007, 16:42

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

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

DenTig
Сообщения: 4
Зарегистрирован: 22 окт 2007, 15:28

Сообщение DenTig » 23 окт 2007, 08:24

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

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 окт 2007, 09:12

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

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

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

DenTig
Сообщения: 4
Зарегистрирован: 22 окт 2007, 15:28

Сообщение DenTig » 23 окт 2007, 09:38

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

DenTig
Сообщения: 4
Зарегистрирован: 22 окт 2007, 15:28

Сообщение DenTig » 23 окт 2007, 11:03

Поставил form1.DataSource1.DataSet.Open;
все пошло.

Ответить