Delphi - это просто. Урок 8.11.2: Программируем печать накладных. Часть 2. (where, SQL, TTable) |
Автор megabax | |||||
07.09.2010 г. | |||||
Delphi - это просто. Урок 8.11.2: Программируем печать накладных.Часть 2. Редактирование накладной (where, SQL, TTable, TQuery, TDBLabel, TDBEdit).Исходники к уроку вы можете скачать здесь. Мы уже написали журнал накладных. Пока он отображает только список накладных, введенных в качестве демо примера. Сегодня мы начнем писать механизм редактирования этих документов. И так, снова войдем в Database Desctop, и создадим таблицу "Tableparts" вот с такой структурой*: Прежде чем мы сделаем еще один тестовый пример, я расскажу о назначении полей:
А вот теперь наберем тестовый пример*: Следующий шаг - создаем форму редактирования документа. Если забыли как создавать новую форму, напомню: меню "File" -> "New" -> "Form"* Сохраним созданный файл под именем DOCUnit, форму назовем TfrmDoc. Положим на форму компонент TQuery (tbHeap) и TTable (qTab), два TDataSource (dsHeap и dsTab), так же положим компонент TDBGrid, который назовем dbgTabl. Еще нам понадобиться объект типа TDBLabel (lbdbDocNum) и TDBEdit (lbEdDate), их можно найти на закладке Data control*: кроме того, для того что бы сделать поясняющие надписи, добавим к форме два обычных TLabel. Затем еще добавим две кнопочки TBitBtn: Ok и Cancel. Вот что в итоге должно получиться*: Изменить цвет и размер шрифта метки (в том числе и TDBLabel) можно через Object Inspector, свойство Font*: При этом откроется такой диалог*: Теперь займемся связыванием компонентов. tbHeap свяжем с dsHeap, установив у последнего свойство DataSet в tbHeap*: К метки lbdbDocNum и поля ввода базы данных lbEdDate свойство DataSource делаем равным dsHeap. Так же свяжем dsTab, qTab и dbgTabl. Теперь заполним значение свойства SQL объекта qTab:
На этот раз у компонента TQuery (qTab) свойство Active мы оставляем false, так как запрос еще не до конца сформирован, мы его будем доформировывать программно. Точно так же оставляем active=false у tbHeap. Данный запрос выбирает строки из таблицы tablparts, присоединяет к ней таблицу товаров по связке полей ware <--> id. Для отбора строк, соответствующих заданному документу используется конструкция: where tablparts.doc=#docid# где #docid# программно заменятся на номер открываемого документа, например: where tablparts.doc=1 Теперь напишем у класса формы TfrmDoc публичный метод OpenDoc:
строкой qTab.SQL.Text:=StringReplace(qTab.SQL.Text,'#docid#',IntToStr(Docid),[rfReplaceAll]); мы как раз делаем замену #docid# на номер выбранного документа. После этого компонент TQuery можно сделать активным. Затем мы устанавливаем фильтр у TTable: tbHeap.Filter:='id='+IntToStr(Docid); Ну, и наконец устанавливаем имена полей у метки и поля ввода (TDBLabel и TDBEdit): lbdbDocNum.DataField:='ID'; последняя строка у нас запускает окно редактирования документа в модальном режиме: result:=ShowModal;
Метод Post класса TTable сохраняет изменения в базу данных. Ну, и наконец, последний штрих: кнопочка "Редактировать" в журнале документов. И так, открываем форму frmDocs*: И кладем на форму еще одну кнопочку и обзываем ее btnEdit*: Пишем обработчик OnCliek:
Что делает наша процедура? Получаем текущее значение номера документа: id:=qDocs.FieldByName('DocNum').Value; Затем создаем форму и вызываем у нее написанный нами ранее метод OpenDoc, в качестве параметра передав ему полученный номер документа. Все, запускаем программу на тестирование: Мы написали форму редактирования документов. На следующем уроке мы доведем ее "до ума": добавим поле для выбора склада, реализуем возможность менять строки, русифицируем заголовки. В дальнейшем научим нашу программу печатать накладные через систему компонентов Free report. Исходники к уроку вы можете скачать здесь. Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation, (a Micro Focus Company).
|
|||||
Последнее обновление ( 06.11.2011 г. ) |
« След. | Пред. » |
---|