procedureTForm1.ShowFields;
var
i : Word;
begin
Memo1.Lines.Clear;Table1.FieldDefs.Update; { должно быть вызвано, если Table1 не активна }
fori:= 0 toTable1.FieldDefs.Count - 1 do WithTable1.FieldDefs.Items[i] doMemo1.Lines.Add(Name + ' - ' + IntToStr(Size));
Memo1.Lines.Add(Name + ' – ' + IntToStr(Size));
end;
Если вам просто нужны имена полей (FieldNames), то используйте метод TTable GetFieldNames:
GetIndexNames для получения имен индексов:
varFldNames, IdxNames : TStringList
begin
FldNames := TStringList.Create;
IdxNames := TStringList.Create;
IfTable1.State = dsInactive thenTable1.Open;
Table1.GetFieldNames(FldNames);
Table1.GetIndexNames(IdxNames);
{…… используем полученную информацию ……}
FldNames.Free; {освобождаем stringlist}
IdxNames.Free;
end;
Для получения информации об определенном поле вы должны использовать FieldDef.
Обмен данными между TMemoField и TMemo
ProcedureTMemoToTMemoField;
begin
TMemoField.Assign(TMemo.Lines);
end;
ProcedureTMemoFieldToTMemo;
VARaBlobStream : TBlobStream;
begin
aBlobStream := TBlobStream.Create(TMemoField, bmRead);
TMemo.Lines.LoadFromStream(aBlobStream);
aBlobStream.Free;
end;
Если в транзакции изменена какая-то таблица, то для другого пользователя блокируется вся таблица, до окончания транзакции. Как лечить?
Nomadicотвечает:
По умолчанию, оператор UPDATE в MS SQL Server пытается поставить эксклюзивную табличную блокировку. Вы можете обойти это, используя ключевое слово FROM в сочетании с опцией PAGLOCK для использования MS SQL Server страничных блокировок вместо эксклюзивной табличной блокировки:
UPDATE orders SET customer_id=NULL FROM orders(PAGLOCK) WHERE customer_id=32;
Блокиpовка на всю таблицу пpи UPDATE ставится только в том случае, если по предикату нет индекса. Так, можно просто проиндексировать таблицу orders по полю customer_id, и не забывать делать UPDATE STATISTIC, хотя будет работать и с PAGLOCK. Просто не факт, что UPDATE всегда делает табличную блокировку.
…это нормально в двух случаях:
1. Эксперт баз данных по умолчанию создает запрос, где RequestLive установлен в False; если вы хотите что-либо изменить, установите RequestLive в True.
2. При отношениях «один к многим», из-за правил сохранения целостности, вам дозволяется делать изменения только на форме «многих», а не на форме «один».
BTW: правильно, что вы об этом задумались. Предположим, что вы имеете отношение «один к многим», где «один» — ваши клиенты, а «многие» — их счета-фактуры: естественно, счетов, относящихся к клиенту, может быть больше, чем один. Если ваша система позволяет редактировать информацию о клиентах, например, удалять записи, то вскоре вы можете обнаружить, что некоторые счета не будут иметь отношения к кому бы то ни было.
Подскажите как правильно показать на экpане и сохранить в базе картинку формата JPEG?
Nomadicотвечает:
Я делал так (это кусок компонента):
ifPicture.Graphic isTJPegImage then
begin
bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
Picture.Graphic.SaveToStream(bs);
bs.Free;
end
else ifPicture.Graphic isTBitmap 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 elseField.Clear;
Как исключить показ поля P_RECNO?
Вы можете сделать:
1. отредактируйте TTable для исключения P_RECNO
или
2. установите
TableX.FieldbyName('P_RECNO').Visible := False;
Это можно сделать также и с помощью редактора полей (Fields Editor), который связан не с DBGrid, а напрямую с компонентом Table. Для вызова редактора щелкните правой кнопкой мыши на компоненте Table и выберите самый верхний пункт контекстного меню. Добавьте все поля в список полей и выделите то поле, которое вы не хотите показывать в DBgrid. Найдите в Инспекторе Объектов свойство Visible, и установите его в False.
//
Если у вас имеется компонент TTable, дважды щелкните на иконке компонента (расположенной на форме), и вы получите в диалоге список полей, имеющих отношение к соответствующей таблице щелкните на одном из полей и проверьте в Инспекторе Объектов свойство Visible, оно должно быть установлено в False.
Читать дальше