Автор: EGORR_TOO
Дата сообщения: 10.01.2007 09:04
Всем доброго времени!
Прошу помощи. Никак не могу найти ошибку. Все что можно перебрал, ничего не получается. Должно работать, но не работает!
На этом жалобно скулить кончаю, перехожу к сути.
Сделал я презентацию товара(любого) на CD.
По роду своей работы я иногда получаю каталоги производителей на CD. Глянешь на подобные "перлы", и накатывает скупая мужская слеза. А поскольку мне тоже приходится предлагать товар, то я в AutoPlay Media Studio сделал презентацию. Но скоро пришлось что-то добавлять, что-то убавлять и все это требовало некоторых усилий и траты рабочего и личного времени. Да и справиться с редактированием презентации мог только человек знакомый с AMS. Так возникла идея сделать презентацию, набить информацией которую смог бы любой человек, даже едва знакомый с компьютером.
Презентация имеет две части: представительскую и административную. Вход в админку скрыт от конечного пользователя. Пользователь, который готовит презентацию к нарезке на CD знает, что переход в административную часть осуществляется щелчком по правому нижнему углу окна презентации. В админке предлагается заполнить базу данных сведениями о компании: название, адрес, эл. почта, сайт, информация о деятельности компании( О нас), информация о представляемом каталоге.
Далее забивается информация о продукции/товаре фирмы: категория продукции, производитель, название/наименование, описание, фотография, цена, общий прайс. Чтобы потенциальный покупатель, пользователь этого каталога не был введен в заблуждение устарелыми ценами, имеется возможность ограничить срок показа цены на каждое изделие и кнопки открытия общего прайса. Общий прайс невозможно просмотреть, найдя его в директории программы: он находится в запароленном зипе, и пароль неизвестен даже тому, кто заполняет базу данных.
При просмотре каталога пользователь может делать закладки на заинтересовавшие его образцы продукции.
Для этого создается в Temp папка bookmarks с вспомогательной БД Bookmarks.bd. В Bookmarks.bd пишется название, категории, текст описания, путь картинки, и т. д.
По нажатию на кнопку "Закладки" файл HTML-шаблона копируется X:\Temp\bookmarks, переименовывается в bookmarks.htm(в директории программы он хранится с другим именем и расширением, чтобы любопытные не лезли...). В эту же папку копируются файлы с картинками, обеспечивая тем самым короткий путь к ним (например <img src="TST45ACC_250.jpg">).
Якоря <!--~TABLE~--><!--~ADRESS~--><!--~COMPANY~--> в HTML коде X:\Temp\bookmarks\bookmarks.htm заменяются данными из вспомогательной базы данных Bookmarks.bd. Пользователь видит веб-страницу со своими закладками.
И вот здесь прокол!!! Все так и работает с жесткого диска. Но стоит нарезать презентацию на CD, как <!--~TABLE~--><!--~ADRESS~--><!--~COMPANY~--> перестают заменяться текстом из программы. Почему?! Я сколь не думал, понять не смог.
Вот код на WinButton на On Click.
[more=Смотреть код..]
Код:
tbBM = SQLite.QueryToTable(db01,"SELECT * FROM Bookmarks");
err = Application.GetLastError();
if err ~= SQLite.OK then
Debug.Print( "Ошибка: " .. SQLite.GetErrorString(err) );
end
Count = tbBM.Rows;
if Count == 0 then
Dialog.Message("Ошибка!", "Нет закладок для отчета... \n\r", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
else
BookmarksExist = File.DoesExist(_TempFolder.."\\bookmarks\\bookmarks.htm");
if BookmarksExist == true then
File.Delete(_TempFolder.."\\bookmarks\\bookmarks.htm", false, false, false, nil);
end
File.Copy(_SourceFolder.."\\AutoPlay\\Docs\\h~k2RohK25kd.fhr", _TempFolder.."\\bookmarks", true, true, false, true, nil);
File.Rename(_TempFolder.."\\bookmarks\\h~k2RohK25kd.fhr", _TempFolder.."\\bookmarks\\bookmarks.htm");
---------------------------------------------------------------------------------------------
function SQLiteToHTML(db, RS, sFileOut)
local n;
local strFile;
local strHTML;
db01=SQLite.Open(_TempFolder.."\\bookmarks\\Bookmarks.db");
-- Формулируем запрос
sOborQuery = "Select * from Bookmarks";
-- Получаем из таблицы Bookmarks все данные
tQuery = SQLite.QueryToTable(db01,sOborQuery);
-- если запрос вернул данные...
if tQuery and tQuery.Rows < 0 then
Dialog.Message("Ошибка", "Нет закладок", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
else
-- ...обходим таблицу с этими данными...
for nRow = 1, tQuery.Rows do
tQuery.Data[nRow]["BMOpisanie"] = String.Replace(tQuery.Data[nRow]["BMOpisanie"] , "o", "<br>o", false);
tQuery.Data[nRow]["BMOpisanie"] = String.Replace(tQuery.Data[nRow]["BMOpisanie"] , ".", ".<br>", false);
File.Copy(tQuery.Data[nRow]["BMImagePatch"], _WindowsFolder.."\\bookmarks", true, true, false, true, nil);
strHTML = "<table\"\cellpadding=\"5\">";
for nRow = 1, tQuery.Rows do
--Раскладываем путь на составляющие...
tPatchElements = String.SplitPath(tQuery.Data[nRow]["BMImagePatch"]);
--кладем в таблицу имя файла и расширение файла
PictureName = {Filename =tPatchElements.Filename, Extension=tPatchElements.Extension};
--Сливаем воедино имя файла и расширение файла
stPicture = String.MakePath(PictureName);
strHTML=strHTML.."<tr><td><p>"..tQuery.Data[nRow]["BMName"].."</p>".."<hr size=\"1\"></td></tr><tr><td id=\"gfr\">Категория оборудования: <b>"..tQuery.Data[nRow]["BMCategory"].."</b><br> Производитель: <b>"..tQuery.Data[nRow]["BMMade_in"].."</b><hr size=\"1\"></td></tr><tr><td><img src=\""..stPicture.. "\" alt=\""..tQuery.Data[nRow]["BMName"].."\">"..tQuery.Data[nRow]["BMOpisanie"].. "<hr size=\"1\"></td></tr><tr><td id=\"gfr\">Цена: <b>"..tQuery.Data[nRow]["BMPrice"].."</b><hr size=\"7\"></td></tr>";
-----------------------------------------------------------------------------------------------------------
tInfoService = SQLite.QueryToTable(db,"SELECT * FROM service ");
nLastError = Application.GetLastError();
if nLastError ~= SQLite.OK then
Dialog.Message("Error", SQLite.GetLastErrorString());
end
if nLastError == SQLite.OK then
-- ...обходим таблицу
for nRow = 1,tInfoService.Rows do
CompanyName = tInfoService.Data[nRow]["CompanyName"];
Address = tInfoService.Data[nRow]["Address"];
Email = tInfoService.Data[nRow]["Email"];
WebSite = tInfoService.Data[nRow]["WebSite"];
strHTML01 = "<b>"..CompanyName.."</b><br>"..Address.."<br>"..Email..", "..WebSite;
strHTML02 = CompanyName;
end
end
-----------------------------------------------------------------------------------------------------------
end
end
end
sFileOut = _TempFolder.."\\bookmarks\\bookmarks.htm";
local tblQ = SQLite.QueryToTable(db01, sOborQuery );
tableCount = Table.Count(tQuery);
--читаем код страницы bookmarks.htm
strFile = TextFile.ReadToString(_WindowsFolder.."\\bookmarks\\bookmarks.htm");
--последовательно заменяем якоря на сдержимое переменных strHTML, strHTML01,strHTML02
strFile00 = String.Replace(strFile, "<!--~TABLE~-->", strHTML, false);
strFile01 = String.Replace(strFile00, "<!--~ADRESS~-->", strHTML01, false);
strFile02 = String.Replace(strFile01, "<!--~COMPANY~-->", strHTML02, false);
--пишем измененный текст в bookmarks.htm
TextFile.WriteFromString(sFileOut, strFile02, false);
end
SQLiteToHTML(db, RS, sFileOut);
File.Open(_TempFolder.."\\bookmarks\\bookmarks.htm", "", SW_MAXIMIZE);
end