Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
1

TDbf 7.0 Как редактировать запись?

14.04.2016, 07:38. Показов 3172. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мануал передо мной. Смотрю в книгу-мануал вижу (
Как редактировать запись в БД? Использую TDbf 7.0.
Нужно найти запись, где первое поле равно единице и отредактировать два других поля, изменив их значения.
Первое поле, равное единице может быть только в одной записи. Т.е. мы либо найдем одну запись, либо ничего не найдем.
Возможно, никакие циклы и сравнения не нужны и есть специальный метод.

Оглавление мануала (может подскажете куда смотреть)
Кликните здесь для просмотра всего текста

1 Introduction......................3
2 Class structure..................3
2.1 TDbf..........................3
2.2 TDbfFile...................3
2.3 TDbfFieldDef...........3
3 File types..........................4
4 Expressions.......................4
5 FAQ..................................6
5.1 Does TDbf support images?.................6
5.2 Why do deleted records not show up when using ixPrimary indexes?......6
5.3 How can I make an index on a TDateTime field?...................6
5.4 How can I sort the display of the records differently?.............6
5.5 Why does RecordCount return too many records?..................7
5.6 How to know if a record is currently being edited by another user?..........7
5.7 How to handle different character sets and locale sorting?.....7
5.8 How to undelete records?............7
5.9 How can I restructure a table?.....7
6 Methods............................8
6.1 AddIndex..................8
6.2 BatchMove................8
6.3 CancelRange.............8
6.4 CheckDbfFieldDefs..9
6.5 ClearCalcFields........9
6.6 CloseIndexFile..........9
6.7 CompactIndexFile....9
6.8 CompareBookmarks.9
6.9 CompareKeys...........9
6.10 CopyFrom...............9
6.11 CreateBlobStream.10
6.12 CreateTable...........10
6.13 CreateTableEx.......10
6.14 DeleteIndex...........10
6.15 DeleteMdxFile......10
6.16 EmptyTable...........11
6.17 EndExclusive........11
6.18 ExtractKey............11
6.19 GetFieldData.........11
6.20 GetAllIndexFiles...11
6.21 GetFileNames.......11
6.22 GetIndexNames....12
6.23 GotoCommon.......12
6.24 GotoKey................12
6.25 GotoNearest..........12
6.26 InitFieldDefsFromFields..................12
6.27 IsDeleted...............12
6.28 Locate...................13
6.29 LocateRecord........13
6.30 LockTable.............13
6.31 OpenIndexFile......13
6.32 PackTable..............13
6.33 PrepareKey...........13
6.34 RegenerateIndexes14
6.35 RepageIndexFile...14
6.36 RestructureTable...14
Example....................14
6.37 Resync..................15
6.38 SearchKey.............15
6.39 SetKey..................15
6.40 SetRange...............15
6.41 Translate................16
6.42 TryExclusive.........16
6.43 Undelete................16
6.44 UnlockTable..........16
6.45 UpdateIndexDefs..16
6.46 Zap........................16
7 Properties........................16
7.1 AbsolutePath...........16
7.2 BeforeAutoCreate...17
7.3 CodePage................17
7.4 DateTimeHandling.17
7.5 DbfFieldDefs..........17
7.6 DbfFile....................17
7.7 DisableResyncOnPost.............17
7.8 ExactRecordCount..17
7.9 Exclusive................18
7.10 FilePath.................18
7.11 FilePathFull...........18
7.12 Filter......................18
7.13 IndexDefs..............18
7.14 Indexes..................19
7.15 IndexFieldNames..19
7.16 IndexName............19
7.17 LanguageID..........19
7.18 LanguageStr..........19
7.19 MasterFields.........19
7.20 MasterSource........19
7.21 OnCompareRecord................20
7.22 OnCopyDateTimeAsString....20
7.23 OnFilterRecord.....20
7.24 OnIndexMissing...20
7.25 OnIndexInvalid.....20
7.26 OnLanguageWarning.............21
7.27 OnLocaleError......21
7.28 OnProgess.............21
7.29 OnTranslate...........21
7.30 OpenMode............21
7.31 PhysicalRecNo......22
7.32 ReadOnly..............22
7.33 ShowDeleted.........22
7.34 Storage..................22
7.35 StoreDefs..............22
7.36 TableLevel............22
7.37 TableName............23
7.38 UserStream...........23
7.39 Version...........


Приблизительный код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DBF:=TDBF.Create(nil);
DBF.TableName:='base.dbf';
DBF.Open;
 
//Ищем запись для изменения
for i:=0 to DBF.ExactRecordCount do
begin
//Если нашли запись - проверяем её и изменяем
if (DBF.Fields[0].AsString=1) then
begin
 
//Это не верно
DBF.Fields[1].AsString:='Новое значение поля 2';
DBF.Fields[2].AsString:='Новое значение поля 3';
 
 
end;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2016, 07:38
Ответы с готовыми решениями:

Как вставить и редактировать запись в таблице ?
Есть 2 таблицы: Group : (GroupID, GroupName, GroupFlag, GroupComment); Product:...

редактировать запись
в таблице есть поля: ID DEPT_ID NAME нужн отредактировать строку в поле NAME по двум...

Как в бинарном файле (.dat) удалять и редактировать выбранную запись
Подскажите как в бинарном файле(.dat) удалять и редактировать выбранную запись(case 5 и case 6): ...

Tdbf, как найти дубли в разных файлах?
есть несколько таблиц .dbf все они одинаковой структуры как с помощью TDBF во всех таблицах...

15
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
14.04.2016, 09:42 2
Для перевода таблицы в режим редактирования должен быть метод Append, для подтверждения - Post.
Для поиска нужной записи - Locate.
0
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
14.04.2016, 12:02  [ТС] 3
Цитата Сообщение от FIL Посмотреть сообщение
Для поиска нужной записи - Locate.
Странно, ругается на loPartialKey
DBF.Locate('number',searched_number,loPartialKey);
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
14.04.2016, 12:35 4
Delphi
1
DBF.Locate('number', searched_number, [loPartialKey]);
0
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
14.04.2016, 12:54  [ТС] 5
И так нет. Undeclared identifier loPartialKey
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
14.04.2016, 13:05 6
Ну убери его вообще, тебе же полное совпадение надо найти:
Delphi
1
DBF.Locate('number', searched_number, []);
1
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
14.04.2016, 13:19  [ТС] 7
Спасибо, заработало.

Добавлено через 9 минут
Да, вы уверены что
Цитата Сообщение от FIL Посмотреть сообщение
Append, для подтверждения - Post.
?

Вот так вставляет новую запись, а не редактирует текущую.
Delphi
1
2
3
4
5
6
7
8
9
10
DBF:=TDBF.Create(nil);
DBF.TableName:='base.dbf';
DBF.Open;
DBF.Append;
DBF.Locate('number',DBF.Fields[2].AsString,[]); //Это верно
DBF.Fields[0].AsString:=Form1.date.Text;
DBF.Fields[1].AsString:=Form1.time.Text;
DBF.Post;
DBF.Close;
DBF.Destroy;
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
14.04.2016, 14:40 8
Open
Locate
Append
Редактирование
Post
0
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
15.04.2016, 07:10  [ТС] 9
Как вы написали - так добавляет новую запись.
В конец таблицы БД добавляется новая запись, а не редактируется текущая.

Delphi
1
2
3
4
5
6
7
8
9
10
DBF:=TDBF.Create(nil); //Создал экземпляр БД
DBF.TableName:='base.dbf'; //Путь к БД
DBF.Open; //Открыл
DBF.Locate('number',searched_number,[]); //Ищу запись, где значение в столбце number равно переменной searched_number Вернула true.
DBF.Append; //Перевел БД в режим для записи/изменения
DBF.Fields[0].AsString:=Form1.date.Text; //Записываю в нулевое поле таблицы БД значение, содержащееся в поле date
DBF.Fields[1].AsString:=Form1.time.Text; //Записываю в первое поле таблицы БД значение, содержащееся в поле time
DBF.Post; //Сохранил/записал
DBF.Close; //Закрыл БД
DBF.Destroy; //Уничтожил экземпляр БД
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
15.04.2016, 08:01 10
Delphi
1
DBF.Locate('number',searched_number,[]); //Ищу запись, где значение в столбце number равно переменной searched_number Вернула true.
Locate возвращает логическое выражение True (если нашлось) и False - в противном случае.
Видимо, у тебя запись не находится, вот новая и добавляется.
Ты же не проверяешь, что тебе функция вернула.

ты сделай для проверки так:
Delphi
1
2
DBF.Open; //Открыл
if DBF.Locate('number',searched_number,[]) then ShowMessage('Нашлось') else ShowMessage('Не нашлось');
а потом, в рабочем код добавишь проверку условия
Delphi
1
2
3
4
5
if Locate then begin
  тут изменение записи Append / Post
end
else 
  что-то делать, если не нашлось...
0
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
15.04.2016, 08:26  [ТС] 11
Я же писал.
Цитата Сообщение от Sergio Leone Посмотреть сообщение
Видимо, у тебя запись не находится, вот новая и добавляется.
Цитата Сообщение от useruser Посмотреть сообщение
//Ищу запись, где значение в столбце number равно переменной searched_number Вернула true.
Проверил ещё раз. И вашим кодом. TRUE Нашлось.

В результате вставляет новую запись, без изменений. Копия найденной записи.
Мало того, что не редактирует - так даже копию не изменяет.
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
15.04.2016, 08:27 12
Цитата Сообщение от useruser Посмотреть сообщение
Я же писал.
БЛИН!!!!
НАдо вместо APPEND написать EDIT

Delphi
1
DBF.Edit; //Перевел БД в режим для записи/изменения
1
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
15.04.2016, 08:35  [ТС] 13
Цитата Сообщение от Sergio Leone Посмотреть сообщение
НАдо вместо APPEND написать EDIT
Вот теперь заработало как надо. Заметьте, APPEND сказал не я. Мне это тоже показалось странным, хотя с файлами вроде так и работают.
Ну я и принял на веру.

Цитата Сообщение от FIL Посмотреть сообщение
Open
Locate
Append
Редактирование
Post
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
15.04.2016, 09:31 14
Цитата Сообщение от useruser Посмотреть сообщение
Заметьте, APPEND сказал не я.
Зато теперь ты знаешь как добавлять записи)
0
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 2
30.08.2016, 07:38 15
Кто подскажет в чем дело? в Object Inspector есть свойство FilePath, а при написании кода он не отображается и выдает ошибку
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
31.08.2016, 12:41 16
Цитата Сообщение от Nomad_Razor Посмотреть сообщение
при написании кода он не отображается и выдает ошибку
выложите скрин.
0
31.08.2016, 12:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2016, 12:41
Помогаю со студенческими работами здесь

Не получается редактировать запись
Добрый день Подскажите, почему не могу править запись в поле дата? Там стоит неверное значение, а...

Редактировать только последнюю запись
Посоветуйте, пожалуйста,как в ленточной форме разрешить редактирование только последней записи.

Кнопка (добавить запись) работает по принципу (редактировать)
Доброго времени суток! Прошу помощи с моей БД. Вот какая штука: прописала код для кнопки...

Ошибка: Вам не разрешено редактировать эту запись
Добрый день. Недавно, у админки сайта который работал несколько лет без единого сбоя, перестали...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru