| 
| 
 | Вопрос # 2 458/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!я использую Ado бд Access,есть 3 таблицы нужно заполнить 3-ю таблицу из первой и второй, так чтобы сохранялась целостность БД
 Приложение:Переключить в обычный режим                             email                                                          DataSet:producetable                                                 Connection:AdoConnection1                                                  MasterSource:dssales                                                 TableName:produce                            TDatasource:dsmanager                                                 DataSet:managertable                                                 Connection:AdoConnection1                                                  MasterSource:dssales                                                 TableName:manager                             TDatasource:dssales                                                 DataSet:salestable                                                 Connection:AdoConnection1                                                 TableName:sales  DBLookupComboBox1  DataSource:Module1.dssales    ListSource:Module1.dsproduce  DataSet:producetable  Connection:AdoConnection1   MasterSource:dssales  TableName:produce DBLookupComboBox2  DataSource:Module1.dssales    ListSource:Module1.dsmanager  DataSet:managertable  Connection:AdoConnection1   MasterSource:dssales  TableName:manager  Module1.salestable.Edit;   Module1.salestable.post;    
|  |   Вопрос задал: new_user (статус: Посетитель)Вопрос отправлен: 26 февраля 2009, 06:25
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 27 февраля 2009, 21:05; участников в обсуждении: 2. 
|   | Мережников Андрей (статус: Абитуриент), 26 февраля 2009, 18:36 [#1]:1. свойство KeyField - должно содержать имя поля, в котором содержится код (ID) значения, ListField - имя поля, значение которого отображается для выбора. 2. Открываются ли таблицы, значения которых используются значения для ComboBox перед предъявлением пользователю?
 3. Если хотите добавить запись, то надо использовать не salestable.edit, а salestable.append или salestable.appendrecord
 |  
|   | new_user (статус: Посетитель), 26 февраля 2009, 19:26 [#2]:KeyField изменил значения 
 DBLookupComboBox1
 DataField:наименование_по
 DataSource:Module1.dssales
 KeyField:код_продукта
 ListField:наименование_по
 ListSource:Module1.dsproduce
 DataSet:producetable
 Connection:AdoConnection1
 IndexName:код_продукта
 MasterSource:dssales
 TableName:produce
 
 DBLookupComboBox2
 DataField:фио_менеджера
 DataSource:Module1.dssales
 KeyField:личный_номер
 ListField:фио
 ListSource:Module1.dsmanager
 DataSet:managertable
 Connection:AdoConnection1
 IndexName:личный_номер
 MasterSource:dssales
 TableName:manager
 
 на добавление записи у меня стоит salestable.insert , salestable.edit стоит на редактировании я не тот код скопировал.
 
 KeyField изменил но значения в DBLookupComboBox так и не появились
 ни до F9 ни после
 |  
|   | Мережников Андрей (статус: Абитуриент), 26 февраля 2009, 21:20 [#3]:DataSource связан с каким-то компонентом (например producetable), делаете producetable.open? и не надо заполнять свойство mastersource |  
|   | new_user (статус: Посетитель), 26 февраля 2009, 21:28 [#4]:producetable.open не делал сейчас попробую |  
|   | new_user (статус: Посетитель), 26 февраля 2009, 21:37 [#5]:producetable.open, managertable.open сдедал значения в DBLookupComboBox появились, добавление записи происходит но только две сразу добавляются в одной строке где наименование_по:добавилась запись "код продукта", фио_менеджера:"личный номер", вторая строка нормальная но только столбцы "код продукта", "личный номер" пустые
 |  
|   | new_user (статус: Посетитель), 26 февраля 2009, 22:09 [#6]:sorry забыл добавить две строки на добавление записи поэтому "код продукта", "личный номер" были пустыми 
 Module1.salestable.append;
 Module1.salestable.FieldByName('личный_номер').asString:=Module1.managertable.FieldByName('личный_номер').asString;
 Module1.salestable.FieldByName('код_продукта').asString:=Module1.table1.FieldByName('код_продукта').asString;
 Module1.salestable.FieldByName('Название_организации').asString:=Module1.clientstable.FieldByName('Название').asString;
 Module1.salestable.FieldByName('Наименование_ПО').asString:=Module1.table1.FieldByName('Наименование').asString;
 Module1.salestable.FieldByName('ФИО_менеджера').asString:=Module1.managertable.FieldByName('ФИО').asString;
 Module1.salestable.FieldByName('Дата').value:=DateTimePicker1.Date;
 Module1.salestable.FieldByName('Кол-во').value:=SpinEdit1.Value;
 Module1.salestable.post;
 
 form5.close;
 
 но по прежнему добавляется две записи строки, в одной "код продукта", "личный номер" пустые по прежнему
 |  
|   | Мережников Андрей (статус: Абитуриент), 27 февраля 2009, 16:03 [#7]:добавление происходит после нажатия на кнопку? На первый взгляд - все нормально. Единственное, что приходит в голову - кнопка нажимается дважды. Вообще, я бы использовал для добавления записей компонент ADOQuery  с соответствующим SQL запросом |  
|   | new_user (статус: Посетитель), 27 февраля 2009, 21:05 [#8]:да действительно два раза запись добавляется 
 нажимаю на кнопку и вызываю это
 procedure TFrame4.Button1Click(Sender: TObject);
 begin
 form5.show;
 form5.Button1.Show;
 form5.Button2.Show;
 form5.Button3.hide;
 module1.salestable.insert;
 end;
 
 а птом еще делаю
 
 Module1.salestable.append;
 Module1.salestable.FieldByName('личный_номер').asString:=Module1.managertable.FieldByName('личный_номер').asString;
 Module1.salestable.FieldByName('код_продукта').asString:=Module1.table1.FieldByName('код_продукта').asString;
 Module1.salestable.FieldByName('Название_организации').asString:=Module1.clientstable.FieldByName('Название').asString;
 Module1.salestable.FieldByName('Наименование_ПО').asString:=Module1.table1.FieldByName('Наименование').asString;
 Module1.salestable.FieldByName('ФИО_менеджера').asString:=Module1.managertable.FieldByName('ФИО').asString;
 Module1.salestable.FieldByName('Дата').value:=DateTimePicker1.Date;
 Module1.salestable.FieldByName('Кол-во').value:=SpinEdit1.Value;
 Module1.salestable.post;
 form5.close;
 
 поэтому запись добавлялась дважды
 
 спасибо Мережников Андрей , с вашей помощью разобрался с этим вопросом
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |