Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Выборка из ComboBox`a


Автор: Anakin 5.11.2008, 16:40
Добрый день
Есть тыкая проблема.
Работаю с АДО
МS Access.
Есть два комбобокса
и 3 таблицы и одно поле Tedit

В первой таблице название товара, стоимость товара и его количество.
Во второй таблице Экономический агент, имя клиента который решил  у нас что-то купить.
В третью таблицу у нас вносятса поля таким образом: Он купил: Name1 * 3 штуки = 31.68
Так вот у меня 2 проблемы первая MS Access не считает копейки и вторая когда я записываю данный в третью таблицу она считает сумму по первому полю первой таблици тоесть я незнаю как сделать так что бы оно считало по выбранному имени полю его суммы.

1) Table1
===================
ID | Tovar     | Suma    |Col
==|====== |======|===
1  | Name1   | 10,56   | 23
2  | Name2   | 15,34   | 56
3  | Name3   | 13,23   | 34
4  | Name4   | 15,46   | 23
5  | Name5   | 56,05   | 3

2) Table2
=========
ID| Agent   |
==|======
1  | Name1 |
2  | Name2 |
3  | Name3 |

3) Table3

================
ID | NikName| Suma    |
==|====== |======|
1  |               |             | 
2  |               |             | 
3  |               |             | 
4  |               |             | 


Вот код:

Код

type
  TfrmGive = class(TForm)
    sGroupBox1: TsGroupBox;
    edt_Kol: TsEdit;
    btn_give: TsButton;
    btn_close: TsButton;
    FormSize1: TFormSize;
    cb_give: TsComboBox;
    rb_vibor: TsRadioGroup;
    sLabel1: TsLabel;
    sLabel2: TsLabel;
    cb_skup: TsComboBox;
    sLabel3: TsLabel;
    sGroupBox2: TsGroupBox;
    lbl_sum: TsLabel;
    sBevel1: TsBevel;
    lst_status: TsListBox;
    procedure FormCreate(Sender: TObject);
    procedure btn_giveClick(Sender: TObject);
    procedure rb_viborClick(Sender: TObject);
    procedure btn_closeClick(Sender: TObject);
    procedure cb_giveChange(Sender: TObject);
  private
  Procedure Moldcell;
  Procedure Voxtel;
  Procedure Other;
    { Private declarations }
  public
  param1:integer;
  Result:integer;
    { Public declarations }
  end;

var
  frmGive: TfrmGive;

implementation

uses Package, Goods, Debit, About, ViewDebit, Sell, DataModule,
  Options,Registry, Otchet,AdminTeritor, Store, Password, Copy,
  Pack, Edit, Prixod, Registr, Ucalc, Main;
{$R *.dfm}

procedure TfrmGive.FormCreate(Sender: TObject);
begin
  cb_skup.Clear;
  Module.qGive.Close;
  Module.qGive.SQL.Clear;
  Module.qGive.SQL.Add('SELECT agent.id, agent.name');
  Module.qGive.SQL.Add('FROM agent;');
  Module.qGive.Open;
  cb_skup.Clear;
  while not Module.qGive.Eof do
  begin
    cb_skup.Items.AddObject(Module.qGive.Fields.Fields[1].AsString, Pointer(Module.qGive.Fields.Fields[0].AsInteger));
    Module.qGive.Next;
  end;
end;
Procedure TfrmGive.Moldcell;
Begin
  cb_give.Clear;
  Module.Access.Close;
  Module.Access.SQL.Clear;
  Module.Access.SQL.Add('SELECT Moldcell.Number, Moldcell.Vid_Pack,Moldcell.Summa_rel');
  Module.Access.SQL.Add('FROM Moldcell;');
  Module.Access.Open;
  param1:=Module.Access.Fields.Fields[2].AsInteger;
  cb_give.Clear;
  while not Module.Access.Eof do
  begin
    cb_give.Items.AddObject(Module.Access.Fields.Fields[1].AsString, Pointer(Module.Access.Fields.Fields[0].AsInteger));
    Module.Access.Next;
  end;
End;
procedure TfrmGive.btn_giveClick(Sender: TObject);
begin
Module.Agent.Active:=True;
Module.Agent.edit;
Module.Agent.insert;
Module.Agent.fieldbyname('NameS').AsString:=(cb_skup.Items.Strings[cb_skup.ItemIndex]);
Module.Agent.fieldbyname('Tovar').AsString:=(cb_give.Items.Strings[cb_give.ItemIndex]);
Module.Agent.fieldbyname('Col').AsString:=edt_kol.Text;
Module.Agent.FieldByName('Data').AsDateTime := Now;
Result:=StrToInt(edt_kol.Text)*param1;
Module.Agent.fieldbyname('Summa').AsInteger:=Result;
Module.Agent.Post;
Module.Agent.active:=False;
Module.Agent.active:=True;
lbl_sum.Caption:=IntToStr(Result)+ ' Lei';
end;



Procedure TfrmGive.Voxtel;
Begin
  cb_give.Clear;
  Module.Access.Close;
  Module.Access.SQL.Clear;
  Module.Access.SQL.Add('SELECT Voxtel.Number, Voxtel.Vid_Pack');
  Module.Access.SQL.Add('FROM Voxtel;');
  Module.Access.Open;
  cb_give.Clear;
  while not Module.Access.Eof do
  begin
    cb_give.Items.AddObject(Module.Access.Fields.Fields[1].AsString, Pointer(Module.Access.Fields.Fields[0].AsInteger));
    Module.Access.Next;
  end;
End;

Procedure TfrmGive.Other;
Begin
  cb_give.Clear;
  Module.Access.Close;
  Module.Access.SQL.Clear;
  Module.Access.SQL.Add('SELECT Other.Number, Other.Name');
  Module.Access.SQL.Add('FROM Other;');
  Module.Access.Open;
  cb_give.Clear;
  while not Module.Access.Eof do
  begin
    cb_give.Items.AddObject(Module.Access.Fields.Fields[1].AsString, Pointer(Module.Access.Fields.Fields[0].AsInteger));
    Module.Access.Next;
  end;
End;
procedure TfrmGive.rb_viborClick(Sender: TObject);
begin
Case rb_vibor.ItemIndex of
0: Begin
Moldcell;
End;

1: Begin
Voxtel;
End;

2: Begin
Other;

end;
end;

end;
procedure TfrmGive.btn_closeClick(Sender: TObject);
begin
Close;
end;



Вот так выглядит форма.


 

Автор: Rodman 5.11.2008, 20:15
Цитата(Anakin @  5.11.2008,  16:40 Найти цитируемый пост)
вторая когда я записываю данный в третью таблицу
не совсем понял

а по первому вопросу - программно надо пересчитывать наверна...

итк - проект можешь выложить? с БД и исходником

Автор: Anakin 5.11.2008, 21:09
да вот проект. Я убрал всё лишнее.
Подскажите если у кого есть какие идей.
Заранее благодарен.

Автор: Данкинг 5.11.2008, 23:26
Цитата(Anakin @  5.11.2008,  16:40 Найти цитируемый пост)
MS Access не считает копейки 

Ну дык, считай самостоятельно, только с разделителем дробной части в "региональных настройках" не забудь посчитаться. smile 

Цитата(Anakin @  5.11.2008,  16:40 Найти цитируемый пост)
когда я записываю данный в третью таблицу она считает сумму по первому полю первой таблици тоесть я незнаю как сделать так что бы оно считало по выбранному имени полю его суммы.

Ничё не понял. smile 

Автор: Anakin 6.11.2008, 12:58
Данкинг

Допустим в первой таблице 5 полей и я для подсчёта выбираю 2 поле и умножаю и когда данные записываютса в 3 таблицу оказываетса что оно считает сумму по цене не 2 поля а по цене 1 поля. Я там положил пример программы.

Автор: Vas 6.11.2008, 13:35
Цитата(Anakin @  6.11.2008,  12:58 Найти цитируемый пост)
сумму по цене не 2 поля а по цене 1 поля

Дык после выбора еще не мешало бы курсор спозиционировать на нужной записи, или как вариант использовать DBLookupComboBox

P.S. Точно поля, а  не записи? 

Автор: Anakin 6.11.2008, 16:08
Vas, Записи, прости попутал smile

Кто-то может помочь.
Перепробовал всё но не получаетса ((

Автор: Vas 7.11.2008, 07:59
Цитата(Anakin @  6.11.2008,  16:08 Найти цитируемый пост)
Кто-то может помочь.
Перепробовал всё но не получаетса (( 

Что именно не получается? Уже же толкнули в нужное русло. DBLookupComboBox пробовали заюзать или после выбора в ComboBox наименования сделать выбор из БД всех полей принадлежащих этой записи, затем взять поле Sum умножить на выбранное количество и вывести в строку  smile 

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