![]() |
![]() |
![]() |
|
Вопрос по DBF | ☑ | ||
---|---|---|---|---|
0
medvejohnok
27.12.11
✎
08:28
|
Подскажите пожалуйста. Можно ли в существующем DBF-файле изменить значение одного из полей не прибегая к переопределению полей для сохранения? Если можно то как?
|
|||
1
miki
27.12.11
✎
08:36
|
что ты вкладываешь в "значение поля"?
|
|||
2
ДенисЧ
27.12.11
✎
08:36
|
Получить нужную строку, задать значение, записать?
|
|||
3
medvejohnok
27.12.11
✎
08:38
|
(1)значение типа число или строка
|
|||
4
medvejohnok
27.12.11
✎
08:39
|
(2) да, но у меня почему-то не получается.
|
|||
5
miki
27.12.11
✎
08:56
|
не взлетит...
Как вариант - сделать нужное поле строкой, при необходимости - преобразовывать строку к числу (при считывании). |
|||
6
medvejohnok
27.12.11
✎
09:00
|
(5) Считывать не надо. Уже считали. Надо прочитав DBF, сравнить ТЗ и записать измененное значение в нужное поле.
|
|||
7
miki
27.12.11
✎
09:03
|
прочитать DBF == считать значения полей в записях :)
Сравнивать положено однотипные значения. Так что либо приводить считанные из DBF значения к типу в ТЗ, либо згначения из ТЗ к типу DBF. Число к строке всегда можно привести, наоборот - не всегда. |
|||
8
medvejohnok
27.12.11
✎
09:28
|
(7) понял. Делаю открытие с полным доступом. Этого хватит для изменения?
|
|||
9
miki
27.12.11
✎
09:31
|
должно
|
|||
10
medvejohnok
27.12.11
✎
09:33
|
(9) хе хе ... должно ... а есть код по этому вопросу?
|
|||
11
miki
27.12.11
✎
09:34
|
полно
|
|||
12
medvejohnok
27.12.11
✎
09:37
|
можеш выложить примерчик?
|
|||
13
miki
27.12.11
✎
09:39
|
||||
14
medvejohnok
27.12.11
✎
09:51
|
(13) например этот не пойдет. Там заново определяется структура файла, а у в моем случае надо использовать структуру существующего файла.
|
|||
15
vmv
27.12.11
✎
10:01
|
советую делать так, четко разделяя кодом создание, заполнение и запись, тогда куски кода легко модифицировать/клонировать при измененении форматов и т.д.
пример для одной из табл персонификации Укр, под банки таже щняга должна быть Процедура СоздатьСтруктуру_xB_05(xB) xB.Поля.Добавить("PERIOD_M" ,"N",2 ,0); xB.Поля.Добавить("PERIOD_Y" ,"N",4 ,0); xB.Поля.Добавить("ROWNUM" ,"N",6 ,0); xB.Поля.Добавить("UKR_GROMAD" ,"N",1 ,0); xB.Поля.Добавить("ZO" ,"N",2 ,0); xB.Поля.Добавить("NUMIDENT" ,"S",10 ,0); xB.Поля.Добавить("LN" ,"S",100,0); xB.Поля.Добавить("NM" ,"S",100,0); xB.Поля.Добавить("FTN" ,"S",100,0); xB.Поля.Добавить("START_DT" ,"N",2 ,0); xB.Поля.Добавить("END_DT" ,"N",2 ,0); xB.Поля.Добавить("PID_ZV" ,"S",150,0); КонецПроцедуры Функция ДобавитьЗаписи_xB_05(xB, ПрефиксТаблицы) Перем ТаблицаДанных, КоличествоЗаписейНаЛисте; Перем Строка, ТекущийНомерЗаписиНаЛисте; ТаблицаДанных = ЭтаФорма["Таблица" + ПрефиксТаблицы]; КоличествоЗаписейНаЛисте = ЭтаФорма["КоличествоЗаписейНаЛисте" + ПрефиксТаблицы]; ТекущийНомерЗаписиНаЛисте = 0; Для Каждого Строка Из ТаблицаДанных Цикл ТекущийНомерЗаписиНаЛисте = ТекущийНомерЗаписиНаЛисте + 1; Если ТекущийНомерЗаписиНаЛисте > КоличествоЗаписейНаЛисте Тогда ТекущийНомерЗаписиНаЛисте = 1; КонецЕсли; xB.Добавить(); xB.УстановитьЗначениеПоля("PERIOD_M" ,ПреобразоватьВЧисло(Строка.PERIOD_M)); xB.УстановитьЗначениеПоля("PERIOD_Y" ,ПреобразоватьВЧисло(Строка.PERIOD_Y)); xB.УстановитьЗначениеПоля("ROWNUM" ,ПреобразоватьВЧисло(ТекущийНомерЗаписиНаЛисте)); xB.УстановитьЗначениеПоля("UKR_GROMAD" ,ПреобразоватьВЧисло(Строка.UKR_GROMAD)); xB.УстановитьЗначениеПоля("ZO" ,ПреобразоватьВЧисло(Строка.ZO)); xB.УстановитьЗначениеПоля("NUMIDENT",Строка.NUMIDENT); xB.УстановитьЗначениеПоля("LN" ,Строка.LN); xB.УстановитьЗначениеПоля("NM" ,Строка.NM); xB.УстановитьЗначениеПоля("FTN" ,Строка.FTN); xB.УстановитьЗначениеПоля("START_DT",ПреобразоватьВЧисло(Строка.START_DT)); xB.УстановитьЗначениеПоля("END_DT" ,ПреобразоватьВЧисло(Строка.END_DT )); xB.УстановитьЗначениеПоля("PID_ZV" ,Строка.PID_ZV); xB.Записать(); КонецЦикла; Возврат Истина; КонецФункции Процедура ПолучитьСводнуюDBF(Элемент) Перем ПерефиксТаблицы; Перем КаталогDBF, ИмяФайлаDBF, ПолноеИмяФайлаDBF, xB; ПрефиксТаблицы = Прав(Элемент.Имя, 2); ИмяФайлаDBF = "DBF_" + ПрефиксТаблицы + ".DBF"; КаталогДанных = ЭтаФорма.КаталогДанных; КаталогDBF = КаталогДанных + "\" + "DBF"; Если Не СуществуетФайл(КаталогDBF) Тогда СоздатьКаталог(КаталогDBF); Иначе УдалитьФайлы(КаталогDBF, ИмяФайлаDBF); КонецЕсли; ПолноеИмяФайлаDBF = КаталогDBF + "\" + ИмяФайлаDBF; xB = Новый xBase(); Если ПрефиксТаблицы = "05" Тогда СоздатьСтруктуру_xB_05(xB); ИначеЕсли ПрефиксТаблицы = "06" Тогда СоздатьСтруктуру_xB_06(xB); ИначеЕсли ПрефиксТаблицы = "07" Тогда СоздатьСтруктуру_xB_07(xB); ИначеЕсли ПрефиксТаблицы = "08" Тогда СоздатьСтруктуру_xB_08(xB); КонецЕсли; xB.СоздатьФайл(ПолноеИмяФайлаDBF); Если Не xB.Открыта() Тогда Предупреждение("Не удалось создать и открыть указанный файл >> " + ПолноеИмяФайлаDBF); Возврат; КонецЕсли; Если ПрефиксТаблицы = "05" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_05(xB, ПрефиксТаблицы); ИначеЕсли ПрефиксТаблицы = "06" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_06(xB, ПрефиксТаблицы); ИначеЕсли ПрефиксТаблицы = "07" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_07(xB, ПрефиксТаблицы); ИначеЕсли ПрефиксТаблицы = "08" Тогда ДобавленыЗаписи = ДобавитьЗаписи_xB_08(xB, ПрефиксТаблицы); КонецЕсли; Если ДобавленыЗаписи Тогда ЭлементыФормы["ндСводнаяТаблица" + ПрефиксТаблицы].Заголовок = "Сводная таблица " + ПрефиксТаблицы + " >> " + ПолноеИмяФайлаDBF; Иначе xB.ОчиститьФайл(); КонецЕсли; xB.ЗакрытьФайл(); КонецПроцедуры |
|||
16
medvejohnok
29.12.11
✎
01:51
|
(15) все это хорошо и понятно. Но есть маленькое но ... нужно изменить значение в поле существующей строки записи существующего DBF-файла не переопределяя заново структуру и не записывая новый файл, т.е. прочитать, изменить, записать.
|
|||
17
HeroShima
29.12.11
✎
01:58
|
(0) да
|
|||
18
medvejohnok
29.12.11
✎
03:11
|
(17) А кодом можно это "ДА" подкрепить?
|
|||
19
H A D G E H O G s
29.12.11
✎
03:13
|
(18) Лениво.
|
|||
20
medvejohnok
29.12.11
✎
03:22
|
(19) а писать это было не лениво ...
|
|||
21
vah1
29.12.11
✎
03:22
|
структуру наэбать конечно можно, только вот задним числом без ведома ГБ ничего делать не нужно, цифры уже все сданы - а переделка вроде как найоп
|
|||
22
Дядя Васька
29.12.11
✎
03:24
|
(20) А чем (15) не устроило?
|
|||
23
medvejohnok
29.12.11
✎
03:33
|
неужели так трудно запостить несколько строк кода, а не вступать в бесполезный треп.
|
|||
24
medvejohnok
29.12.11
✎
03:33
|
(22) (16)
|
|||
25
medvejohnok
29.12.11
✎
06:23
|
Спасибо, что не помогли. В очередной раз убедился в .... а это останется со мной.
|
|||
26
vah1
29.12.11
✎
06:48
|
анек вспомнился про мужика, медведя и -ну что, тебе помогло?
|
|||
27
HeroShima
29.12.11
✎
10:43
|
(23) разве код на питоне тебя устроит?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |