Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Здесь есть возможность читать онлайн «Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Советы по Delphi. Версия 1.4.3 от 1.1.2001: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Советы по Delphi. Версия 1.4.3 от 1.1.2001»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Советы по Delphi. Версия 1.4.3 от 1.1.2001», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

begin

DBGrid1.DataSource := MyMainForm.DataSource1;

end;

Как записать в BLOB-поле большой текст (>255 байт) из Delphi?

Nomadicотвечает:

Можно так –

var

S: TBlobStream;

B: pointer;

c: integer;

Table1.Edit;

S := TBlobStream.Create(Table1BlobField asTBlobField, bmWrite); {кажется, так}

C := S.Write(B, C);

Table1.Post;

S.Destroy;

или так –

var

S: TMemoryStream;

B: pointer;

C: integer;

S := TMemoryStream.Create;

Table1.Edit;

S.Clear;

S.SetSize(C);

C := S.Write(B,C);

(Table1BlobField asTBlobField).LoadFromStream(S);

S.Clear;

Table1.Post;

S.Destroy;

Блокировка таблицы

…когда вы получаете эту, или аналогичную ошибку, вы можете прервать процесс следующим образом (в предположении, что вы пытаетесь запостить запись):

try

Table1.Post;

except

MessageDlg ('Ошибка постинга записи' , прочее…

Table1.Cancel;

end;

В противном случае вы не получите ошибку в случае, если текущую запись «рассматривает» другой пользователь (если вы пользуетесь базой данных Paradox, поставляемой с Delphi), если, конечно, вы правильно это установили. Paradox сам создает в сетевом каталоге файл с именем pdxusers.lck, видимый всеми пользователями, так что каждый BDE на каждой локальной машине может запирать запись, таким образом запрещая другим пользователям постить запись до снятия блокировки. Я не знаю, каким образом вы получаете эту ошибку, поэтому существует вероятность того, что я ошибаюсь в своих предположениях.

Каким драйвером пользуется TDATABASE?

Delphi 1

Вы можете использовать вызов IDAPI dbiGetDatabaseDesc. Вот быстрая справка (не забудьте добавить DB в список используемых модулей):

var

pDatabase: DBDrsc:

begin

{ pAlias – PChar, содержащий имя псевдонима}

dbiGetDatabaseDesc(pAlias, @pDatabase);

Для получения дополнительной информации обратитесь к описанию свойства pDatabase.szDbType.

Как создать новый запрос и скопировать туда точно такие же описания полей?

Nomadicотвечает:

Копируешь FieldDefs.

Проходишь циклом по FieldDefs.Items[i].CreateField(Owner);

Запись потока в BLOB-поле

Delphi 1

Вся хитрость заключается в использовании StrPcopy (помещения вашей строки в PChar) и записи буфера в поток. Вы не сможете передать это в PChar непосредственно, поскольку ему нужен буфер, поэтому для получения необходимого размера буфера используйте [0] и StrLen().

Вот пример использования TMemoryStream и записи его в Blob-поле:

var

cString: String;

oMemory: TMemoryStream;

Buffer: PChar;

begin

cString := 'Ну, допустим, хочу эту строку!';

{ СОздаем новый поток памяти }

oMemory := TMemoryStream.Create;

{!! Копируем строку в PChar }

StrPCopy(Buffer, cString);

{ Пишем =буфер= и его размер в поток }

oMemory.Write(Buffer[0], StrLen(Buffer));

{Записываем это в поле}

.LoadFromStream(oMemory);

{ Необходимо освободить ресурсы}

oMemory.Free;

end;

Как я могу выбрать на клиента только часть данных с определенной позиции из набора данных на сервере?

Nomadicотвечает:

Наиболее приемлемым является использование TQueryи Provider.SetParams.

Но также Вы можете сделать это иначе:

Сперва на клиенте Вам нужно считать с сервера только метаданные для набора данных. Это можно сделать, установив PacketRecords в 0, и затем вызвав Open. Затем Вы должны вызвать метод сервера (Вы должны определить этот метод на сервере), который спозиционирует курсор на первую нужную запись. И, наконец, установите PacketRecords в нужное значение, большее нуля, и вызовите GetNextPacket.

Отследить изменение данных?

Предположим, что пользователь изменил строковое поле в Null. Как тогда я в обработчике OnUpdateData смогу определить, изменилось ли это поле на строку Null, или поле просто не было изменено?

Nomadicотвечает:

Используйте свойство NewValue класса TField при чтении второй записи (той, которая содержит изменения). Если возвращаемое значение (variant) пусто или не назначено, тогда поле не было модифицировано. Здесь немного иллюстрирующего кода:

varNewVal: Variant;

begin

NewVal := DataSet.FieldByName('MyStrField').NewValue;

ifVarIsEmpty(NewVal) thenShowMessage('Field was not edited')

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Представляем Вашему вниманию похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Обсуждение, отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x