Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Добавление записи в базу


Автор: MacTep 13.11.2004, 23:21
Есть база данных Paradox со следующими полями:
IdStud (тип: autoincremental)
Fio (тип: alpha)
Age (тип: Number).
Доступ к базе - BDE.

Почему, когда я пишу в Builder'е такое:
Код

Fio="Иванов И.И.";
Age=19;
Table1->AppendRecord(ARRAYOFCONST((Null,&Fio,&Age)));
Table1->Post();

у меня вылезает ошибка о том, что неверное значение для поля IdStud? Как от нее избавиться. Только не надо предлагать варианта написания через
Код

Table1->Append();
Table1->FileldByName("Fio")->AsString=Fio;
Table1->FileldByName("Fio")->AsInteger=Age;
Table1->Post();

Это я знаю, мне надо именно первым способом. Заранее спасибо!

Автор: Mal Hack 14.11.2004, 11:39
MacTep я делал так на Delphi, и писал Table1 -> Insert, а дельше редактировать поля этой пустой записи....
Если все-таки надо только через AppendRecord, то NULL auto_increnent'у попробуй поменять на пустое значение '' по крайней мере ы MySQL такая вещь - прокатывала.

Автор: MacTep 14.11.2004, 12:02
Mal Hack, на Deplhi я тоже ставил nil в том месте и все прокатывало очень хорошо. А вот с Builder'е не катит вообще. А что значит поменять на пустое значение? Это как? просто написать: "", да? Не катит.

Автор: RVN 4.2.2005, 10:52
Table1->AppendRecord нельзя применять, если IdStud (тип: autoincremental)
Пробуй Insert

Автор: Hroft 4.2.2005, 12:14
Это где написано, что нельзя?
А там не может быть какой-нибудь константы, которая играла бы при помещении в поле роль сигнала на автоинкремент?
Триггеров в Paradox, конечно, нет... smile
Добавлено @ 12:16
А не может быть вот с этим проблема:
Цитата

For indexed Paradox and dBASE tables, the record is inserted into the dataset in a position based on its index.
For unindexed Paradox and dBASE tables, the record is added to the end of the dataset.

Может, там со значениями автоинкрементными что-то не так? Типа уже существуют, или еще что?

Автор: RVN 18.2.2005, 09:28
Написано в С++Builder 6 Архангельского smile

По идее нужно создать пустую запись в таблице, чтобы увеличить счетчик. А потом можно издеваться над полями, но не трогать автоинкремент. smile

Автор: MacTep 18.2.2005, 15:40
RVN, логично! Спасибо!

Автор: RVN 13.4.2005, 06:37
MacTep

Привет!

Для всех, кому интересно! smile

Можно вставить запись в таблицу с помощью SQL.

Поля: ID_NASP(ID населенного пункта, autoincrement)
NASP(название населенного пункта, А, 30)

При создании UpdateSQL заносятся все поля. UpdateSQL создается для удобства.
Убираешь из запроса поле autoincrement. Зачеркнуто.
QueryApply->Close();
QueryApply->SQL->Clear();
QueryApply->SQL->Add("Insert into NASP.db (ID_NASP, NASP)");
QueryApply->SQL->Add("VALUES ( :ID_NASP, :NASP)");
QueryApply->Params->Items[0]->AsString=Edit1->Text;//нас.пункт
QueryApply->ExecSQL(); smile

Еще одно преимущество- один запрос для модификации разных таблиц, и работает быстрее чем Table.
Все значения QueryApply->SQL->Add("Insert и QueryApply->SQL->Add("VALUES должны быть на одной строке

smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)