Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

База встроена в EXE   Найти похожие ветки 

 
kyn66 ©   (2006-03-31 11:30) [0]

Уважаемые коллеги! Один человек написал программу используя в качестве механизма Advantage Local Server. Если раньше базы с индексами лежали на диске, то теперь у него программа состоит из одного ЕХЕ-шника и ессно библиотек этого самого ADS. Каким образом он смог вставить базу в программу? По ресурсам видно, что имена таблиц, поля и т.д. в программе есть. Но данные где?


 
Sergey13 ©   (2006-03-31 11:45) [1]

У Advantage вроде можно работать с каким то собственным форматом баз. Может это тот случай? Пошукай среди "библиотек этого самого ADS" - может это и не библиотеки вовсе.


 
Плохиш ©   (2006-03-31 12:35) [2]


> kyn66 ©   (31.03.06 11:30)
> Если раньше базы с индексами лежали на диске, то теперь
> у него программа состоит из одного ЕХЕ-шника и ессно библиотек
> этого самого ADS.

В таком случае запусти эту программу на компьтере, где она ещё ни разу не инсталлировалась.
Если будет работать, то выкладывай её куда-нибуть. У АДС о такой возможности не написано.


 
kyn66 ©   (2006-03-31 13:12) [3]

> Плохиш
Не совсем понятен ход мысли. Что и куда выкладывать? Первое, что пришло в голову, так это распаковка на диск баз из программу в некую временную папку. После завершения работы - убрка базы с диска. Я отслеживал всякими прогами - ничего никуда не распаковывается. Т.е. базы как-бы внутри ЕХЕ-шника. Да и по ресурсам ничего конкретно не видно. Ведь если я звук вкладываю в прогу - расковыряв ресурсы, я это увижу. А тут какая-то мистика вааще. КУда деются 50 метров данных ???


 
Сергей М. ©   (2006-03-31 13:16) [4]


> базы как-бы внутри ЕХЕ-шника


Ну а что тут удивительного ?
лежат эти самые "базы" там. предположим, в кач-ве каких-то ресурсов, по необходимости грузятся в память, и СУБД-движок работает непосредственно с их образами в памяти ... При этом все выполненные изменения исчезают после завершения работы приложения ..


 
Sergey13 ©   (2006-03-31 13:22) [5]

2[3] kyn66 ©   (31.03.06 13:12)
>  КУда деются 50 метров данных ???
А размер EXE-шника какой?


 
kyn66 ©   (2006-03-31 13:45) [6]

> 13 метров


 
kyn66 ©   (2006-03-31 13:46) [7]

А чем можно отловить, что грузится в память?


 
Сергей М. ©   (2006-03-31 13:53) [8]

Для начала убедись, что приложение действительно модифицирует базу и при новом сеансе запуска работает уже с модифицированными в предыдущем сеансе данными.


 
kyn66 ©   (2006-03-31 14:29) [9]

Дело в том, что данные в этой проге не модифицируются, только отображается готовый справочный набор.


 
ANB ©   (2006-03-31 15:05) [10]


> kyn66 ©   (31.03.06 14:29) [9]
> Дело в том, что данные в этой проге не модифицируются, только
> отображается готовый справочный набор.

Эти справочники тогда при желании он вообще мог в массивы запихать.

А зачем их выковыривать ?


 
kyn66 ©   (2006-03-31 15:14) [11]

Да не нужно их выковыривать. Просто и я так хочу сделать, тока не знаю как. А насчет массивов... Мне каацца занатта будет делать массивы по 500000 записей, да несколько.... ;-)


 
Сокол ©   (2006-03-31 15:44) [12]

> kyn66 ©   (31.03.06 15:14)
Это не столь сложно, как кажется. Просто разово пишется средство генерации нужного исходного кода, которое читает данные из старой БД, оформляет их в виде паскалевского массива,или, если нужно, пишет процедуру его заполнения, чтобы нельзя было их в 16-тиричном редакторе изменить (имею в виду - выловить в ехе-шнике), после чего все это оформляется в структуру простого Дельфёвского юнита, добавляется в проект, компилируется, и, - вуаля, БД в ехе-файле программы.


 
kyn66 ©   (2006-03-31 16:03) [13]

> Сокол
И что тогда, в процессе инициализации, таблицы заполняются значениями из массивов и работаем как с обычными данными? А как с полями быть? Получается, что

 кол-во массивов = Кол-во_таблиц * кол-во_полей_в_каждой_таблице ???

Но эти массивы, хоть как-то должны быть видны в ресурсах?


 
Сокол ©   (2006-03-31 16:21) [14]

> kyn66 ©   (31.03.06 16:03)
Нет, не видны.
Объясню еще раз.
Пишешь программу, создающую обыкновенный Unit со его стандартной стр-рой, естественно.
Далее, программа создает  элемент типа record, а далее - массив элементов этого типа. Например вот так :
TMyRec = record
 Обявляешь эл-ты и их типа как нужно для одной записи в исодной БД
end;
Далее объявляешь
RexArr = array[0..Кол-во записей в таблице БД]

Далее, в прогшрамме генерации кода, вытаскивешь данные из БД и формируешь по ним код для процедуры инициализации массива в создаваемом юните.
Например так (это пишешь в программе генрации юнита):
AssignFile(F,"Unit1.pas"")
Reset(f);
 i := 0;
MyQuery.Open;
while not MyQuery.Eof do
   begin
    Writeln(f," RexArr[" + IntToStr(i)+"].Поле1 := " + """" + MyQuery.Fields[1].AsString + """";
     MyQyery.Next;
      Inc(i)
    end;

Ну и в том же духе.
Так ты полуишь файл юнита с готовым и заполненным справочником из БД


 
Сергей М. ©   (2006-03-31 16:30) [15]


> kyn66 ©   (31.03.06 16:03) [13]


Если ты расчитываешь работать с таблицами той самой БД с использованием TDataSet-интерфейса, то разумным будет использование класса TClientDataSet, и , соответственно, хранение в ресурсах твоего РЕ-модуля табличных данных в формате, генерируемом средствами метода TClientdataset.SaveToStream.

После старта приложения в этом случае следует создать объект TResourceStream, который прочитает из соотв.ресурса РЕ-модуля данные, требуемые для работы TClientDataSet, после чего ты грузишь эти данные в TClientDataSet вызовом его метода LoadFromStream().



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.037 c
15-1145905764
dyd
2006-04-24 23:09
2006.05.21
Сортировка в БД


2-1146410086
Officeman
2006-04-30 19:14
2006.05.21
Сортировать числа от "min" к "max" (или наоборот)


6-1131607305
leksaa
2005-11-10 10:21
2006.05.21
indy, proxy и авторизация


6-1138084853
ВРОМ
2006-01-24 09:40
2006.05.21
FTP-New User


2-1146656272
Ezorcist
2006-05-03 15:37
2006.05.21
Как проверить cgi- скрипт в оффлайне?