Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
В таблицах dBASE записи не удаляются до тех пор, пока таблица не будет упакована. Пока же это не произойдет, удаленные записи остаются в таблице, только имеют при этом флажок "к удалению". Для того, чтобы показать эти существующие, но не отображаемые записи, существует функция ShowDeleted(), которая использует функцию BDE API DbiSetProp(), показывающая записи, помеченные к удалению. При использовании этой функции нет необходимости закрывать и вновь открывать таблицу. ShowDeleted() в качестве параметров передается TTable и логическое значение. Логический параметр указывает на необходимость показа удаленных записей.
Демонстрационный проект:
unitUnit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB, DBTables;
type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
CheckBox1: TCheckBox;
procedureCheckBox1Click(Sender: TObject);
public
procedureShowDeleted(Table: TTable; ShowDeleted: Boolean);
end;
var
Form1: TForm1;
implementation
usesDBITYPES, DBIERRS, DBIPROCS;
{$R *.DFM}
procedureTForm1.ShowDeleted(Table: TTable; ShowDeleted: Boolean);
var
rslt: DBIResult;
szErrMsg: DBIMSG;
begin
Table.DisableControls;
try
Check(DbiSetProp(hDBIObj(Table.Handle), curSOFTDELETEON, LongInt(ShowDeleted)));
finally
Table.EnableControls;
end;
Table.Refresh;
end;
procedureTForm1.CheckBox1Click(Sender: TObject);
begin
ShowDeleted(Table1, CheckBox1.Checked);
end;
end.
Пароль на dBASE-файлы
Delphi 1
dBase-файлы не поддерживают пароли. Естественно, вы можете создать свои собственные методы поддержки паролей. Но это будет работать только с вашими приложениями. Боюсь, что при наличии тысяч читателей/конверторов dBase, этот способ не годится.
Показ меток 'удаленных' записей в dBASE-файлах
Delphi 1
Для начала вы должны включить SoftDeletes, после чего вы сможете просматривать записи, помеченные к удалению. В противном случае, вы их не увидите. По умолчанию, для файлов DBF, SoftDeletes установлен в False. Вот логика работы:
procedureTForm1.Button1Click(Sender: TObject);
var
B: BOOL;
W: Word;
begin
Check(DbiSetProp(hDBIObj(Table1.Handle), curSOFTDELETEON, longint(True)));
{ Проверяем, что это работает }
Check(DbiGetProp(hDBIObj(Table1.Handle), curSOFTDELETEON, @B, sizeof(B), W));
ifB = False then Label2.Caption := 'Не помечена'
elseLabel2.Caption := 'Помечена';
end;
Когда указатель на запись указывает на запись, которую вы хотите удалить, используйте следующую логику:
Table1.UpdateCursorPos;
Check(DbiUndeleteRecord(Table1.Handle));
Метод UpdateCursorPos устанавливает основной курсор BDE на позицию курсора текущей записи, который существуют только для того, чтобы все работало правильно. Вам нужно только вызвать этот метод прямым вызовом одной из BDE API функций (такой как, например, DbiUndeleteRecord).
Ну и, наконец, чтобы все работало, поместите модули DBIPROCS и DBITYPES с список USES.
DB2
Как заставить работать DB2 через протокол IPX?
Nomadicотвечает:
Связь Win-клиента c DB2 в сети Netware
Hастройка доступа к DB2
Возможны два варианта доступа:
• через сервер NETWARE;
• прямая адресация.
Замечание: Проверялся доступ через сервера NW 3.11 и 3.12. Для 4.х нужно еще разобраться.
1.1.1. DB2 Сервер
• должна быть установлена OS/2 Warp или OS/2 Warp Connect;
• включена поддержка NETWARE;
• в CONFIG.SYS в переменную среды DB2COMM добавить (через запятую) IPXSPX и перезагрузить систему;
• создать командный файл DBIPXSET.CMD следующего вида:
db2 update dbm cfg using fileserver objectname dbserver
где – – имя сервера;
• выполнить командный файл DBIPXSET.CMD;
• перестартовать сервер базы данных;
• создать командный файл DBIPXREG.CMD следующего вида:
db2 register nwbindery user
где – – имя пользователя, обладающего правами администратора на сервере ;
• выполнить командный файл DBIPXREG.CMD;
• ответить на запрос пароля.
1.1.2. WINDOWS-клиент
• установить WINDOWS 3.1 или WfWG 3.11;
• установить клиента NETWARE от версии 4.х;
• при установке влючить поддержку WINDOWS;
• установить клиента DB2 для WINDOWS;
• используя программу Client Setup описать новый узел – сервер базы данных:
Name – <���любое имя>
Protocol – IPX/SPX
File server –
Object name – dbserver
• описать базу данных и разрешить доступ к ней через ODBC.
1.2.1. DB2 Сервер
• см. п 1.1.1;
• найти в директории x:\sqllib\misc программу DB2IPXAD.EXE и выполнить ее;
• записать полученный адрес;
1.2.2. WINDOWS-клиент
• см. п. 1.1.2. (первые три шага);
• используя программу Client Setup описать новый узел – сервер базы данных:
Name – <���любое имя>
Protocol – IPX/SPX
File server – *
Object name – <���адрес полученный от DB2IPXAD.EXE>
• описать базу данных и разрешить доступ к ней через ODBC.
Почему DB2 ругается на Create Trigger?
Nomadicотвечает:
Я тут писал по поводу того, что у меня не работали триггеры. Все дело оказалось в правиле написания команды « create trigger». Если все остальные команды корректно воспpинимаются на любом регистре, то эта – только набранная одними большими буквами.
Модули данных
Модуль данных для каждого MDIChild
Delphi 2
Когда во время разработки вы устанавливаете "DataSource"-свойство в БД-компонентах для указания на модуль данных, VCL во время выполнения приложения будет пытаться создать связь с существующим TDataModule, основываясь на его свойтсве Name. Так, если вы добавите модуль данных к вашему проекту и переместите его в свойстве проекта из колонки автоматически создаваемых форм в колонку доступных, вы сможете разработать форму, содержащую элементы управления для работы с базами данных, после чего несколькими строчками кода можете создать экземпляр формы, имеющий экземпляр собственного модуля данных.
С помощью Репозитория создайте "standard MDI application" (стандартное MDI-приложение), в котором модуль TMDICHild будет похож на приведенный ниже. Добавленные строки имеют комментарий {!}. Хитрости спрятаны в конструкторе create и задании другого порядка следования операторов.
unitChildwin;
interface
usesWindows, Classes, Graphics, Forms, Controls,ExtCtrls, DBCtrls, StdCtrls, Mask, Grids, DBGrids,DataM; {!} // Модуль TDataModule1
type
TMDIChild = class(TForm)
Интервал:
Закладка: