13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
||||||
1 | ||||||
Программирование кнопки удаления записи25.09.2011, 22:29. Показов 4856. Ответов 33
Метки нет (Все метки)
P.S А какую позицию принимает pos если файл пуст? Считывание файла начинается с 0 позиции? Добавлено через 5 часов 30 минут Поможет кто?
0
|
25.09.2011, 22:29 | |
Ответы с готовыми решениями:
33
Добавление кнопки удаления в opendialog Создание в таблице кнопки удаления записи из БД Применение кнопки удаления записи в подчинённых формах Как создать диалоговое окно QDialog, а в нем QTreeView (содержит таблицу из БД) + Кнопки добавления и удаления записи в дереве(через QPushButton) |
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
27.09.2011, 22:16 [ТС] | 21 |
Огромное спасибо.
Вы только кнопку удаления довели до ума?Больше ничего другого в теле программы не меняли ? Добавлено через 5 минут А вот запись Truncate(NoteFile) означает,что содержимое файла очистится ? Я просто немного не понимаю,принцип использования этой команды...
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
||||||
27.09.2011, 22:24 [ТС] | 23 | |||||
0
|
Заблокирован
|
||||||
27.09.2011, 22:34 | 24 | |||||
Немного не так
1
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
27.09.2011, 22:52 [ТС] | 25 |
Спс,вроде более менее понятно
P.S а зачем вот это использовать Truncate(NoteFile); ? Вроде перезапись произошла строкой выше
0
|
Заблокирован
|
|
27.09.2011, 22:59 | 26 |
А подумать? Если мы удалили запись, а потом содержимое файла как-бы передвинули к голове... то последняя запись будет записана 2 раза! (или 1 раз - но лишний, когда мы удаляем последнюю запись). Вот для этого мы и отсекаем конец файла с одной лишней записью
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
||||||
28.09.2011, 19:41 [ТС] | 27 | |||||
Спс за разъяснения ,вроде уже максимально все понял .
Добавлено через 1 час 15 минут Хотя есть один вопрос,а почему конец файла равен FileSize-1 ?Ведь просто FileSize это уже конец файла вроде как... Добавлено через 6 минут
0
|
Заблокирован
|
|||||||||||
28.09.2011, 21:31 | 28 | ||||||||||
Кнопка "Следующая запись" доступна тогда, когда есть куда передвигаться... Pos хранит позицию начала текущей записи (т.е. для 1 записи Pos = 0). Например у нас 3 записи. Текущая = 2. Тогда Pos = 1; FileSize - 1 = 2; Все нормально, 1 < 2, дальше можем двигаться. Теперь у нас текущая запись = 3, т.е. последняя... Pos равен 2, FileSize - 1 тоже равен 2. Условие 2 < 2 не соблюдается, т.е. двигаться дальше мы не можем... Вот и все.
А FileSize - 1 потому что, как описано выше, у нас Pos всегда на единицу меньше текущей записи. А для чего Pos меньше текущей записи? Для того, чтобы текущую запись можно было перечитать или сразу записать, не передвигаясь по файлу... Уффффф... многа букав Добавлено через 8 минут Button2.Enabled := (Pos < FileSize(NoteFile) - 1); Что тут происходит при выполнении программы? Сначала вычислится правая часть выражения - (Pos < FileSize(NoteFile) - 1). Результат будет логической переменной, и положится куда-то во временную переменную. Потом значение этой переменной присвоится свойству Enabled кнопки Button2. Есть еще пару вариантов этой записи, но мне нравится больше так. 1.
Но, согласитесь, написанный вариант все-таки кошернее
1
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
28.09.2011, 22:01 [ТС] | 29 |
Спасибо
Добавлено через 20 минут Про кнопки все ясно. Насчет FilePos-1 ,допустим имеем мы 3 записи ,надо перезаписать или прочитать какую-то запись . В чем будут отличия если Pos будет равна текущей записи и если позиция будет на 1 меньше текущей записи ? P.S Сорри за многократные вопрос)Просто я в колледже мало практических занятий было по работе со строками и файлами=(
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
28.09.2011, 22:44 [ТС] | 31 |
В каком смысле ?=)
Добавлено через 2 минуты Кстати,а почему в программе не работает IOResult? Пытался сделать,что бы при возникновении ошибки высвечивалось сообщение,но при нажатии F9 пишется ошибка,что (На анг не помню),что не безопасно использовать IoResult в записи...
0
|
Заблокирован
|
|
28.09.2011, 23:14 | 32 |
Ну чтобы при записи не высчитывать Pos - а сразу сделать Seek(NoteFile, Pos)... Хотя можно и написать Seek(NoteFile, Pos-1). Блин! Не забивай голову! Помнишь ту сороконожку, которую спросили, как она двигается, сначала четные ноги, а потом нечетные? Так вот, она задумалась и больше не смогла ползать Короче удобнее мне так!!!
А IOResult - возвращает результат последней операции ввода/вывода, конкретно тебя интересуют операции с файлами. Но для ее работы должна быть выключена проверка ввода/вывода (опция компилятора {$I-}). Если IOResult вернул 0 - значит последняя операция ввода/вывода завершилась удачно. Иначе - получишь код ошибки. Но лучше его не использовать и использовать обработку исключительных ситуаций при включенной опции компилятора ({$I+}). Вроде так... Если нет, поправьте...
1
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
29.09.2011, 17:51 [ТС] | 33 |
Ну в данном коде,да записи 1 соответствует позиция 0 .А если допустим переписать ,так что бы позиции 1 была бы равна запись 1,ничего не поменяется?
0
|
Заблокирован
|
|
29.09.2011, 23:00 | 34 |
Тогда везде, где используется Pos (при перемещении по файлу, при записи) надо поменять Pos на Pos - 1. Вот и все, что поменяется...
1
|
29.09.2011, 23:00 | |
29.09.2011, 23:00 | |
Помогаю со студенческими работами здесь
34
Создание триггера до удаления записи и триггера после удаления записи код кнопки удаления,редактирования из бд Код для кнопки удаления отчета Некорректная работа кнопки удаления на сайте Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |