koneksi aplikasi desktop dgn domain web (remote database)

Database dan Structured Query Language

koneksi aplikasi desktop dgn domain web (remote database)

Postby blossomx » 01 Aug 2010, 03:01

Bisa kasih tahu gimana caranya agar bisa mengkoneksikan aplikasi desktop yang sdg saya buat dan bisa terkoneksi dengan domain web (remote database)

database web yg digunakan Mysql..

Terimakasih..
blossomx
Junior Member
 
Posts: 5
Joined: 01 Aug 2010, 02:41

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby genik » 01 Aug 2010, 08:27

Coba jawab:
Saya pernah punya ide yang sama seperti anda, untuk mengkoneksikan aplikasi desktop di tempat kerja saya dengan web yang dimiliki oleh kantor, tujuannya agar Kantor pusat dapat mengetahui hasil penjualan harian yang telah diupload dari masing-masing kantor cabang ke web. Pada aplikasi desktop, saya langsung koneksikan ke Database MySQL di webserver dengan username dan password yang telah dimiliki untuk akses ke webserver, ternyata hasilnya tidak terkoneksi dengan warning : "cannot access port 3306". Setelah konfirmasi ke web hosting nya, ternyata Port 3306 nya di blok, dan kami meminta untuk membuka port 3306, ternyata tidak diijinkan dengan alasan keamanan. Kantor saya dulu hostingnya di masterweb, saya kurang tau juga untuk tempat hosting lain apakah ada yang bisa dibuka port 3306-nya.

Semoga membantu.
~genik~
User avatar
genik
Member
 
Posts: 55
Joined: 06 May 2010, 20:25

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby LuriDarmawan » 01 Aug 2010, 08:43

seperti yg sudah-sudah
jika untuk kebutuhan remote, sebaiknya jangan remote
lhoo ?

ya itu tadi... masalah keamanan akan sangat nggegirisi

kalo portal kampung sdah ditutup, ya ga pa pa, lewat kampung sebelah saja.

coba gunakan tunneling, atau gunakan services
manfaatin pintu2 yang memang sudah terbuka

cmiiw
LuriDarmawan
Member
 
Posts: 75
Joined: 06 May 2010, 11:56

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby Mujie » 01 Aug 2010, 09:44

Walaupun belum pernah sama sekali mengimplementasikan, remote port database secara direct memang cukup riskan. Akan tetapi, sepertinya XML (XML-RPC dst.) sepertinya bisa menjadi alternatif ( belom pernah coba :D ). Alasannya, pascal IDE (Delphi, Lazarus) mendukung XML, php mendukung XML, dan saya pernah liat/baca (duh lupa alamatnya) sebuah aplikasi blog poster berbasis desktop yang menggunakan protokol XML-RPC nya Wordpress. Jadi tidak perlu buka blog, langsung posting dari desktop. Ada tambahan ?
User avatar
Mujie
Member
 
Posts: 52
Joined: 27 Jul 2010, 15:50

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby kemzoft » 02 Nov 2010, 15:04

Permisi mau numpang Jawab...

Yang harus anda lakukan adalah :
1. Membuat program untuk membuat file berisikan database (delphi).
2. Membuat program untuk mengirimkan data ke hosting (delphi).
3. Membuat program untuk menerima file yang berisi database tersebut (PHP).
4. Membuat program untuk mengeksekusi file yang berisi database tersebut supaya datanya bisa terambil ke database server (PHP).

Kita coba uraikan :

1. Membuat program untuk membuat file berisikan database (delphi)
Cara membuatnya cukup sederhana kita tinggal membuat procedure untuk membuat file yg berisikan data yang akan dikirimkan. Untuk lebih jelasnya saya kasih codingnya :
Code: Select all
  1. procedure GetFile(aQuery1, aQuery2: TZQuery; aTable: String);

  2.   function CariTypeData(aQuery: TZQuery): String;

  3.   var

  4.     aField: String;

  5.   begin

  6.     aField := '';

  7.     with aQuery do

  8.     begin

  9.       Close;

  10.       SQL.Clear;

  11.       SQL.Add('show fields from `' + aTable + '`');

  12.       Open;

  13.     end;

  14.     if aQuery.RecordCount > 0 then

  15.     begin

  16.       aQuery.First;

  17.       while not aQuery.Eof do

  18.       begin

  19.         if aQuery.Fields[1].AsString = 'date' then

  20.         begin

  21.           aField := aQuery.Fields[0].AsString;

  22.           Break;

  23.         end;

  24.         aQuery.Next;

  25.       end;

  26.     end

  27.     else

  28.       aField := '';

  29.  

  30.     Result := aField;

  31.   end;

  32. var

  33.   aSQL: String;

  34.   aStringList: TStringList;

  35.   i: Integer;

  36. begin

  37.   aStringList := TStringList.Create;

  38.  

  39.   with aQuery1do

  40.   begin

  41.     Close;

  42.     SQL.Clear;

  43.     if CariTypeData(aQuery2) <> '' then

  44.     begin

  45.       SQL.Add('select * from `' + aTable + '` where ' + CariTypeData(aQuery2) + ' = :tgl');

  46.       Params&#91;0&#93;.AsDate := Now;

  47.     end

  48.     else

  49.       SQL.Add('select * from `' + aTable + '`');

  50.     Open;

  51.   end;

  52.   aQuery1.First;

  53.   while not aQuery1.Eof do

  54.   begin

  55.     with aQuery2 do

  56.     begin

  57.       Close;

  58.       SQL.Clear;

  59.       SQL.Add('show fields from `' + aTable + '`');

  60.       Open;

  61.     end;

  62.     aSQL := '';

  63.     for i := 0 to aQuery2.RecordCount - 1 do

  64.     begin

  65.       if i = 0 then

  66.         aSQL := '"' + aQuery1.Fields&#91;i&#93;.AsString + '", '

  67.       else

  68.       if i = aQuery2.RecordCount - 1 then

  69.         aSQL := aSQL + '"' + aQuery1.Fields&#91;i&#93;.AsString + '"'

  70.       else

  71.         aSQL := aSQL + '"' + aQuery1.Fields&#91;i&#93;.AsString + '", ';

  72.     end;

  73.     aStringList.Add('REPLACE INTO `' + aTable + '` VALUES(' + aSQL + ');');

  74.     aQuery1.Next;

  75.   end;

  76.   if FileExists(ExtractFilePath(Application.ExeName) + FormatDateTime('yyyymmdd', Now)) = False then

  77.     CreateDir(ExtractFilePath(Application.ExeName) + FormatDateTime('yyyymmdd', Now));

  78.   aStringList.SaveToFile(ExtractFilePath(Application.ExeName) + FormatDateTime('yyyymmdd', Now) + '\' + aTable + '.SQL');

  79. end;


Cara Memanggilnya :
GetFile(Query1, Query2, table);
Catatan:
Query1, Query2 : Komponent Zeos yaitu TZQuery, komponen ini bisa diganti dengan komponen Query lainnya dengan syarat pada deklarasi procedure diganti juga sesuia dengan komponen yang digunakan.
table : Nama table yang akan dibuka.

2. Membuat program untuk mengirimkan data ke hosting (delphi)
Yang ini juga lumayan agak membuat rumit. Untuk lebih jelasnya saya kasih codingnya :
Code: Select all
  1. procedure UploadFilesHttpPost(const wb:TWebBrowser; const URLstring: string; names, values, nFiles, vFiles: array of string) ;

  2. var

  3.   strData, n, v, boundary: string;

  4.   URL: OleVariant;

  5.   Flags: OleVariant;

  6.   PostData: OleVariant;

  7.   Headers: OleVariant;

  8.   idx: Integer;

  9.  

  10.   ms: TMemoryStream;

  11.   ss: TStringStream;

  12. begin

  13.   if Length(names) <> Length(values) then

  14.     raise Exception.Create('UploadFilesHttpPost: Names and Values must have the same length.') ;

  15.   if Length(nFiles) <> Length(vFiles) then

  16.     raise Exception.Create('UploadFilesHttpPost: FileNames and FileValues must have the same length.') ;

  17.  

  18.   URL := 'about:blank';

  19.   Flags := NavNoHistory or NavNoReadFromCache or NavNoWriteToCache or NavAllowAutosearch;

  20.   wb.Navigate2(URL, Flags) ;

  21.   while wb.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;

  22.  

  23.   // Data acak.

  24.   boundary := '---------------------------123456789';

  25.  

  26.   strData := '';

  27.   for idx := Low(names) to High(names) do

  28.   begin

  29.     n := names&#91;idx&#93;;

  30.     v := values&#91;idx&#93;;

  31.  

  32.     strData := strData + '--' + boundary + #13#10 + 'Content-Disposition: form-data; name="' + n + '"' + #13#10#13#10 + v + #13#10;

  33.   end;

  34.  

  35.   for idx := Low(nFiles) to High(nFiles) do

  36.   begin

  37.     n := nFiles&#91;idx&#93;;

  38.     v := vFiles&#91;idx&#93;;

  39.  

  40.     strData := strData + '--' + boundary + #13#10 + 'Content-Disposition: form-data; name="' + n + '"; filename="' + v + '"' + #13#10;

  41.  

  42.     if v = '' then

  43.     begin

  44.       strData := strData + 'Content-Transfer-Encoding: binary'+#13#10#13#10;

  45.     end

  46.     else

  47.     begin

  48.       if (CompareText(ExtractFileExt(v), '.JPG') = 0) or (CompareText(ExtractFileExt(v), '.JPEG') = 0) then

  49.       begin

  50.         strData := strData + 'Content-Type: image/pjpeg'+#13#10#13#10;

  51.       end

  52.       else if (CompareText(ExtractFileExt(v), '.PNG') = 0) then

  53.       begin

  54.         strData := strData + 'Content-Type: image/x-png'+#13#10#13#10;

  55.       end

  56.       else if (CompareText(ExtractFileExt(v), '.PDF') = 0) then

  57.       begin

  58.         strData := strData + 'Content-Type: application/pdf'+#13#10#13#10;

  59.       end

  60.       else if (CompareText(ExtractFileExt(v), '.HTML') = 0) then

  61.       begin

  62.       end;

  63.  

  64.       strData := strData + 'Content-Type: text/html'+#13#10#13#10;

  65.  

  66.       ms := TMemoryStream.Create;

  67.       try

  68.         ms.LoadFromFile(v) ;

  69.         ss := TStringStream.Create('') ;

  70.         try

  71.           ss.CopyFrom(ms, ms.Size) ;

  72.  

  73.           strData := strData + ss.DataString + #13#10;

  74.         finally

  75.           ss.Free;

  76.         end;

  77.       finally

  78.         ms.Free;

  79.       end;

  80.     end;

  81.  

  82.     strData := strData + '--' + boundary + '--'#13#10; // FOOTER

  83.   end;

  84.  

  85.   strData := strData + #0;

  86.  

  87.   { mengkonversi string ke dalam array varian byte dan setiap karakter dari string adalah nilai dalam array}

  88.   PostData := VarArrayCreate(&#91;0, Length(strData) - 1&#93;, varByte) ;

  89.  

  90.   { copy nilai ordinal karakter ke dalam array PostData}

  91.   for idx := 1 to Length(strData) do PostData&#91;idx-1&#93; := Ord(strData&#91;idx&#93;) ;

  92.  

  93.   { mempersiapkan header yang akan dikirim ke remote-server web}

  94.   Headers := 'Content-Type: multipart/form-data; boundary=' + boundary + #13#10;

  95.  

  96.   { URL Anda yang akan dikirim sebagai parameter array dengan POST-data dan header}

  97.   URL := URLstring;

  98.   wb.Navigate2(URL, Flags, EmptyParam, PostData, Headers) ;

  99.   while wb.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;

  100. end;


Cara Memanggilnya :
UploadFilesHttpPost(WebBrowser1, NamaFileServer, [], [], ['newfile'], [NamaFileLokal]);
Catatan :
WebBrowser1 : Komponent TWebBrowser.
NamaFileServer, Misal : http://www.kemzoft.com/upload/uploadSQL.php
NamaFileLokal, Misal: c:\data.SQL

3. Membuat program untuk menerima file yang berisi database tersebut (PHP)
Langsung aja kita buat file php, dan taruh file php ini pada hosting dengan alamat yg telah ditentukan seperti contoh pada bahasan (no 2) disitu ada NamaFileServer.
[php]
<?
if(isset($_FILES['newfile']))
{
$arquivo = $_FILES['newfile'];
$ziparq_dir = 'FileName/' . $arquivo['name'];
if(move_uploaded_file($arquivo['tmp_name'], $ziparq_dir))
echo "ok";
else
echo "uploaded file was not moved";
}
else
echo "uploaded file is not available";
?>
[/php]

4. Membuat program untuk mengeksekusi file yang berisi database tersebut supaya datanya bisa terambil ke database server (PHP).
Tinggal panggil aja file yang sudah tersimpan di hosting yang telah dikirimkan yang ada pada bahasan sebelumnya.

NB :
Memang proses agak panjang, tapi itulah cara terbaik apabila tidak punya IP Public.
Maaf bila ada salah2 kata.

Terima Kasih...
Semoga Membantu.
Image
User avatar
kemzoft
Junior Member
 
Posts: 19
Joined: 02 Nov 2010, 12:03

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby mas_kofa » 03 Nov 2010, 02:30

pake MYDAC.....sudah support tunelling.....

1. upload file tunelling mydac ke webhosting...
2. setting url connetion nya (file tunneling yg telah diupload) di TMyConnection di property httpOption

Selamat mencoba.
User avatar
mas_kofa
Senior Member
 
Posts: 344
Joined: 05 May 2010, 12:03
Location: Jakarta

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby Luthfi » 03 Nov 2010, 16:43

Sepertinya problem utamanya belom jelas. Kalau mau koneksi database ya cukup beritahu alamat server-nya dan berikan account untuk login. Pasti beres, selama anda punya hak akses ke database tbs. Dan ini termasuk dari komputer mana anda mau mengakses database tsb.
User avatar
Luthfi
Junior Member
 
Posts: 4
Joined: 15 Oct 2010, 00:02

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby mas_kofa » 03 Nov 2010, 17:47

Luthfi wrote:Sepertinya problem utamanya belom jelas.


bagian mana yang belom jelas?? sudah jelas2 pertanyaan gmn cara akses mysql webhosting :D
User avatar
mas_kofa
Senior Member
 
Posts: 344
Joined: 05 May 2010, 12:03
Location: Jakarta

RE: koneksi aplikasi desktop dgn domain web (remote database)

Postby Luthfi » 03 Nov 2010, 17:57

Yang saya maksud, gak jelas problem yang sebenarnya apa. Apa TS sudah mencoba buka koneksi langsung ke MySQL-nya? Belum dinyatakan. Apa TS sudah bilang database hostingnya memblok akses dari host/komputer dia? Belum juga, kan? Artinya koneksi langsung masih mungkin, kan?

Kenapa gak dimulai dari yang sederhana dulu? Sebagai contoh, web hosting saya menyediakan layanan direct connect ke mysql database. Jadi gak perlu setting yang gimana2, atau butuh web service/php sebagai proxy. TS belum menyatakan pilihan ini tersedia atau tidak, khan?

:)
User avatar
Luthfi
Junior Member
 
Posts: 4
Joined: 15 Oct 2010, 00:02


Who is online

Users browsing this forum: No registered users and 1 guest

cron