Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Ввод данных в БД.


Автор: Anark1 5.1.2007, 23:18
Код

void __fastcall TForm2::Button1Click(TObject *Sender)
{
Form2->Table1->Open();
if (Form2->DBEdit1->Text.Length() != 0)
{
Form2->Table1->Insert();  //вставка пустой строки
Form2->Table1->Prior();    //переход на пустую строку
Form2->Table1->Edit();     //редактирование пустой строки
Form2->Table1Name->AsString = Form2->DBEdit1->Text;
Form2->Table1Town->AsString = Form2->DBEdit2->Text;
Form2->Table1Work->AsString = Form2->DBEdit3->Text;
Form2->Table1Phone->AsString = Form2->DBEdit4->Text;
Form2->Table1Email->AsString = Form2->DBEdit5->Text;
Form2->Table1Info->AsString = Form2->DBMemo1->Text;
Form1->ListBox1->Items->Add(Form2->DBEdit1->Text); //добавление в список
Form2->Table1->Post();
Form2->Table1->Next();
}
Form2->Table1->Close();
Form2->Close();
}

Выше приведен код обработки кнопки - добавление записи в таблицу.
Изначально база пуста.
1)В строке 7 указывается возвращение на запись назад. Я дошел до этого опытным путём  smile . По идее Insert должен создать пустую запись и активировать её. Если я конечно правильно понял, но этого не происходит. Почему Insert работает неправильно.?
2)При добавлении второй записи в поля ввода (DBEdit, DBMemo) закрыт ввод. Такое насколько я знаю происходит когда не установлена связь с базой данной, но в обработчике событий (строка 3) соединение устанавливается. В чем дело? !!! Первая запись добавляется нормально !!!
З.Ы. Если написал что-нить оч глупое то заранее прошу прощения. Я ток учусь  smile

Автор: Anark1 6.1.2007, 12:51
Насчет второго вопроса я ступил и сам разобрался, остается первый.  smile 

Автор: Rodman 6.1.2007, 12:54
а так не пойдет???
Код

void __fastcall TForm2::Button1Click(TObject *Sender)
{
Form2->Table1->Open();
if (Form2->DBEdit1->Text.Length() != 0)
{
Form2->Table1Name->AsString = '';
Form2->Table1Town->AsString = '';
Form2->Table1Work->AsString = '';
Form2->Table1Phone->AsString = '';
Form2->Table1Email->AsString = '';
Form2->Table1Info->AsString = '';

Form2->Table1->Insert();  //вставка пустой строки
Form2->Table1->Prior();    //переход на пустую строку
Form2->Table1->Edit();     //редактирование пустой строки
Form2->Table1Name->AsString = Form2->DBEdit1->Text;
Form2->Table1Town->AsString = Form2->DBEdit2->Text;
Form2->Table1Work->AsString = Form2->DBEdit3->Text;
Form2->Table1Phone->AsString = Form2->DBEdit4->Text;
Form2->Table1Email->AsString = Form2->DBEdit5->Text;
Form2->Table1Info->AsString = Form2->DBMemo1->Text;
Form1->ListBox1->Items->Add(Form2->DBEdit1->Text); //добавление в список
Form2->Table1->Post();
Form2->Table1->Next();
}
Form2->Table1->Close();
Form2->Close();
}

Автор: Anark1 6.1.2007, 15:31
В чем разница? Ты просто задаешь пустые поля. Я спрашиваю насчет метода Prior(). Зачем он там нужен. Ведь фактически мы этим методом выделяем созданную пустую запись! А это должен выполнять INsert();

Автор: RatHat 7.1.2007, 05:42
Anark1, странно, сел проверил специально, инсерт срабатывает нормально. Приор делать не нужно...
Обратись к разработчику БД )))

Автор: Anark1 8.1.2007, 00:11
Ты проверял на моем тексте или на своем?

Автор: RatHat 10.1.2007, 01:07
Anark1, на твоём.

Автор: Anark1 10.1.2007, 22:51
ОК. Спасибо конечно, но странно как то.  smile 

Автор: Butsa 13.1.2007, 00:45
Я вооще не пойму, зачем ты потом возращаешься на превидущую запись(мож я конечно чей-то не доганяю) , но принцип работы оператора Insert() заключается в добавление записи в конец баз, а там уже произойдет автоматическая сортировка по первичному ключу. smile 

Автор: RatHat 13.1.2007, 03:25
Цитата
принцип работы оператора Insert() заключается в добавление записи в конец баз


Butsa, если первичный ключ существует, то запись будет вставлена на позицию, согласно её индексу, а если нет, то запись будет добавлена по текущей позиции курсора (для Парадокса)

Автор: Anark1 13.1.2007, 21:22
Да, не понимаю почему происходил сбой. Написал новую программу с использованием БД. Там не использовал Prior. Все работает правильно. Спасибо всем. Тему можно закрывать. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)