Автор: delphi | 14.12.2007 в 8:20 | Рубрики: Базы данных

Программист ошибается дважды: первый раз - при рождении, а второй раз - при выборе профессии.

Цель данного доклада - оценить сегодняшние проблемы и тенденции развития технологий проектирования БД, а также, хотя бы отчасти - требования завтрашнего дня. Доклад может сыграть еще одну роль: задать набор актуальных требований, которые будут служить координатами для позиционирования конкретных частных методов и инструментов проектирования БД (отчасти также - средств их использования и управления ими), которые представляются в двух специальных секциях данной конференции.
Читать полностью…

Это простейший DLL, экспортирующий единственную функцию. Вызывающий ее оператор передает функции значение ключа и строку со значением. Функция открывает демонстрационную базу данных BIOLIFE, находит по ключу запись и добавляет строку после всех записей в поле Notes:

library Mydll;

uses
DBTables;

function Modify(Key: Double; const Info: string): Boolean; export;
var
Table: TTable;
Stream: TBlobStream;
begin
Table := TTable.Create(nil);
Table.DatabaseName := ‘D:\’;
Table.TableName := ‘BIOLIFE’;
Table.TableType := ttParadox;
Table.Open;
if Table.FindKey([Key]) then
begin
Result := True;
Table.Edit;
Stream := TBlobStream.Create(TMemoField(Table.FieldByName(’Notes’)),
bmReadWrite);
Stream.Seek(0, 2);
Stream.Write(Info[1], Length(Info));
Stream.Free;
Table.Post;
end
else
Result := False;
Table.Free;
end;

exports
Modify;

begin
end.

Вот как это можно вызвать из приложения:

function Modify(Key: Double; const Info: String): Boolean; far;
external ‘MYDLL’;

// Modify(90200, ‘Васек Трубачев’);

и это классно работает.

Поскольку в DLL вы используете BDE, изучите текущие замечания относительно его использования в файле README.TXT.

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Процедура заполнения компонента TTreeView данными из TDataSet-совместимой выборки

Процедура заполнения компонента TTreeView данными из TDataSet-совместимой
выборки типа: idNode int, idParentNode int, cNodeName varchar, …

Важно: корневой узел дерева должен быть первой записью выборки.

Зависимости: Windows, SysUtils, DB, ComCtrls
Автор: Delirium, Master_BRAIN@beep.ru, ICQ:118395746, Москва
Copyright: Master BRAIN (Delirium)
Дата: 18 октября 2002 г.
***************************************************** }

procedure FillTree(Tree: TTreeView; Query: TDataSet; idNode, idParent,
cNodeName: string);
var
i: integer;
begin
// Корневой узел, должен быть первым в выборке Query
Query.First;
Tree.Items.Clear;
Tree.Items.AddObject(nil, Query.FieldByName(cNodeName).AsString,
Pointer(Query.FieldByName(idNode).asInteger));
Query.Next;
while not Query.Eof do
begin
i := 0;
while i < Tree.Items.Count do
if Tree.Items.Item[i].Data = Pointer(Query.FieldByName(idParent).asInteger)
then
begin
Tree.Items.AddChildObject(Tree.Items.Item[i],
Query.FieldByName(cNodeName).AsString,
Pointer(Query.FieldByName(idNode).asInteger));
break;
end
else
Inc(i);
Query.Next;
end;
end;
Пример использования:

FillTree(TreeView1, ADOQuery1, ‘idDoc’, ‘idParentDoc’, ‘cDocument’);

Автор: delphi | в 8:20 | Рубрики: Базы данных

Если пpогpаммист в 09.00 утpа уже на pаботе, значит он ещё на pаботе…

dbMain.StartTransaction;
try
spAddOrder.ParamByName(’ORDER_NO’).AsInteger := OrderNo;
spAddOrder.ExecProc;
for i := 0 to PartList.Count - 1 do
begin
spReduceParts.ParamByName(’PART_NO’).AsInteger := PartRec(PartList.Objects[i]).PartNo;
spReduceParts.ParamByName(’NUM_SOLD’).AsInteger := PartRec(PartList.Objects[i]).NumSold;
end;
dbMain.Commit;
except
dbMain.RollBack;
raise;
end;

Сканирование версии структуры базы данных
——————————————————————————–

Спасибо за идеи, высказанные в группах новостей и присланные по электронной почте. Я думаю, что нашел лучшее решение.

Очевидно, BDE содержит номер версии структуры, по крайней мере для файлов Paradox. (Я не могу поручиться за dBase и другие форматы.) Всякий раз при изменении структуры (например, в Database Desktop) BDE увеличивает номер версии. Следующий модуль содержит функцию, которая возвращает версию структуры базы данных:
Читать полностью…