Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 23:59   #1
sveta_s
 
Аватар для sveta_s
 
Регистрация: 08.05.2011
Сообщений: 7
Печаль добавление данных

Возникла проблемка: Помогите разобраться.
Есть две таблицы: Группа продуктов и Продукты.
На форме при выборе группы продуктов с помощью DBComboBox и вводе нового продукта, соответствующего группе, в Edit, в таблицу продуктов должен вводиться новый продукт с ID выбранной группы. Как это осуществить? Я пыталась так:
подключаем DBComboBox через Query к таблице с группой продуктов
а результат отправляем в DobPrTable.
Обработчик кнопки "Добавить":
Код:
procedure TDobProdForm.Button1Click(Sender: TObject);
begin
  IF (Length(Edit1.Text)>0) and  (Length(DBComboBox1.Text) > 0)
  then
  begin
  DataModule2.DobPrTable.Active := true;
  DataModule2.DobPrTable.Append;
  DataModule2.DobPrTable.FieldByName('NazvP').AsString:= Edit1.Text;// название продукта
  DataModule2.DobPrTable.FieldByName('ID_gr').AsInteger:= IntToStr(DBComboBox1.Text);//ID группы продукта
   DataModule2.DobPrTable.Post;
Но чувствую, что-то не так, а что - понять не могу

Последний раз редактировалось Stilet; 28.05.2011 в 17:37.
sveta_s вне форума Ответить с цитированием
Старый 28.05.2011, 00:44   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Чувства - материя тонкая, к материальному миру не принадлежащая.
Потому надо просто проверить как работает код, а по результатам сделать вывод.

DBComboBox работает несколько иначе, чем представляется.
Для вышеозвученной цели подойдет простой ComboBox, в Items которого надо "загнать" наименования групп товаров, а в его Objects значения ID групп.

Какая СУБД используется?
Прик вне форума Ответить с цитированием
Старый 28.05.2011, 01:05   #3
sveta_s
 
Аватар для sveta_s
 
Регистрация: 08.05.2011
Сообщений: 7
По умолчанию

SQL Server 2008
А наименования групп товаров я "загнала" и в Items DBComboBox:

Код:
rocedure TDobProdForm.FormCreate(Sender: TObject);
begin
 DataModule2.DobGrPrQuery.Refresh;
 DBComboBox1.Clear;
  DataModule2.DobGrPrQuery.First;
 While not DataModule2.DobGrPrQuery.EOF do
 begin
 DBComboBox1.Items.Add(DataModule2.DobGrPrQuery.FieldByName('Nazv').AsString);
 DataModule2.DobGrPrQuery.Next;
end;
Ну как же простой ComboBox использовать, если мне в нем надо отобразить поля таблицы из базы данных? А работает код никак: ошибок не выдает, но ничего не меняет!

Последний раз редактировалось Stilet; 28.05.2011 в 17:38.
sveta_s вне форума Ответить с цитированием
Старый 28.05.2011, 01:31   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Тогда так:
Код:
procedure TDobProdForm.ChargeGroup;
begin
  ComboBox1.Items.Clear;
  DataModule2.qrGroup.Open;
  try
    while not DataModule2.qrGroup.Eof do begin
      ComboBox1.AddItem(DataModule2.grGroup.FieldValues['GroupName'], //или как там поле называется
                        TObject(qrGroup.FieldByName('ID_Gr').AsInteger));
      DataModule2.qrGroup.Next;
    end;
  finally
    DataModule2.qrGroup.Close;
  end;
end;

procedure TDobProdForm.Button1Click(Sender: TObject);
begin
  IF (Edit1.Text <> '') and (ComboBox1.ItemIndex > -1) then
  begin
    DataModule2.ADOQuery1.SQL.Text := 'insert product (NazvP, ID_gr) values ('+
                             QuotedStr(Edit1.Text)+','+
                             IntToStr(Integer(ComboBox1.Objects[ComboBox1.ItemIndex]))+')';
    DataModule2.ADOQuery1.ExecSQL;
  end;
end;
qrGroup - специальный ADOQuery, куда можно сразу вставить запрос (свойство SQL) на выборку групп.
Впрочем, как оказалось, он уже есть (DataModule2.DobGrPrQuery).
ADOQuery1 - без заранее вставленного запроса для разных надобностей. Связанный, разумеется с ADOConnection.

Еще пояснения требуются?

Цитата:
А наименования групп товаров я "загнала" и в Items DBComboBox:
Это хорошо, но где брать идентификатор группы? Т.е. все равно перед записью продукта придется делать запрос чтобы получить ID_gr.
Поэтому Combobox, где в одном флаконе и наименование, и ID - лучше, ИМХО,

Последний раз редактировалось Прик; 28.05.2011 в 01:41.
Прик вне форума Ответить с цитированием
Старый 28.05.2011, 01:48   #5
sveta_s
 
Аватар для sveta_s
 
Регистрация: 08.05.2011
Сообщений: 7
По умолчанию

Пока теоретически все понятно, надо опробовать на практике. Большое спасибо за помощь! О результатах сообщу дополнительно, а пока поковыряюсь....

Цитата:
Поэтому Combobox, где в одном флаконе и наименование, и ID - лучше, ИМХО,
Да я с Вами полностью согласна.

В строке:
IntToStr(Integer(ComboBox1.Objects[ComboBox1.ItemIndex]))+')';

выдал ошибку:Objects не известен.

Добавила Items:
IntToStr(Integer(ComboBox1.Items.Ob jects[ComboBox1.ItemIndex]))+')';


Всё работает. Еще раз - большое спасибо!!!

Последний раз редактировалось Stilet; 28.05.2011 в 17:39.
sveta_s вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных в БД из файла tiktak Помощь студентам 0 25.05.2011 19:28
Добавление данных в таблицу slai SQL, базы данных 1 13.12.2010 16:33
Добавление данных Ruska882009 PHP 2 22.09.2009 18:36
Добавление данных в TextBox gavrylyuk Microsoft Office Excel 1 28.05.2009 18:25
Добавление данных OLEGSENT БД в Delphi 3 17.06.2008 23:47