Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

Форма Мастер-Деталь

Delphi 1

…это нормально в двух случаях:

1. Эксперт баз данных по умолчанию создает запрос, где RequestLive установлен в False; если вы хотите что-либо изменить, установите RequestLive в True.

2. При отношениях «один к многим», из-за правил сохранения целостности, вам дозволяется делать изменения только на форме «многих», а не на форме «один».

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) и заноси значение в свое поле. 

Помещение переменной в Memo-поле

Delphi 1 

Если я правильно понял ваш вопрос, вам нужно сделать приблизительно так (для ПОЛУЧЕНИЯ данных): 

Memos := TStringList.Create;

Memos.Assign(Table1Memo);

yourvariable_0 := Memos[0];

yourvariable_1 := Memos[1];

……………………

yourvariable_n := Memos[n];

Memos.Free;

или так (для УСТАНОВКИ данных): 

Memos := TStringList.Create;

Поделиться с друзьями: