1717
| | | Типичные вопросы [интернет] |
Вопрос: Я новичок в VFP 6.0 и меня интересуют возможности по использованию ADO и OLE объектов в Internet, как я могу воспользоваться VFP в ASP?
Вопрос: В VFP 7.0 появились две функции CursorToXML() & XMLToCursor() используя первую из них я получаю xml-файл для таблицы, однако как бы его посмотреть в IE.
Ответ: Для того, чтобы отобразить xml-файл в IE, необходимо определить формат отображения данных. Сделать это можно используя css или xls файлы. Попробуйте проделать следующее:
- открыть таблицу HOME(2)+"tastrade\data\setup.dbf"
- из окна команд выполнить: ?CursorToXML("Setup", "myXMLSetup.xml", 1, 8+48+512, 0, "myShmSetup.xsd")
- создав новый файл и записав в него следующий текст:
<?xml version="1.0"?>
<!-- File Name: myXMLSetup.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>List VFP table Setup</H2>
<xsl:for-each select="VFPData/setup">
<SPAN STYLE="font-style:italic">key_name: </SPAN>
<xsl:value-of select="key_name"/><BR />
<SPAN STYLE="font-style:italic">value: </SPAN>
<xsl:value-of select="value"/><P />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
сохранить его под названием myXMLSetup.xsl
- добавить второй строкой в файл myXMLSetup.xml строку:
<?xml-stylesheet type="text/xsl" href="myXMLSetup.xsl"?>
- наконец можно попробовать открыть файл myXMLSetup.xml из IE.
Другой способ заключается в том, чтобы написать для myXMLSetup.xml css-файл, например:
/* File Name: myXMLSetup.css */
key_name
{display:block;
margin-top:12pt;
font-size:10pt}
value
{display:block;
font-size:12pt;
font-weight:bold;
font-style:italic}
и использовать его вместо xsl показанного выше.
См. также:
- Q253732 HOWTO: Use FoxPro and MSXML to Return Information About an XML Document
- Q191758 Convert FoxPro Cursor into XML Data Format
- Q253713 Move Data From an XML Document into a FoxPro Table
в MSDN.
Нужно также иметь ввиду, что конструкция типа:
<SCRIPT LANGUAGE="JavaScript">
var doc = dsoData.XMLDocument;
...
<XML id="dsoData" src="Data.xml"></XML>
на самом деле в качестве значения переменной doc возвращает объект DOMDocument (т.е. "MSXML.DOMDocument"). Как говориться не верь глазам своим :-)
Вопрос: При попытки использовать VFP 8.0 OLEDB Provider из-под MS IIS 6.0 (OS Windows 2003 Server) получаю: System.Data.OleDb.OleDbException: No error information available: REGDB_E_CLASSNOTREG(0x80040154). Если создать обычное Windows-приложение (например на C# с доступом через System.Data.OleDb), то всё работает без вопросов. Есть ли способ борьбы с этим?
Ответ: Мне известны несколько вариантов преодоления проблемы:
1) вместо VFP 8.0 OLEDB Provider использовать VFP OLEDB Provider для версии 7.0
2) в файле machine.config в секции processmodel подменить UserName с MACHINE на SYSTEM
3) Удалите VFP 8.0 OLEDB Provider версии 8.0.0.3006, и установите именно версию 8.0.0.3117 (SP1VFP8) или выше, взяв её с
http://msdn.microsoft.com/vfoxpro/downloads/updates/default.aspx Обратите внимание, что для корректной регистрации OLE-компоненты вам нужны права именно локального администратора сервера (НЕ сетевого или контроллера домена администратора, а именно локального админа).
По моим представления, второй вариант не следует пытаться использовать из-за соображений безопасности.
Вопрос: Как программно из-под VFP скачать файл с internet-ресурса, имея его адрес?
Ответ: У VFP непосредственно такой встроенной возможности нет, однако:
- во-первых, из-под VFP можно вызывать Win32API-функции
- во-вторых, в VFP можно использовать ActiveX компоненты, специализированные под подобные действия
Относительно во-первых:
Имеется по крайней мере два набора функций: MS WinSock и MS WinInet (см. в MSDN), использование первого затруднено из-за необходимости передавать структуры через параметры (по этому поводу можно поискать struct.zip by Christof Lange в internet), тогда как второе достаточно легко, см. например: на
ftp://ftp.prolib.de/ tools/archive/internettools/ vfphttp.PRG, ftp_test.prg, ftp.PRG См. также статью MSDN - [Q174524] "HOWTO: How To Retrieve and Insert HTML Into Memo Field".
... относительно какого-нить примера с MS WinSock - ну например на
http://vfpdev.narod.ru/util_r.html - getip.zip (1,69KB) - класс для получения IP адреса по любому имени хоста, с использованием Windows Sockets 2 API
Относительно во-вторых:
от MS мне известно два компонента в этом направлении: MsWinSck.ocx, MsInet.ocx
См. примеры в MSDN Knowledge Base:
- [Q311306] HOWTO: Use Visual FoxPro to Download a Web Page from the Internet
- [Q315124] SAMPLE: Use the Winsock ActiveX Control with Visual FoxPro
См. также примеры на
http://vfpdev.narod.ru/util_r.html
- smtp.zip (20,8KB) - пример демонстрирует посылку сообщения через SMTP протокол, используя MS WinSock control.
- tcpSock.zip (12,5KB) - пример клиента и сервера с использованием MS Winsock control (MsWinSck.ocx) VFP6.0+SP3(VS6)/VFP7.0(SP1VFP7)
- srvwinsk.zip (100KB) - пример приложений клиента и сервера с использованием MS Winsock control (MsWinSck.ocx) VFP 8.0/VFP 9.0
Как дополнение, там же можно посмотреть:
- wsDmur.zip (49,5KB)