Как отобразить данные по щелчку панели в dbgrid и как сохранить данные dbgrid в таблицу в биллинговой программе Canteen

Я разрабатываю программное обеспечение для выставления счетов в столовой киоска, которое позволяет выставлять счета за товары в столовой.

У меня есть две таблицы в базе данных, одна с меню, а другая с пользователями.
Элементы отображаются на панелях, которые создаются динамически в соответствии с количеством записей. Когда пользователь щелкает панель, элемент необходимо добавить в dbgrid.

Наконец, счет должен быть сохранен в соответствии с «идентификатором пользователя» в таблице.

Вкратце; Я хотел, чтобы элемент с его ценой отображался в dbgrid, когда пользователь щелкает панель. Также я хочу, чтобы счет сохранялся в таблицу с помощью кнопки сохранения в дизайне.

Следующие таблицы у меня есть;

1.) dbo.Menu со столбцами Menu_index,Item_Name,Item_Price.

2.) dbo.Users со столбцами UserId,UserName,UsrPwd,Status.

3.) dbo.Tran_details со столбцами Menu_index, Menu_id, Item_price.

4.) dbo.Tran_header со столбцами Menu_index,Date,UserID.

Код, который я сделал, примерно такой (ниже), но я застрял на этом этапе. Любая методология или пример кодирования будут оценены.

Заранее спасибо.

procedure TfrmMenu.FormCreate(Sender: TObject);    
  begin
    with DMCanteen do
   begin
    QryMenu.Close;
    QryMenu.SQL.Clear;
    QryMenu.SQL.Add('select Menu_Index,Item_Name,Item_Price from MENU');
    QryMenu.Open;
      SetLength(arrmenu, QryMenu.recordCount);
      SetLength(arrmenuid, QryMenu.recordCount);
      SetLength(arritemprice, QryMenu.recordCount);
    i := 0;
    QryMenu.First;
     while not QryMenu.Eof do
   begin
     arrmenu[i] := QryMenu.FieldByName('Item_Name').AsString;
     arrmenuid[i] := QryMenu.FieldByName('Menu_Index').AsInteger;
     arritemprice[i] := QryMenu.FieldByName('Item_Price').AsString;
     QryMenu.Next;
     inc(i);
   end;
     showmessage(Inttostr(QryMenu.recordcount));
     CreateButtons(QryMenu.recordcount, 5, Panel1);
  end;
end;

person Sreenath Krishnakumar    schedule 12.09.2013    source источник
comment
Не очень понятно, с какой частью проблемы вам нужна помощь. Это вставка в сетку?   -  person Hugh Jones    schedule 12.09.2013
comment
Нам нужно больше информации. Табличные структуры были бы хороши. Вы хотите сохранить в базе данных все заказанные товары или только общую сумму счета? Пожалуйста, отредактируйте свой вопрос.   -  person Jan Doggen    schedule 12.09.2013
comment
Кстати, вы никогда не добавляете данные «в dbgrid», вы вставляете данные в базовую базу данных. Может быть, это часть вашего замешательства.   -  person Jan Doggen    schedule 12.09.2013
comment
Мне нужно сохранить все заказанные товары в счете. Мне нужно было это ; (1). Мне нужно отобразить выбранные элементы с ценой в сетке. и (2). Мне нужно сохранить счет в таблице, которую я уже создал как dbo.Tran_details.   -  person Sreenath Krishnakumar    schedule 12.09.2013


Ответы (1)


Мне кажется, вам нужны два разных набора данных (я настоятельно рекомендую вам использовать TClientDataset): один со всеми продуктами, а другой с заказанными продуктами.

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

Совет: при работе с компонентами программного обеспечения данных в Delphi думайте не о сетках или правках, а о наборах данных. Визуальные компоненты существуют только для того, чтобы графический интерфейс работал с данными. Данные хранятся в наборах данных. Когда набор данных обновится, визуальный компонент покажет это!

Итак, я предлагаю вам спроектировать свое решение для работы с двумя наборами данных, один как каталог продуктов, а другой как заказ продукта. Когда продукт выбран в наборе данных каталога, соответствующая запись будет вставлена ​​в набор данных заказа. Если компоненты программного обеспечения данных правильно связаны с соответствующими наборами данных, графический интерфейс покажет то, что вы хотите.

person AlexSC    schedule 12.09.2013
comment
Спасибо за идею босс! Можете ли вы предоставить мне пример с кодом для связывания dbgrid с набором данных заказа, если у вас есть время? это бы мне очень помогло. - person Sreenath Krishnakumar; 15.09.2013
comment
@SreenathKrishnakumar: код для этого не нужен, вы просто назначаете свойство DataSource TDBGrid компоненту TDataSource, который связан (свойством набора данных) с набором данных вашего заказа. В коде все то же самое, если хотите, просто назначьте те же самые свойства. - person AlexSC; 15.09.2013
comment
Что я сделал, так это; Я создал два набора данных и связан с источником данных. В форме также есть adoquery и два adotables. Но когда я запускаю программу, отображаются все значения в таблице. Я хочу, чтобы одно и то же имя элемента отображалось в dbgrid, который такой же, как в теге элемента. Код есть; процедура TfrmMenu.itemClick(Отправитель: TObject); Начните с DMCanteen, начните с ADOQuery1, начните SQL.Add('Выберите Menu_Index,Item_Name,Item_Price from Menu'); Открытый конец; конец; конец; - person Sreenath Krishnakumar; 18.09.2013
comment
@SreenathKrishnakumar: Однако я не уверен, что действительно следую за вами, что бы я сделал, чтобы TDBGrid был связан с TDataSource, связанным с набором данных заказов. Каждый раз, когда кто-то выбирает товар, мы должны найти сведения об этом товаре в наборе данных о товарах (не в наборе данных о заказах). Теперь, когда набор данных о товарах размещен в записи о товаре, необходимо добавить новую запись в набор данных о заказах, содержащую копию сведений о товаре. Когда эта новая запись публикуется в наборе данных заказа, она отображается в сетке. - person AlexSC; 18.09.2013