| 
| 
 | Вопрос # 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. Впрочем, наши дальнейшие рассуждения не имеют отношения к сути заданного вопроса - это уже оффтоп. Потому предлагаю закончить дискуссию   |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |