|
Вопрос # 3 294/ вопрос открыт / |
|
Здравствуйте уважаемые эксперты!
Помогите пожалуйста начинающему
Я работаю с ADO при помощи DBEdit-ов у меня отображаются данные из базы. Как можно при помощи этих же DBEdit-ов ввести новую запись в базу?
 |
Вопрос задал: senyor (статус: Посетитель)
Вопрос отправлен: 16 октября 2009, 18:46
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, senyor!
Перед добавлением надо вставить пустую запись (сами DBEdit'ы автоматом её отобразят)
AdoTable1.Append;
(можно и с помощью AdoTable1.Insert)
эту строку можно вставить в OnCreate/OnShow формы добавления записи
после того, как пользователь введёт запись, её надо "закрепить" строкой
AdoTable1.Post;
Если пользователь нажал "Отмена", то откатываемся
AdoTable1.Cancel;
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 16 октября 2009, 19:05
|
Мини-форум вопроса
Всего сообщений: 9; последнее сообщение — 17 октября 2009, 13:01; участников в обсуждении: 3.
|
Егор (статус: 10-ый класс), 16 октября 2009, 19:41 [#1]:
как вариант, можно подключить компонент DBNavigator, в котором есть кнопочка "+" - нажали - добавили запись
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Егор (статус: 10-ый класс), 16 октября 2009, 19:42 [#2]:
кстати, Вадим К:, а в чём разница между Append и Insert?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Вадим К (статус: Академик), 16 октября 2009, 21:37 [#4]:
Мережников Андрей:
Пожалуйста не вводите людей в заблуждение и не показывайте свое незнание предмета.
Ещё раз пишу
для реляционных баз данных нет понятия "добавить запись в конец". О порядке записей в базе нельзя говорить. Можно говорить о порядке записей в конкретной выборке. А то что запись обычно попадает в конец - не более, чем побочный эффект. Как только с таблицы начнутся активно удаляться записи, всё будет по другому.
Но обычно у таблиц делают индекс, по которому и сортируют...
У меня знакомого за фразу "вставить запись в середину таблицы" уволили с работы - за незнание основополагающих принципов.
Более того, на практике оказывается, что при добавлении большого количества Insert оказывается быстрее.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 17 октября 2009, 07:36 [#5]:
to Вадим К: О порядке записей в БД действительно не всегда корректно говорить. Но можно говорить о положении информации в файле. Те различия в Insert/Append, о которых я говорил, относятся именно к этому. К сожалению я ошибся в том, что это относится не ко всем случаям - совсем не относится к SQL серверам. Но, например, FoxPro 2.5 поступает с Insert/Append именно так. Append - добавляет запись в конец файла dbf, а Insert - вставляет новую запись перед текущей, т.е. физически происходит перестроение всего файла dbf.
|
|
Вадим К (статус: Академик), 17 октября 2009, 10:33 [#6]:
Я не против, что это может быть истинной в каком то конкретном случае. Но в целом - нет.
Открою одну маленькую тайну, почему это так.
Многие базы данных под одну запись выделяют фиксированное место.
И вот, когда удаляется одна запись где то в середине, то весь файл не перестраивается (для больших баз это было бы катастрофой - переписывать пришлось обычно пол файла), а просто запись помечается как удаленная (обычно каждая запись имеем либо бит "удаленная/в деле", или есть специальные таблицы и так дальше). И вот, когда снова добавляется запись и есть блок подходящего размера - запись вставляется туда.
Я думаю после этого станет всё на место. И почему существует такое понятие как "упаковка".
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 17 октября 2009, 11:11 [#7]:
to Вадим К - про "маленькую тайну" - я знаю . Но бывают случаи - когда это не работает. По крайней мере в тех СУБД, которые поддерживают восстановление удаленных записей.
|
|
Вадим К (статус: Академик), 17 октября 2009, 12:00 [#8]:
Обычно восстановить можно только "не затертые". Но для собтвенно восстановления давно придумали другие методы.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 17 октября 2009, 13:01 [#9]:
в некоторых СУБД есть даже команды для восстановления удаленных данных (например в FoxPro - recall). Запись, помеченная как удаленная, хранится там до бесконечности, либо до выполнения команды pack. Впрочем, наши дальнейшие рассуждения не имеют отношения к сути заданного вопроса - это уже оффтоп. Потому предлагаю закончить дискуссию
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|