Советы по Delphi. Версия 1.4.3 от 1.1.2001 - страница 32

стр.

BTW: правильно, что вы об этом задумались. Предположим, что вы имеете отношение «один к многим», где «один» — ваши клиенты, а «многие» — их счета-фактуры: естественно, счетов, относящихся к клиенту, может быть больше, чем один. Если ваша система позволяет редактировать информацию о клиентах, например, удалять записи, то вскоре вы можете обнаружить, что некоторые счета не будут иметь отношения к кому бы то ни было. 

Подскажите как правильно показать на экpане и сохранить в базе картинку формата JPEG?

Nomadic отвечает:

Я делал так (это кусок компонента):

>if Picture.Graphic is TJPegImage then

>begin

> bs:=TBlobStream.Create(TBlobField(Field),bmWrite);

> Picture.Graphic.SaveToStream(bs);

> bs.Free;

>end

>else if Picture.Graphic is TBitmap then

>begin

> Jpg:=TJPegImage.Create;

> Jpg.CompressionQuality:=…;

> Jpg.PixelFormat:=;

> Jpg.Assign(Picture.Graphic);

> Jpg.JPEGNeeded;

> bs:=TBlobStream.Create(TBlobField(Field),bmWrite);

> Jpg.SaveToStream(bs);

> bs.Free;

> Jpg.Free;

>end else Field.Clear; 

Как исключить показ поля P_RECNO?

Delphi 1 

Вы можете сделать:

1. отредактируйте TTable для исключения P_RECNO

или

2. установите

>TableX.FieldbyName('P_RECNO').Visible := False;

Это можно сделать также и с помощью редактора полей (Fields Editor), который связан не с DBGrid, а напрямую с компонентом Table. Для вызова редактора щелкните правой кнопкой мыши на компоненте Table и выберите самый верхний пункт контекстного меню. Добавьте все поля в список полей и выделите то поле, которое вы не хотите показывать в DBgrid. Найдите в Инспекторе Объектов свойство Visible, и установите его в False.

//

Если у вас имеется компонент TTable, дважды щелкните на иконке компонента (расположенной на форме), и вы получите в диалоге список полей, имеющих отношение к соответствующей таблице щелкните на одном из полей и проверьте в Инспекторе Объектов свойство Visible, оно должно быть установлено в False.

//

Информация из одной таблицы и набора данных на двух формах

1. Добавьте на вторую форму (form2) компонент TTable

2. В режиме разработки присвойте этой таблице такие же значения, как и у таблицы, расположенной на form1

3. В секции IMPLEMENTATION у form2 создайте следующий фрагмент кода:


>unit form2;

>interface

>{…}

>implementation

>uses form1;

>{…}

4. Подключите процедуру к OnCreate-событию в form2 (через Инспектор Объектов)

5. Добавьте к этой процедуре следующую строку:

>table1 := form1.table1;

В режиме разработки свяжите все компоненты с table1, расположенным на form1.

Остается только решить проблему синхронизации. Попробуйте следующее:

- На Form1

 разместите Table1

 разместите DataSource1

  установите DataSource1.DataSet := Table1

 разместите DataGrid

  установите DataSource := DataSource1

Ну это все просто и стандартно. Поехали дальше:

- На Form2

 разместите DataSource1 (#1 для этой формы)

 разместите любые другие необходимые вам БД-компоненты;

  укажите у них в качестве источника данных DataSource1

 В обработчике события OnCreate для этой формы (например, FormCreate), поместите следующий код:

>With Form1 do

>begin

> Form2.DataSource1.DataSet := Table1;

>end;

 Данный код подключает Table1 на Form1 к DataSource от Form2.

 После таких действий данные будут отображены на Form2 и будут «синхронизированы» с данными, отображаемыми на Form1 (поскольку в действительности используется одна таблица).

Единственное здесь предостережение – если вы используете TDatabase, так как это может быть не то, что вы хотите. Компонент TDatabase не обязателен для получения доступа к базам данных, но, тем не менее, он обеспечивает вас дополнительным контролем в приложениях класса клиент/сервер.

Таким образом, если приложение не работает в среде клиент/сервер, нет необходимости использовать TDatabase. Все, что вам нужно – TDataSource, TTable и компоненты для работы с базами данных. 

Как при вводе информации в БД автоматически вставлять SEQUENCE?

Nomadic отвечает:

Если добавление через оператор INSERT ( в TQuery), то прямо там пишешь, как в плюсе («… Values (My_seq.nextval, …»).

Если добавление идет через TQuery c RequestLive=true, то в BeforeInsert сделай запрос через TQuery (select myseq.nextval from dual) и заноси значение в свое поле.