Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

База встроена в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1146647246
tigra
2006-05-03 13:07
2006.05.21
Удалить файлы с одним расширением


15-1146044448
Rule
2006-04-26 13:40
2006.05.21
Компания Borland приглашает 11 мая на семинар в Киеве


2-1146655809
VitV
2006-05-03 15:30
2006.05.21
Не знаю как назвать...


15-1145616875
Deka
2006-04-21 14:54
2006.05.21
IDE Delphi перестала тормозить!


2-1146828806
rol
2006-05-05 15:33
2006.05.21
Отчеты на Delphi 7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский