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

стр.

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

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

>unit myModalF;

>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 as TBlobField, 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 as TBlobField).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().