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

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Помещение переменной в 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;

Memos.Add(yourvariable_0);

Memos.Add(yourvariable_1);

……………………

Memos.Add(yourvariable_n);

Table1Memo.Assign(Memos);

Memos.Free;

Индикатор прогресса выполнения запроса

Delphi 1

Невозможно.

Идея заключалась в том, чтобы с помощью объекта TQuery выполнять запросы, SQL сервер их в фоне обрабатывал бы, а мы смотрели бы на это дело на локальной машине с помощью линейки прогресса. Но из приложения никоим образом нельзя узнать, что делает TQuery, так что линейка прогресса, по идее, должна была бы получать текущую позицию непосредственно с SQL сервера. Но, поскольку большинство SQL серверов не публикуют такой информации, эту идею можно торжественно схоронить…

Если вы используете Paradox или DBase, то, я думаю, для этой цели вы можете воспользоваться функцией DBIRegisterCallback:

Использование:

Обратные вызовы (Callbacks) используются в случае, когда клиентскому приложению необходимо получить (возвратить) информацию о ходе выполнения операции. Функция DBIRegisterCallback позволяет клиенту зарегистрировать обратную связь с BDE, после чего BDE может извещать клиента о наступлении событий.

Из руководства пользователя DBE

Лично я никогда этим не пользовался, поэтому на смогу поделиться деталями.

Обновление данных БД из модальной формы

Delphi 1

Возможно следующий код позволит вам использовать ту же самую таблицу и источник данных в модальной форме, что и в вашей главной форме. Попробуйте изменить код модальной формы следующим образом:

unitmyModalF;

interface

{…}

implementation

{…}

uses

MainForm; {Имя файла родительской формы для вашей модальной формы}

MyModalForm.OnCreate(Sender: TObject);

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')

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

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x