|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите с простой задачкой DBEdit
Помогите кодом в простой ситуации. В DBEdit из базы данных отображает Всегда три числа: 1,2 или 3. Нужно сделать так, что-бы в DBEdit в место этих трех цифр отображались слова, вместо 1-ДА, 2-НЕТ и 3-НЕЗНАЮ. Помогите плиз.
|
#2
|
||||
|
||||
Цитата:
Если же нужна расшифровка, то есть много способов это сделать. Например использовать вместо TDBEdit обычный TEdit (или TComboBox) в котором "вручную" расшифровывать. Ещё можно использовать TDBLookupComboBox через временную таблицу расшифровки. А также можно расшифровку поля производить прямо в SQL-запросе. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
BRESKON (12.10.2012)
|
#3
|
||||
|
||||
Цитата:
|
#4
|
||||
|
||||
Цитата:
Для расшифровки удобно использовать событие AfterScroll (и TDBEdit тут не нужен). Примерно так: Код:
procedure TForm1.Table1AfterScroll(DataSet: TDataSet); begin case Table1.FieldByName('Имя поля').AsInteger of 1: Edit1.Text := 'ДА'; 2: Edit1.Text := 'НЕТ'; 3: Edit1.Text := 'НЕЗНАЮ'; else Edit1.Text := '???'; end; end; |
#5
|
|||
|
|||
или, например, завести вычисляемое поле
|
#6
|
||||
|
||||
Цитата:
Правда у вычисляемых полей есть один минус - их нельзя редактировать. |
#7
|
||||
|
||||
Цитата:
|
#8
|
||||
|
||||
Цитата:
Потом прицепи к этому новому полю свой TDBEdit и в обработчике OnCalcFields у TDataSet сделай примерно такой обработчик: Код:
procedure TForm1.Table1CalcFields(DataSet: TDataSet); var s: String; begin case DataSet.FieldByName('Имя обычного поля').AsInteger of 1: s := 'ДА'; 2: s := 'НЕТ'; 3: s := 'НЕЗНАЮ'; else s := '???'; end; DataSet.FieldByName('Имя вычисляемого поля').AsString := s; end; |
#9
|
||||
|
||||
Цитата:
Код:
unit BuhPrint; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, Grids, DBGrids, StdCtrls, DBCtrls, Mask, DB, ADODB; type TPrintPD = class(TForm) Panel1: TPanel; MainMenu1: TMainMenu; N1: TMenuItem; Panel2: TPanel; Panel3: TPanel; DBPD: TDBGrid; DBEdit1: TDBEdit; DBCheckBox1: TDBCheckBox; DBComboBox1: TDBComboBox; Label1: TLabel; Label2: TLabel; ADOTable1: TADOTable; DataSource1: TDataSource; Edit1: TEdit; procedure N1Click(Sender: TObject); procedure TDBGridAfterScroll(DataSet: TDataSet); private { Private declarations } public { Public declarations } end; var PrintPD: TPrintPD; implementation uses DM; {$R *.dfm} procedure TPrintPD.N1Click(Sender: TObject); begin close; end; procedure TPrintPD.TDBGridAfterScroll(DataSet: TDataSet); begin case TDBGrid.FieldByName('ПлатДок').AsInteger of 1: Edit1.Text := 'ДА'; 2: Edit1.Text := 'НЕТ'; 3: Edit1.Text := 'НЕЗНАЮ'; else Edit1.Text := '???'; end; end; end. |
#10
|
||||
|
||||
Цитата:
Тебе нужно обращаться не к сетке, а к таблице - в данном случае это DataSet. А ещё у TDBGrid события AfterScroll нету и быть не может. |
#11
|
||||
|
||||
Цитата:
С этим разобрались, а как сделать всё тоже самое, только без вшитых в программу данных, а с использованием БД, а данные отображались в Едите, если можно то пример кода, как сделать выборку из таблицы. |
#12
|
||||
|
||||
Цитата:
Код:
Table1.Close; Table1.TableName := 'Таблица'; Table1.Open; Код:
Query1.Close; Query1.SQL.Text := 'SELECT * FROM Таблица'; Query1.Open; Код:
if Table1.Locate('id', DataSet.FieldByName('ПлатДок').AsInteger, []) then begin Edit1.Text := Table1.FieldByName('Текст').AsString; end else begin Edit1.Text := '???'; end; p.s. Только не пойму почему нельзя для этого использовать TDBLookupComboBox. Последний раз редактировалось poli-smen, 29.10.2012 в 12:02. |
#13
|
||||
|
||||
Цитата:
|
#14
|
||||
|
||||
Цитата:
Цитата:
|
#15
|
||||
|
||||
Цитата:
|