Использование Smart Mobile Studio для взаимодействия с базой данных MySQL

Есть ли какой-нибудь способ взаимодействия SMS с базой данных mySQL на моем хост-сайте?

Что если я сделаю так, чтобы код SMS был там?

Существует ли какой-либо веб-код (PHP, Perl, JavaScript и т. Д., Который я могу использовать для вызова из кода SMS для выполнения транзакций SQL (выборки, вставки, обновления, удаления и т. Д.)? Т. Е. Могу ли я создать библиотека на стороне хоста будет вызываться изнутри SMS?

У меня есть веб-сайт с серверной частью MySQL, и я хотел бы написать небольшое приложение для моего телефона, которое будет в значительной степени мобильной версией моего сайта (за исключением множества функций и графики).

Thanx

Шейн

2 ответа

Решение

Вы не можете получить доступ к mysql напрямую через веб-браузер (только когда он имеет какой-то http-интерфейс с rest/json, но ни у одного сервера базы данных этого нет?). Но, конечно, вы можете вызвать любой http-сервер, независимо от того, сделан ли он с помощью php или чего-то еще, rest, soap, json и т. Д. Вам нужно только знать, какой URL и, возможно, какой-нибудь "низкоуровневый" javascript в блоке asm.

На данный момент самым простым способом было бы создать сервер в Delphi с RemObjects. В IDE SmartMobileStudio (SMS) вы можете импортировать SOAP-подобный интерфейсный файл, и весь код на стороне клиента (паскаль) будет сгенерирован для вас (с типом безопасности)!:)

Приложив больше усилий, вы можете создать SOAP-сервер, но тогда вам, вероятно, потребуется самостоятельно создать некоторый код javascript (и вам нужна библиотека JS с поддержкой SOAP).

В следующем основном выпуске будет поддержка node.js, который является сервером javascript на стороне сервера! Тогда очень легко получить доступ к mysql в node.js (или в файлах и т. Д., У него нет изолированной программной среды веб-браузера), а с помощью socket.io вы можете легко получить доступ к этому серверу node.js (в облаке, если хотите) и отправить данные с помощью json, Хорошая вещь с socket.io заключается в том, что вы также можете передавать данные клиенту, потому что он поддерживает веб-сокеты (двусторонняя передача по протоколу tcpip через http).

Вы также можете использовать XML для доступа к данным MySQL:

По сути, на вашем сервере должен быть php-файл (например, getuser.php), где вы устанавливаете соединение с вашей базой данных, отправляете запрос и выводите результат в любом формате, который вам необходим (в данном случае это таблица в формате html).

================================================== ===============

/* Database config */

$db_host        = '....';
$db_user        = '....';
$db_pass        = '....';
$db_database    = 'symphony_kvc'; 

/* End config */

$q = intval($_GET['q']);

$con = mysqli_connect($db_host,$db_user,$db_pass,$db_database);
if (!$con)
  {
  die('Could not connect: ' . mysqli_error($con));
  }

mysqli_select_db($con,"$db_database");
$sql="SELECT * FROM comments WHERE id = '".$q."'";

$result = mysqli_query($con,$sql);

echo "<table border='1'>
<tr>
<th>name</th>
<th>url</th>
<th>email</th>
</tr>";

while($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['url'] . "</td>";
  echo "<td>" . $row['email'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysqli_close($con);

?>

================================================== ===============

Код СМС выглядит так

unit Form1;

interface

uses
  w3system, w3graphics, w3components, w3forms, w3fonts, w3borders,
  w3application, W3Elements, W3Button, w3memo, w3editbox, w3time, W3Label, W3Image;

type
  TForm1=class(TW3form)
  private
    { Private methods }
    {$I 'Form1:intf'}
  protected
    { Protected methods }
    procedure InitializeObject; override;
    procedure ShowClicked(Sender: TObject);
    procedure FinalizeObject; override;
    procedure StyleTagObject; reintroduce; virtual;
    procedure Resize; override;
    procedure GetMyData;
    Procedure HandleUpdate(Sender:TObject);
    MyData: String;
    Memo1: TW3Memo;
    Button1 :TW3Button;
    Edit1: TW3EditBox;
    FTimer: TW3Timer;
  end;

implementation

{ TForm1}

procedure TForm1.GetMyData;
begin
asm

 xmlhttp=new XMLHttpRequest();
 xmlhttp.onreadystatechange=function()
  {
  @MyData = '';
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    @MyData = xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","getuser.php?q=1",true);
  xmlhttp.send();
 end;  //asm

end;

procedure TForm1.HandleUpdate(Sender:TObject);
begin
  If MyData <> '' then begin               // populate controls soon as data received
    txtHint.InnerHTML := MyData;
    Memo1.Text := MyData;
    Button1.InnerHTML := MyData;
    Edit1.Text := StrAfter(MyData,'mailto:');
    FTimer.Enabled:=False;
    W3Image1.Visible := false;
  end;
end;

procedure TForm1.ShowClicked(Sender: TObject);
begin
  W3Image1.Visible := true;               //make spinner visible
  GetMyData;
  FTimer.OnTime:=HandleUpdate;            //wait until data fetched
  FTimer.Delay:=5;
end;

procedure TForm1.InitializeObject;
begin
      inherited;
      {$I 'Form1:impl'}
      W3Image1.LoadFromURL('res/spinner.gif');   //load spinner and set to invisible
      W3Image1.OnLoad :=
      procedure (Sender: TObject)
      begin
    W3Image1.Visible := false;
  end;

//create the 3 controls
  Edit1 := TW3EditBox.Create(Self);
  Edit1.SetBounds(30, 90, 400, 50);
  W3Label1.SetBounds(30, 50, 400, 50);  // title edit1

  Memo1 := TW3Memo.Create(Self);
  Memo1.SetBounds(30, 180, 400, 150);
  W3Label2.SetBounds(30, 142, 400, 50);  // title memo1

  Button1 := TW3Button.Create(Self);
  Button1.SetBounds(30, 520, 400, 150);

  W3Label3.SetBounds(30, 330, 500, 50);  // title divhtmlelement
  txtHint.SetBounds(30, 370, 400, 150);

  W3Button1.OnClick := ShowClicked;
  FTimer:=TW3Timer.Create;
end;

Выше будет отображаться кнопка на форме, другой элемент формы является TW3DIVHtmlElement, Memo и EditBox. При нажатии данные будут получены

Kudos w3schools, демо адаптировано из одной из их статей

Это работает хорошо. Смотрите демо на www.lynkit.com.au/MySQL

Другие вопросы по тегам