Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.10.2012, 11:44
Аватар для BRESKON
BRESKON BRESKON вне форума
Прохожий
 
Регистрация: 12.10.2012
Адрес: г.Саратов
Сообщения: 13
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Помогите с простой задачкой DBEdit

Помогите кодом в простой ситуации. В DBEdit из базы данных отображает Всегда три числа: 1,2 или 3. Нужно сделать так, что-бы в DBEdit в место этих трех цифр отображались слова, вместо 1-ДА, 2-НЕТ и 3-НЕЗНАЮ. Помогите плиз.
Ответить с цитированием
  #2  
Старый 12.10.2012, 12:44
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от BRESKON
Помогите кодом в простой ситуации. В DBEdit из базы данных отображает Всегда три числа: 1,2 или 3. Нужно сделать так, что-бы в DBEdit в место этих трех цифр отображались слова, вместо 1-ДА, 2-НЕТ и 3-НЕЗНАЮ. Помогите плиз.
TDBEdit отображает то, что реально хранится в указанном поле таблицы.
Если же нужна расшифровка, то есть много способов это сделать. Например использовать вместо TDBEdit обычный TEdit (или TComboBox) в котором "вручную" расшифровывать. Ещё можно использовать TDBLookupComboBox через временную таблицу расшифровки. А также можно расшифровку поля производить прямо в SQL-запросе.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
BRESKON (12.10.2012)
  #3  
Старый 12.10.2012, 13:04
Аватар для BRESKON
BRESKON BRESKON вне форума
Прохожий
 
Регистрация: 12.10.2012
Адрес: г.Саратов
Сообщения: 13
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
TDBEdit отображает то, что реально хранится в указанном поле таблицы.
Если же нужна расшифровка, то есть много способов это сделать. Например использовать вместо TDBEdit обычный TEdit (или TComboBox) в котором "вручную" расшифровывать. Ещё можно использовать TDBLookupComboBox через временную таблицу расшифровки. А также можно расшифровку поля производить прямо в SQL-запросе.
Вручную неудобно, мне подсказали сделать рядом обычный Edit и включить автозаполнение его при изменении содержимого DBEdit'а. Звучит просто, а на практике как сделать не знаю
Ответить с цитированием
  #4  
Старый 12.10.2012, 13:15
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от BRESKON
Вручную неудобно, мне подсказали сделать рядом обычный Edit и включить автозаполнение его при изменении содержимого DBEdit'а. Звучит просто, а на практике как сделать не знаю
Под словом "вручную" я это и имел ввиду. Т.е. не компонент автоматически будет расшифровывать, а тебе вручную нужно написать функцию расшифровки.
Для расшифровки удобно использовать событие 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  
Старый 12.10.2012, 14:36
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

или, например, завести вычисляемое поле
Ответить с цитированием
  #6  
Старый 12.10.2012, 14:40
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от icWasya
или, например, завести вычисляемое поле
Это кстати тоже хороший вариант.
Правда у вычисляемых полей есть один минус - их нельзя редактировать.
Ответить с цитированием
  #7  
Старый 12.10.2012, 14:46
Аватар для BRESKON
BRESKON BRESKON вне форума
Прохожий
 
Регистрация: 12.10.2012
Адрес: г.Саратов
Сообщения: 13
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Это кстати тоже хороший вариант.
Правда у вычисляемых полей есть один минус - их нельзя редактировать.
Так редактировать там нечего, да/нет/незнаю других данных не будет. А можно по подробнее про вычисляемое поле? Или хотя бы примерчик использования.
Ответить с цитированием
  #8  
Старый 12.10.2012, 15:16
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от BRESKON
Так редактировать там нечего, да/нет/незнаю других данных не будет. А можно по подробнее про вычисляемое поле? Или хотя бы примерчик использования.
Сделай двойной клик по TDataSet и в появившемся окне нажми правой кнопкой мыши. Добавь нужные поля через "Add fields..." или все поля через "Add all fields". Потом вызови это меню ещё раз и выбери "New field..." и в появившемся диалоге введи имя нового поля, его тип (String), размер, отметь опцию "Calculated" и нажми "OK".
Потом прицепи к этому новому полю свой 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  
Старый 16.10.2012, 11:34
Аватар для BRESKON
BRESKON BRESKON вне форума
Прохожий
 
Регистрация: 12.10.2012
Адрес: г.Саратов
Сообщения: 13
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Под словом "вручную" я это и имел ввиду. Т.е. не компонент автоматически будет расшифровывать, а тебе вручную нужно написать функцию расшифровки.
Для расшифровки удобно использовать событие 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;
Вот что получилось (вернее сказать не получилось выдаёт Undeclared identifier: 'FieldByName'):

Код:
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  
Старый 16.10.2012, 11:43
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от BRESKON
Вот что получилось (вернее сказать не получилось выдаёт Undeclared identifier: 'FieldByName'):

Код:
.....
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.
Это потому что у TDBGrid нет метода FieldByName и быть его там не должно (да ещё к тому же обращение идёт не к объекту сетки, а к классу).
Тебе нужно обращаться не к сетке, а к таблице - в данном случае это DataSet.
А ещё у TDBGrid события AfterScroll нету и быть не может.
Ответить с цитированием
  #11  
Старый 29.10.2012, 11:43
Аватар для BRESKON
BRESKON BRESKON вне форума
Прохожий
 
Регистрация: 12.10.2012
Адрес: г.Саратов
Сообщения: 13
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Это потому что у TDBGrid нет метода FieldByName и быть его там не должно (да ещё к тому же обращение идёт не к объекту сетки, а к классу).
Тебе нужно обращаться не к сетке, а к таблице - в данном случае это DataSet.
А ещё у TDBGrid события AfterScroll нету и быть не может.

С этим разобрались, а как сделать всё тоже самое, только без вшитых в программу данных, а с использованием БД, а данные отображались в Едите, если можно то пример кода, как сделать выборку из таблицы.
Ответить с цитированием
  #12  
Старый 29.10.2012, 11:59
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от BRESKON
С этим разобрались, а как сделать всё тоже самое, только без вшитых в программу данных, а с использованием БД, а данные отображались в Едите, если можно то пример кода, как сделать выборку из таблицы.
Выборка из таблицы с помощью TTable (или TADOTable):
Код:
  Table1.Close;
  Table1.TableName := 'Таблица';
  Table1.Open;
Выборка из таблицы с помощью TQuery (или TADOQuery):
Код:
  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  
Старый 29.10.2012, 12:16
Аватар для BRESKON
BRESKON BRESKON вне форума
Прохожий
 
Регистрация: 12.10.2012
Адрес: г.Саратов
Сообщения: 13
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Код:
  if Table1.Locate('id', DataSet.FieldByName('ПлатДок').AsInteger, []) then
  begin
    Edit1.Text := Table1.FieldByName('Текст').AsString;
  end else
  begin
    Edit1.Text := '???';
  end;

p.s. Только не пойму почему нельзя для этого использовать TDBLookupComboBox.
Сразу уточню: if Table1.Locate('id' - id нужно поменять на что-то? Такой же вопрос и с Table1.FieldByName('Текст') - Текст - меняется на что-то? И ещё один, при компиляции выдает: Declaration expected but 'IF' found.
Ответить с цитированием
  #14  
Старый 29.10.2012, 12:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от BRESKON
Сразу уточню: if Table1.Locate('id' - id нужно поменять на что-то? Такой же вопрос и с Table1.FieldByName('Текст') - Текст - меняется на что-то?
Меняешь на имена полей из своей реальной таблицы (которая призвана заменить вшитую расшифровку). 'id' - имя поля с индексом по которому искать, 'Текст' - имя поля с текстом которым нужно подменять этот индекс.
Цитата:
Сообщение от BRESKON
И ещё один, при компиляции выдает: Declaration expected but 'IF' found.
Компилятор говорит, что ожидал объявление, а встретил слово 'IF'.
Ответить с цитированием
  #15  
Старый 29.10.2012, 12:29
Аватар для BRESKON
BRESKON BRESKON вне форума
Прохожий
 
Регистрация: 12.10.2012
Адрес: г.Саратов
Сообщения: 13
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Компилятор говорит, что ожидал объявление, а встретил слово 'IF'.
А как исправить?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter