• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

serg161

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

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

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

kaa

возможно имя файла длинное, кажется должно быть не более 5 символов
 
S

serg161

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

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

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

puh14

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

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

текБаза.ОткрытьФайл(АдресПМ+"config\acc.dbf",АдресПМ+"config\acc.cdx");

неужто ДБФ ожидается под два гига? индекс-то зачем?
 
S

serg161

тоже 1 запись, только последнюю. Насчет размера файла пока не знаю, вполне может быть и два гига, если получится записать больше 1 строки :huh:
 
K

kaa

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

puh14

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

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

serg161

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

puh14

Я обычно искал запись ДБФ через перебор строк.
Насчет индексов глянь ДобавитьИндекс()
СоздатьИндексныйФайл()
 
S

serg161

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

puh14

А какой командой ты поиск осуществляешь?
 
S

serg161

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

puh14

Ключ там как атрибут. Походу надо наверно так

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

serg161

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

puh14

Пардон - это я ошибся. На семерке вот такой код работает;

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

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



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

КонецПроцедуры
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!