Xbase проблема с записью

  • Автор темы serg161
  • Дата начала
S

serg161

#1
Элементарный код, а не работает!

базаУчЗаписей.Добавить();
базаУчЗаписей.LOGIN = стр.Логин;
базаУчЗаписей.PASSWORD = стр.Пароль;
базаУчЗаписей.Записать();

Метод записать просто игнорируется, без всяких ошибок. Просто не пишет и все! В чем может быть проблема?
 
K
#2
возможно имя файла длинное, кажется должно быть не более 5 символов
 
S

serg161

#3
К сожалению и с коротким именем не прокатило. Проблема в чем то другом.

текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config\acc.cdx");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
текБаза.Записать();
сч=сч+1;
КонецЦикла;

Создает только одну запись, остальные молча игнорирует!
 

puh14

Well-known member
11.07.2008
1 412
0
#4
текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config\acc.cdx");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
сч=сч+1;
КонецЦикла;
текБаза.Записать();

а так сколько сделает?

текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config\acc.cdx");
неужто ДБФ ожидается под два гига? индекс-то зачем?
 
S

serg161

#5
тоже 1 запись, только последнюю. Насчет размера файла пока не знаю, вполне может быть и два гига, если получится записать больше 1 строки :huh:
 
K
#6
//надо так
ока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
сч=сч+1;
текБаза.Записать();
КонецЦикла;
текБаза.Записать();
 

puh14

Well-known member
11.07.2008
1 412
0
#7
текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
текБаза.Записать();
сч=сч+1;
КонецЦикла;

а ежли вот так, без индекса? Мож надо использовать Переиндексировать() перез записью?
 
S

serg161

#8
Прикольно, без индекса кажется записал. Это что ж после добавления каждой записи надо переиндексировать??? В перспективе то задача состоит в том, чтобы открыть базу, попробовать найти запись (тут без индекса как я понимаю никак?) и если такой записи нет, то добавить. А если надо добавить 10 записей, то надо 10 раз переиндексировать???
 

puh14

Well-known member
11.07.2008
1 412
0
#9
Я обычно искал запись ДБФ через перебор строк.
Насчет индексов глянь ДобавитьИндекс()
СоздатьИндексныйФайл()
 
S

serg161

#10
Индексный файл создает, тут все нормально. Проблема, если открывать потом с этим файлом - тогда не пишет. А если без него - то пишет. А запустить поиск по базе без открытия индексного файла я ведь не смогу?
 
S

serg161

#12
Найти(), НайтиПоКлючу(). И там и там должен выставляться текущий индекс.
 

puh14

Well-known member
11.07.2008
1 412
0
#13
Ключ там как атрибут. Походу надо наверно так

текБаза = Новый XBase();
текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config\acc.cdx");
сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
ТекБаза.Ключ = сч;// хотя там в добавить индекс написано, что должно соответствовать параметрам ДБФ, индекс по другому выглядит.
текБаза.Записать();
сч=сч+1;
КонецЦикла;
 
S

serg161

#14
не понял? В добавить() про ключ ничего не сказано. он используется при поиске, а не доавлении.
 

puh14

Well-known member
11.07.2008
1 412
0
#15
Пардон - это я ошибся. На семерке вот такой код работает;

Процедура Сформировать()
текБаза = СоздатьОбъект("XBASE");// у тебя текБаза = Новый XBase();
Если ТекБаза.Открыта() = 1 Тогда
ТекБаза.ЗакрытьФайл();
КонецЕсли;
ТекБаза.ДобавитьПоле("GLN",1,15,2);

ТекБаза.ДобавитьИндекс("ID","GLN",1,0,);
текБаза.СоздатьФайл(КаталогИБ() +"\acc.dbf",КаталогИБ()+"\acc.cdx");
Если ТекБаза.Открыта() = 0 Тогда
текБаза.ОткрытьФайл(КаталогИБ() +"\acc.dbf",КаталогИБ()+"\acc.cdx");
КонецЕсли;



сч=1;
Пока сч < 10 Цикл
текБаза.Добавить();
текБаза.GLN = сч;
текБаза.Записать();
сч=сч+1;
КонецЦикла;

КонецПроцедуры