Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Заполнение БД в Delphi. SOS!!! (http://forum.oszone.net/showthread.php?t=56545)

Voprosik 12-11-2005 21:59 373366

Заполнение БД в Delphi. SOS!!!
 
Есть такая задача: заполнить базу данных автоматически с помощью генератора. Поступил таким образом: по нажатию кнопки "Старт" на главной форме запускается процедура обработки следующего содержания:

procedure TForm1.Start_ButtonClick(Sender: TObject);
Var
I : Longint;
a1: Longint; {пусть в таблице 1 столбец}
Begin
a1 := 1;
i := 1;
Repeat
Table1.insert; {типа переходим в режим вставки}
Table1.last; {переходим в конец таблицы}
Table1.FieldByName('Stolb_1').AsInteger := a1; {пишем в столбец}
Table1.Post; {сохраняем}
a1 := a1 + 100; {изменяем переменную для следующей итерации}
i := i + 1;
Until i = 10; {10 строк}
end;

Такая програмка один раз сработала (таблицу я заполнил), потом очистил (также в цикле вызывая Table1.Delete до Table1.EOF, в конце вызвал метод Post). И вот тут появилась проблема!!! Теперь эту таблицу я заполнить не могу!!! Возможно я что-то менял в свойствах объектов (точно не помню), но теперь при нажатии кнопки "Старт" вылезает собщение "Table is not in Insert or Edit mode". ЧТО ДЕЛАТЬ?????
P.S. Если убрать строку Table1.insert, на нажатие кнопки - вообще никакой реакции.

Voprosik 13-11-2005 11:33 373432

Пересоздал процедуры обработчиков OnClick и добавил выключение свойства "Только чтение":

Table1.ReadOnly := False;
Table1.append; {ну, типа записываем сразу в конец}

Прогресс налицо - стала появляться хотя бы ошибка. При попытке записи пишет "Cannot perform this operation on an open dataset". Ну, так как dataset - это table1, значит, надо её закрыть:

Table1.Active := False;

Но тут... "Cannot perform this operation on an CLOSED (!!!!!!!) dataset". Так над какой dataset он может выполнять операции???

Zippy 13-11-2005 14:04 373458

Цитата:

Table is not in Insert or Edit mode". ЧТО ДЕЛАТЬ
А дебаггер не показывает строку где вываливается ошибка?
И удалять все записи не проще через Query?

Voprosik 13-11-2005 21:03 373556

Zippy, спасибо за ответ. Я Delphi знаю, мягко говоря, не очень хорошо, поэтому морочиться с запросами - для меня не лучший выход. С помощью рукотворного "дебаггера" (после каждой строки вставил MessageDlg) обнаружил, где ошибка возникает. Сейчас уже точно и не вспомню, но смысл в свойствах readonly, insert, edit и active. Расставив их в нужном порядке, вроде получил то, что хотел - таблица содержит-таки 1440 записей!
Теперь проблема со второй таблицей. Пока буду разбираться сам. Если что не будет получаться - ждите вопроса ;-)

Zippy 13-11-2005 21:26 373562

Цитата:

поэтому морочиться с запросами
А что там? кладешь компонент Query на форму, все настройки, что и для Table. В нужном месте пишешь что-то в этом духе:
Код:

Query.SQL.Clear;
Query.SQL.Add( 'DELETE * FROM Mytable;' );
Query.ExecSQL;



Время: 22:58.

Время: 22:58.
© OSzone.net 2001-