Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление текста в базу данных, Как из Edit добавить текст в Paradox& 
:(
    Опции темы
HAS
Дата 26.7.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



FelistA , я тут примерчик для тебя накатал, но прицепить не могу,почему-то smile
напиши свой e-mail я пришлю smile
PM MAIL   Вверх
FelistA
Дата 26.7.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.4.2005
Где: Кирово-Чепецк

Репутация: нет
Всего: нет



Мой mail [email protected]
Исходный код напишу позже.
Пыталась сделать так как в статье написано, ошибка та же самая. Кто нибудь мне обьяснит что она означает? smile
PM MAIL   Вверх
HAS
Дата 29.7.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



что за ошибка ?
PM MAIL   Вверх
HAS
Дата 29.7.2005, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



FelistA, пример выслал на е-mail smile
PM MAIL   Вверх
Albinos_x
Дата 29.7.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



Цитата
Table1 Cannot perform this operation on a closed dataset


переводится:

Цитата
Table1 Не может исполнить это действие на закрытом наборе данных


у тебя

Table1.TableName:='GetCurentDir+имя_БД'; //если в том же каталоге или: + путь от каталога в котором лежит прога

такое есть?
или ищи ошибку в названии поля...

Это сообщение отредактировал(а) Albinos_x - 29.7.2005, 20:38


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
HAS
Дата 1.8.2005, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



FelistA , ну как работает ? smile
PM MAIL   Вверх
FelistA
Дата 2.8.2005, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.4.2005
Где: Кирово-Чепецк

Репутация: нет
Всего: нет



Бррр... У меня ступор, голова перестала соображать, так бывает когда долго над одним делом работаю, устрою себе недельный перерыв и продолжу. Никто не против??? smile
HAS спасибо за пример посмотрела, вот только базу не может найти. Но это дело поправимое. smile smile
PM MAIL   Вверх
Sett
Дата 7.8.2005, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



FelistA, смотри как я делал, если ты используешь Table1, DataSource и DBGrid1 компоненты.

можно зделать всё очень просто
пример:
Form1.DBGrid1.DataSource.DataSet.Edit; // разрешаем произвести редактирование в таблице
Form1.DBGrid1.DataSource.DataSet.First; // переносим курсор в начало таблицы
Form1.DBGrid1.DataSource.DataSet.Insert; // добавляем пустую ячейку в которую добавим свой текст
Form1.DBGrid1.DataSource.DataSet.Edit; // подтверждаем редактирование повторно.
Form1.DBGrid1.DataSource.DataSet.Fields[0].Text:=Edit1.Text; // добавляешь текст из Edit1.Text
Form1.DBGrid1.DataSource.DataSet.Fields[1].Text:=Label1.Caption; // или добавляешь текст из Label1.Caption
Form1.DBGrid1.DataSource.DataSet.Fields[3].Text:=Form1.Caption; // или добавляешь текст из Form1.Caption нет разницы
Form1.DBGrid1.DataSource.DataSet.Post; // подтверждаешь и сохраняешь все внесёные изменения.

Обрати внимание на Fields[0], филдс может быть и с другой цифрой цифра ознчает номер поля, куда вносится текст:
Fields[0], Fields[1], Fields[2], Fields[3], Fields[4], для каждого грубо говоря Edit1.Text свой филдс
код ставишь под кнопку и всё, проще не бывает.

только не забудь!

в Form1.Create добавить
Table1.Open;

PM MAIL WWW ICQ   Вверх
Петрович
Дата 8.8.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(Sett @ 8.8.2005, 00:30)
можно зделать всё очень просто

А можно еще проще smile. Не надо делать лишних действий. У Sett, первые четыре строки, это полная белиберда! Поясню:
Цитата(Sett @ 8.8.2005, 00:30)
Form1.DBGrid1.DataSource.DataSet.Edit; // разрешаем произвести редактирование в таблице
Form1.DBGrid1.DataSource.DataSet.First; // переносим курсор в начало таблицы
Form1.DBGrid1.DataSource.DataSet.Insert; // добавляем пустую ячейку в которую добавим свой текст
Form1.DBGrid1.DataSource.DataSet.Edit; // подтверждаем редактирование повторно.
Form1.DBGrid1.DataSource.DataSet.Fields[0].Text:=Edit1.Text; // добавляешь текст из Edit1.Text
Form1.DBGrid1.DataSource.DataSet.Fields[1].Text:=Label1.Caption; // или добавляешь текст из Label1.Caption
Form1.DBGrid1.DataSource.DataSet.Fields[3].Text:=Form1.Caption; // или добавляешь текст из Form1.Caption нет разницы
Form1.DBGrid1.DataSource.DataSet.Post; // подтверждаешь и сохраняешь все внесёные изменения.

1. После First (строка 2), датасет переведенный в режим редактирования строкой 1, автоматически переключится в режим просмотра. Отсюда, первая строка бессмысленна.
2. First (строка 2) не нужен. Поскольку в реляционных БД понятие порядок записей отсутствует, то и вставка записи (строка 3) может производиться в любое место, не обазательно в начало.
3. После Edit (строка 4), датасет переведенный в режим вставки строкой 3, автоматически переключится в режим реадктирования текущей записи, а то и вообще даст Exception.

И еще. Обращение к полям по индексу (Fields[0], Fields[1], Fields[2], Fields[3], Fields[4], ...) это дурной тон, который может принести проблемы. Например, если в таблице изменится порядок и состав полей, то придется лазить по всему тексту программы и изменять индексы. Да и запутаться легко. Лучше либо обращаться по именам полей:
Код

Form1.DBGrid1.DataSource.DataSet.Append; // Переключаем датасет в режим добавления записи
Form1.DBGrid1.DataSource.DataSet.FieldByName('FieldEdit').AsString:=Edit1.Text; // добавляешь текст из Edit1.Text
Form1.DBGrid1.DataSource.DataSet.FieldByName('FieldLabel').AsString:=Label1.Caption; // или добавляешь текст из Label1.Caption
Form1.DBGrid1.DataSource.DataSet.FieldByName('FieldCaption').AsString:=Form1.Caption; // или добавляешь текст из Form1.Caption нет разницы
Form1.DBGrid1.DataSource.DataSet.Post; // подтверждаешь и сохраняешь все внесёные изменения.[/quote]

Либо обращаться к объектам полей созданным во время дизайна. Последнее даже лучше, поскольку как минимум будет быстрее.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Veniamin
Дата 22.4.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 3.3.2005

Репутация: нет
Всего: нет



Подскажите и мне пожалуйста. Пишу приложение на Delphi для работы с базой в Access, соединение с базой через ADO. Добавление/редактирование записей в главной таблице и которая отображается реализовано след.образом: есть главная форма, на ней по кнопке вызывается форма для добавления/редактирования уже имеющейся записи. На этой форме есть Edit-ы и возле каждого кнопка для вызова соответствующего справочника и выбора из него нужной записи.  Код добавления записи по вышеприведённым примерам работает. Вот мой код для кнопки добавить:

Код

procedure TFormModifyData.ButtonAddClick(Sender: TObject);
begin
  {Проверяем все ли необходимые поля заполнены}
  if (EditTelefon.Text='') or
     (EditKabinet.Text='') or
     (EditStatus.Text='') or
     (EditSysplat.Text='') or
     (EditProc.Text='') or
     (EditPamat.Text='') or
     (EditSetkart.Text='') or
     (EditZhdisk.Text='') or
     (EditVideo.Text='') or
     (EditPrivod.Text='') or
     (EditOS.Text='') or
     (EditspecPO.Text='') or
     (EditoficP.Text='')    
     {если нет то выходим из процедуры с помощью Exit}
  then
    begin
      ShowMessage('Заполнены не все поля ');
      Exit;
    end;

  try
    DM.ADOConnection1.BeginTrans;
    DM.MainTable.Insert;
    DM.MainTable.FieldByName('телефон').AsString:=EditTelefon.Text;
    DM.MainTable.FieldByName('кабинет').AsString:=EditKabinet.Text;
    DM.MainTable.FieldByName('статус').AsString:=EditStatus.Text;
    DM.MainTable.FieldByName('системная плата').AsString:=EditSysplat.Text;
    DM.MainTable.FieldByName('процессор').AsString:=EditProc.Text;
    DM.MainTable.FieldByName('память').AsString:=EditPamat.Text;
    DM.MainTable.FieldByName('сетевая карта').AsString:=EditSetkart.Text;
    DM.MainTable.FieldByName('жёсткий диск').AsString:=EditZhdisk.Text;
    DM.MainTable.FieldByName('видеокарта').AsString:=EditVideo.Text;
    DM.MainTable.FieldByName('оптический привод').AsString:=EditPrivod.Text;
    DM.MainTable.FieldByName('операционная система').AsString:=EditOS.Text;
    DM.MainTable.FieldByName('спецПО').AsString:=EditspecPO.Text;
    DM.MainTable.FieldByName('офисный пакет программ').AsString:=EditoficP.Text;
    DM.MainTable.Post;
    FormModifyData.Close;
    DM.ADOConnection1.CommitTrans;
  except
    DM.ADOConnection1.RollbackTrans;
    ShowMessage('Невозможно выполнить. Повторите');
  end;
end;


Программу делал по книге, в Delphi новичок, прошу пожалуйста подсказать/помочь. Как можно реализовать редактирование записи. DBNavigator-ом устанавливаем курсор на записи необходимой для редактирования, затем вызывается кнопкой на главной форме "редактировать" форма для добавления/редактирования. Как сделать так, чтобы в Edit-ах на этой форме отображались данные текущей записи в таблице и чтоб их можно было редактировать (как это реализовано у меня путём выбора записей из справочников)? Если бы писал на SQL 2000, то можно в SQL-е сделать хранимые процедуры на SQL языке, потом в Delphi в DataModule их вызывать и вообщем есть код для этого в книге. Но есть ли такая возможность, если база в Access, а не в SQL 2000? Или как это можно сделать по-другому, к примеру процедура не вызвывается с сервера SQL, а уже хранится в приложении Delphi?  Аналогично интересует вопрос удаления записи.

p.s. Как отображать текущие данные в форме и редактировать их в ней разобрался сам, осталось с удалением решить.

Это сообщение отредактировал(а) Veniamin - 22.4.2008, 16:07
PM MAIL   Вверх
Akella
Дата 23.4.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Veniamin @  22.4.2008,  15:28 Найти цитируемый пост)
Как можно реализовать редактирование записи.



Код

на Form1 ложишь эдиты и 2 кнопки Ок и Отмена

создаёшь форму во время выполнения програмы юзер жмёт кнопочку или делает двойной щелчёк по ДБГриду

Form1 := TForm1.crate(self);
далее заполняешь эдиты из полей датасета

далее по нажатию на кнопку ОК
If Form1.ShowModal = mrOk then begin
  вызываешь НЕ Append, а Edit

    DM.MainTable.FieldByName('телефон').AsString:=EditTelefon.Text;
    DM.MainTable.FieldByName('кабинет').AsString:=EditKabinet.Text;
    DM.MainTable.FieldByName('статус').AsString:=EditStatus.Text;
    DM.MainTable.FieldByName('системная плата').AsString:=EditSysplat.Text;
    DM.MainTable.FieldByName('процессор').AsString:=EditProc.Text;

подтверждаешь
end else begin
откачиваешь

end;

FreeAndNil(Form1);


Добавлено через 1 минуту и 5 секунд
Цитата(Veniamin @  22.4.2008,  15:28 Найти цитируемый пост)
Аналогично интересует вопрос удаления записи.

Код

DataSet.Delete

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1087 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.