tDataSet/Delphi HTTP PHP MySQL и обратно

13 отговора 326 прегледа
#1

tDataSet/Delphi HTTP PHP MySQL и обратно

Нали знаете обратното съждение на съждението "Обичай ближния си!"?

Та на въпроса. Търсих, но не намерих нещо готово - доста е трудно за търсене, думички като ХТТП и РНР са много популярни.
Имам желание да осигуря на някой наследник на tDataSet достъп до MySQL през HTTP и PHP. Целта е tDataSet-ът да си получава данните направи от хоста.
За съжаление, предполагам, че времето ми няма да стигне и в крайна сметка ще създам някой дървен HTML документ - колкото да се вижда нещо от базата данни.
Ако някой е чоплил в тая област - моля да сподели опит.
И въобще - ще съм благодарен на всяко мение по тоя въпрос, включително и относно полезността, алтернативите и възможностите на такъв достъп.

Редактирано от NikB на

Отговор
в отговор на NikB #2

Re: tDataSet/Delphi HTTP PHP MySQL и обратно

Правиш си php скрипт който при изпълнение ти връща структуриран XML.
Можеш да връщаш SOAP, REST, XML-RPC дори JSON или каквото там.

От страна на Delphi ползваш съответните компоненти, дето да ти парснат резила.

Аз мога да ти препоръчам за XML-RPC, и компоненти за него:
[линк]

Пак ще трябва да си пълниш сам DataSet-а, но все пак, ще ти е доста по-лесно.

Кажи все пак това php какво ти връща, като структура? Или връща каквото му кажеш :)
Ако е така - може да има и други решения!

Това всичкото, ако съм разбрал правилно какво ти трябва, ако не - здраве да е.

Отговор
в отговор на NikB #3

Re: tDataSet/Delphi HTTP PHP MySQL и обратно

Нещата са безкрайно лесни, ако ползваш ADO. Ето пример:

ASP Side

<%
Set DB=Server.CreateObject ("ADODB.Connection")
DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath ("db.mdb")&";Persist Security Info=False"

Set RS=DB.Execute ("SELECT * FROM data")

Response.ContentType = "text/xml"
RS.Save Response,adPersistXML
%>

VB Side

Set rs = New ADODB.Recordset
rs.Open "[линк]", , adOpenStatic, adLockBatchOptimistic

MsgBox rs!Name

чети и дишай по-леко
Отговор
в отговор на Heh #4

Re: tDataSet/Delphi HTTP PHP MySQL и обратно

Човека иска дейтабейса на дейтасета да е ХТМЛ от някой ХТТП.

Към оригиналния постер: Ползвай ТКлайентДейтасет и си напиши ТХТТПДейтасетПровайдер = клас(ТДейтасетПровайдер) който ще се връзва към ХТТП сървъра и т.н..

Отговор
в отговор на Heh #5

PHP ще връща каквото му кажа

PHP ще връща каквото му кажа - още не е написано :)

Ще разгледам в sourceforge, благодаря.

Много ми хареса за резила :)

Отговор
в отговор на Pechenia #6

Може би преполагаш, че хостът поддържа ASP?

Доколкото разбрах, скрипта трябва да го кръстя sql.asp и да го кача на сървъра, а сървъра трявба да поддържа ASP?

И освен това - мисля през Delphi да ползвам ADO, ако я докарам до там :)

Благодаря!
:)

Отговор
в отговор на unknown #7

ОК, да го напиша, ама отсреща кой ще го обслужва?

ОК, да го напиша тоя провайдър (не че сега знам как ), ама отсреща (на сървъра) кой ще го обслужва?
Явно, трябва двете страни да се разбират.

Тоя провайдър, в едната посока, ще трябва да изпраща заявки по HTTP HTML, а в другата посока, като получи по HTTP HTML документа ще трябва да го анализира и да ми предостави данните.

Нещо такова трябва да е.

Благодаря!

Отговор
в отговор на NikB #8

Re: ОК, да го напиша, ама отсреща кой ще го обслужва?

Еми аз си мислех, че това си го измислил:) пример

client:

[линк]"table_x" ( post or get)

server: праща (уплоад) ти файл с table_x schema твой си формат пример: xml:
<table name="table_x">
<fields>
<field name="ID" PrimaryKey="True" Type="ftInteger" Size="0" intex, alabala ..../>
<field name="FirstName" Type="ftString" Size="10"/>
i t.n....
</fields>
<Mode>dsmReadWrite</Mode>
i t.n.
</table>

client: чета файла парсира и прави field definitions

client:

[линк]"100" ( post or get)

server: праща 100 записа под някаква форма: пак може в xml или даже binary stream

client: provider-a буферира 100-те записа прави ги на пакети и TClientDataSet-a си ги взима от него


и т.н. и т.н.

За клиент може да ползваш например TidHTTPClient:


THTTPProvider = class(TBaseProvider)
private
FClient:TidHTTPClient;
protected
procedure CreateDataPacket(PacketOpts: TGetRecordOptions; ProvOpts: TProviderOptions; var RecsOut: Integer; var Data: OleVariant); override;
procedure DoOnGetData(var Data: OleVariant);override;
...
end;

Не е лесна работа.
:

Отговор
в отговор на unknown #9

Мислех си, скрипта на сървъра да е прозрачен ...

Мислех си, скрипта на сървъра да е прозрачен за SQL заявките: получава стринг със завката по ХТТП - изпълнява я на MySQL и получава резултата.
Е, тогава вече ще трябва резултата да се форматира в някакъв (може би "мой") формат и да се върне на клиента, който трябва да използва провайдърът ти, за да осигури DataSet-a.

Вярно, май не е лесна работа ("май" е за благозвучие ), но си мислех, че не е толкова уникален проблем, та да го няма решен в мрежата.

Отговор
в отговор на NikB #10

Re: Мислех си, скрипта на сървъра да е прозрачен ...

Абе брато, аз нещо не разбирам. За какво ти е датасет на клиента ако ще получаваш само някакъв форматиран файл с данни в резултат на куери на сървъра? Аз си мислех че искаш да ползваш хттп-то за да се кънектнеш с датасет към него??!!?!? Ако клиента ще получава данни от сървър защо трябва да е хттп? Пак не разбирам. Обясни ми първо защо ти е хттп???!! Вкарай ме малко в сюжета:)

Отговор
в отговор на unknown #11

Ами аз така виждам нещата:

Ами аз така виждам нещата:

Цел: За обработка на данни на MySQL сървър на отдалечен хост да могат да се ползват разработени на делфи библиотеки, които работят с tDataSet.

А не е задължително да е ХТТП, но на мен това ми се струва най-естествено за един хост с ВЕБ сървър и РНР. Иначе как да се конектна към MySQL? Не мога да ползвам порт 3306 дирекно я.

Ако виждаш пропуски в моята камбанария - просвети ме :)

В интерес на истината си представях, че тая играчка само ще изпълнява заявки, но ти ме замисли, че нищо не пречи през ХТТП (1.1) да се конектне датасета към сървъра.

Отговор
в отговор на NikB #12

Re: Ами аз така виждам нещата:

Изобщо не ти е нужен никакъв HTTP. Напиши си сървър. Ползвай например TidTCPServer за база (за по лсено). Слушай на който порт ти е отворен и си направи всичко останало custom.

Отговор
в отговор на NikB #13

Re: Ами аз така виждам нещата:

Освен това ползвай Firebird, защо MySQL.??!?!? Кому е нужно дето се вика:)

Отговор
в отговор на unknown #14

На двата въпроса:

Не ме устройва нито сървър, нито файърбирд-а. Трябва технологията да може да се ползва с всеки хост, а хостове, на които можеш да си слоагаш сървъри и отваряш портове - може и да има, ама са рядкост. Същото е и с файърбирда.

А хостове с WEB, PHP, MySQL - милиони.

ПП
Впрочем, за локални цели (заради съвместимост) също може да се ползва MySQL и Zeos компоненти. Има недостатъци, сравнено с Firebird/Interbase, но е по-преносимо в всета на интернет.

Отговор