![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Помогите кодом в простой ситуации. В 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
|
||||
|
||||
|
Цитата:
|