tDataSet/Delphi HTTP PHP MySQL и обратно
13 отговора
326 прегледа
tDataSet/Delphi HTTP PHP MySQL и обратно
Нали знаете обратното съждение на съждението "Обичай ближния си!"?
Та на въпроса. Търсих, но не намерих нещо готово - доста е трудно за търсене, думички като ХТТП и РНР са много популярни.
Имам желание да осигуря на някой наследник на tDataSet достъп до MySQL през HTTP и PHP. Целта е tDataSet-ът да си получава данните направи от хоста.
За съжаление, предполагам, че времето ми няма да стигне и в крайна сметка ще създам някой дървен HTML документ - колкото да се вижда нещо от базата данни.
Ако някой е чоплил в тая област - моля да сподели опит.
И въобще - ще съм благодарен на всяко мение по тоя въпрос, включително и относно полезността, алтернативите и възможностите на такъв достъп.
Та на въпроса. Търсих, но не намерих нещо готово - доста е трудно за търсене, думички като ХТТП и РНР са много популярни.
Имам желание да осигуря на някой наследник на tDataSet достъп до MySQL през HTTP и PHP. Целта е tDataSet-ът да си получава данните направи от хоста.
За съжаление, предполагам, че времето ми няма да стигне и в крайна сметка ще създам някой дървен HTML документ - колкото да се вижда нещо от базата данни.
Ако някой е чоплил в тая област - моля да сподели опит.
И въобще - ще съм благодарен на всяко мение по тоя въпрос, включително и относно полезността, алтернативите и възможностите на такъв достъп.
Редактирано от NikB на
Re: tDataSet/Delphi HTTP PHP MySQL и обратно
Правиш си php скрипт който при изпълнение ти връща структуриран XML.
Можеш да връщаш SOAP, REST, XML-RPC дори JSON или каквото там.
От страна на Delphi ползваш съответните компоненти, дето да ти парснат резила.
Аз мога да ти препоръчам за XML-RPC, и компоненти за него:
[линк]
Пак ще трябва да си пълниш сам DataSet-а, но все пак, ще ти е доста по-лесно.
Кажи все пак това php какво ти връща, като структура? Или връща каквото му кажеш :)
Ако е така - може да има и други решения!
Това всичкото, ако съм разбрал правилно какво ти трябва, ако не - здраве да е.
Можеш да връщаш SOAP, REST, XML-RPC дори JSON или каквото там.
От страна на Delphi ползваш съответните компоненти, дето да ти парснат резила.
Аз мога да ти препоръчам за XML-RPC, и компоненти за него:
[линк]
Пак ще трябва да си пълниш сам DataSet-а, но все пак, ще ти е доста по-лесно.
Кажи все пак това php какво ти връща, като структура? Или връща каквото му кажеш :)
Ако е така - може да има и други решения!
Това всичкото, ако съм разбрал правилно какво ти трябва, ако не - здраве да е.
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
чети и дишай по-леко
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
чети и дишай по-леко
Re: tDataSet/Delphi HTTP PHP MySQL и обратно
Човека иска дейтабейса на дейтасета да е ХТМЛ от някой ХТТП.
Към оригиналния постер: Ползвай ТКлайентДейтасет и си напиши ТХТТПДейтасетПровайдер = клас(ТДейтасетПровайдер) който ще се връзва към ХТТП сървъра и т.н..
Към оригиналния постер: Ползвай ТКлайентДейтасет и си напиши ТХТТПДейтасетПровайдер = клас(ТДейтасетПровайдер) който ще се връзва към ХТТП сървъра и т.н..
PHP ще връща каквото му кажа
PHP ще връща каквото му кажа - още не е написано :)
Ще разгледам в sourceforge, благодаря.
Много ми хареса за резила :)
Ще разгледам в sourceforge, благодаря.
Много ми хареса за резила :)
Може би преполагаш, че хостът поддържа ASP?
Доколкото разбрах, скрипта трябва да го кръстя sql.asp и да го кача на сървъра, а сървъра трявба да поддържа ASP?
И освен това - мисля през Delphi да ползвам ADO, ако я докарам до там :)
Благодаря!
:)
И освен това - мисля през Delphi да ползвам ADO, ако я докарам до там :)
Благодаря!
:)
ОК, да го напиша, ама отсреща кой ще го обслужва?
ОК, да го напиша тоя провайдър (не че сега знам как
), ама отсреща (на сървъра) кой ще го обслужва?
Явно, трябва двете страни да се разбират.
Тоя провайдър, в едната посока, ще трябва да изпраща заявки по HTTP HTML, а в другата посока, като получи по HTTP HTML документа ще трябва да го анализира и да ми предостави данните.
Нещо такова трябва да е.
Благодаря!
Явно, трябва двете страни да се разбират.
Тоя провайдър, в едната посока, ще трябва да изпраща заявки по HTTP HTML, а в другата посока, като получи по HTTP HTML документа ще трябва да го анализира и да ми предостави данните.
Нещо такова трябва да е.
Благодаря!
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;
Не е лесна работа.
:
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;
Не е лесна работа.
:
Мислех си, скрипта на сървъра да е прозрачен ...
Мислех си, скрипта на сървъра да е прозрачен за SQL заявките: получава стринг със завката по ХТТП - изпълнява я на MySQL и получава резултата.
Е, тогава вече ще трябва резултата да се форматира в някакъв (може би "мой") формат и да се върне на клиента, който трябва да използва провайдърът ти, за да осигури DataSet-a.
Вярно, май не е лесна работа ("май" е за благозвучие
), но си мислех, че не е толкова уникален проблем, та да го няма решен в мрежата.
Е, тогава вече ще трябва резултата да се форматира в някакъв (може би "мой") формат и да се върне на клиента, който трябва да използва провайдърът ти, за да осигури DataSet-a.
Вярно, май не е лесна работа ("май" е за благозвучие
Re: Мислех си, скрипта на сървъра да е прозрачен ...
Абе брато, аз нещо не разбирам. За какво ти е датасет на клиента ако ще получаваш само някакъв форматиран файл с данни в резултат на куери на сървъра? Аз си мислех че искаш да ползваш хттп-то за да се кънектнеш с датасет към него??!!?!? Ако клиента ще получава данни от сървър защо трябва да е хттп? Пак не разбирам. Обясни ми първо защо ти е хттп???!! Вкарай ме малко в сюжета:)
Ами аз така виждам нещата:
Ами аз така виждам нещата:
Цел: За обработка на данни на MySQL сървър на отдалечен хост да могат да се ползват разработени на делфи библиотеки, които работят с tDataSet.
А не е задължително да е ХТТП, но на мен това ми се струва най-естествено за един хост с ВЕБ сървър и РНР. Иначе как да се конектна към MySQL? Не мога да ползвам порт 3306 дирекно я.
Ако виждаш пропуски в моята камбанария - просвети ме :)
В интерес на истината си представях, че тая играчка само ще изпълнява заявки, но ти ме замисли, че нищо не пречи през ХТТП (1.1) да се конектне датасета към сървъра.
Цел: За обработка на данни на MySQL сървър на отдалечен хост да могат да се ползват разработени на делфи библиотеки, които работят с tDataSet.
А не е задължително да е ХТТП, но на мен това ми се струва най-естествено за един хост с ВЕБ сървър и РНР. Иначе как да се конектна към MySQL? Не мога да ползвам порт 3306 дирекно я.
Ако виждаш пропуски в моята камбанария - просвети ме :)
В интерес на истината си представях, че тая играчка само ще изпълнява заявки, но ти ме замисли, че нищо не пречи през ХТТП (1.1) да се конектне датасета към сървъра.
Re: Ами аз така виждам нещата:
Изобщо не ти е нужен никакъв HTTP. Напиши си сървър. Ползвай например TidTCPServer за база (за по лсено). Слушай на който порт ти е отворен и си направи всичко останало custom.
Re: Ами аз така виждам нещата:
Освен това ползвай Firebird, защо MySQL.??!?!? Кому е нужно дето се вика:)
На двата въпроса:
Не ме устройва нито сървър, нито файърбирд-а. Трябва технологията да може да се ползва с всеки хост, а хостове, на които можеш да си слоагаш сървъри и отваряш портове - може и да има, ама са рядкост. Същото е и с файърбирда.
А хостове с WEB, PHP, MySQL - милиони.
ПП
Впрочем, за локални цели (заради съвместимост) също може да се ползва MySQL и Zeos компоненти. Има недостатъци, сравнено с Firebird/Interbase, но е по-преносимо в всета на интернет.
А хостове с WEB, PHP, MySQL - милиони.
ПП
Впрочем, за локални цели (заради съвместимост) също може да се ползва MySQL и Zeos компоненти. Има недостатъци, сравнено с Firebird/Interbase, но е по-преносимо в всета на интернет.