0

食堂での商品の請求を可能にするキオスク食堂請求ソフトウェアを開発しています。

データベースには 2 つのテーブルがあり、1 つはメニュー、もう 1 つはユーザーです。
アイテムは、レコード数に応じて動的に作成されるパネルに表示されます。ユーザーがパネルをクリックすると、項目が dbgrid に追加される必要があります。

最後に、「ユーザー ID」に従って請求書をテーブルに保存する必要があります。

簡単に言えば; ユーザーがパネルをクリックしたときに、アイテムとその価格を dbgrid に表示したかったのです。また、デザインの保存ボタンを使用して、請求書をテーブルに保存したいと考えています。

私が持っている次の表;

1.) 列 Menu_index、Item_Name、Item_Price を持つ dbo.Menu。

2.) 列 UserId、UserName、UsrPwd、Status を持つ dbo.Users。

3.) 列 Menu_index、Menu_id、Item_price を持つ dbo.Tran_details。

4.) Menu_index、Date、UserID 列を持つ dbo.Tran_header。

私が行ったコーディングは次のようなものです(以下)が、この時点で立ち往生しています。任意の方法論またはコーディング例をいただければ幸いです。

前もって感謝します。

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;
4

1 に答える 1

0

2 つの異なるデータセットが必要なようです ( を使用することを強くお勧めしますTClientDataset)。1 つはすべての製品を含み、もう 1 つは注文した製品を含みます。

特定のパネルがクリックされたときに、対応するレコードにアクセスして、注文データセットに新しいレコードを追加するための製品の詳細を取得する必要があります。DBGrid は注文データセットにリンクされるように思われるため、そのデータセットにレコードを追加するたびに、DBGrid が自動的に更新されて表示されます。

ここでのヒント: Delphi でデータウェア コンポーネントを扱うときは、グリッドや編集についてではなく、データセットについて考えてください。ビジュアル コンポーネントは、GUI がデータを操作できるようにするためだけに存在します。データはデータセットに保存されます。データセットが更新されると、ビジュアル コンポーネントがそれを表示します!

したがって、2 つのデータセット (1 つは製品カタログ、もう 1 つは製品注文) を使用するようにソリューションを設計することをお勧めします。カタログ データセットで製品が選択されると、対応するレコードが注文データセットに挿入されます。データウェア コンポーネントが適切なデータセットに正しくリンクされていれば、GUI は必要なものを表示します。

于 2013-09-12T19:00:41.473 に答える