XAMPP連結SQL SERVER方式

XAMPP(也有免安裝版本) 是目前Windows上面最熱門的php開發環境套件,唯一美中不足的是無法連結MS SQL。至於有沒有解決方式?當然是有的囉!

一、先看一下目前XAMPP的phpinfo(),看到without-mssql…..一開始有點嚇到!不過別警張

二、到微軟網站下載Microsoft Drivers for PHP for SQL Server,對應的版本是

  • Version 3.2 supports PHP 5.6, 5.5, and 5.4
  • Version 3.1 supports PHP 5.5 and 5.4
  • Version 3.0 supports PHP 5.4.

我們的版本是5.6,所以下載SQLSRV32.EXE即可。下載後按右鍵解壓縮。

xampmssql0024.接下來我們確認一下PHP是ThreadSafe或是non-ThreadSafe版本,到XAMPP\php目錄下,找php.dll版本。看到是php5ts.dll(PHP5 ThreadSafe)。

五、確定版本後,回到剛才解開的檔案複製以下的檔案到xampp\php\ext目錄下

xampmssql004

六、接著編輯php.ini,尋找extension=區塊,在下面加上二行(注意.dll名稱是你剛才copy過去的版本名稱)

extension=php_pdo_sqlsrv_56_ts.dll
extension=php_sqlsrv_56_ts.dll

xampmssql005

 

xampmssql006

七、存檔後重新開啟APACHE

xampmssql008 xampmssql007

 

八、回到phpinfo()頁面,如果安裝成功可以搜尋到sqlsrv跟pdo_sqlsrvxampmssql010 xampmssql009九、接著就可以連線到sql資料庫(本文以CodeIgniter為例)

xampmssql012 xampmssql011

xampmssql013
$this->load->database();
$query = $this->db->get(‘cmed’)->result_array();
array_walk_recursive($query, function(&$value, $key) {
if(is_string($value)) {
$value = urlencode($value);
}
});
$json = urldecode(json_encode($query));
echo $json;

 

備註:

Microsoft® ODBC Driver 11 for SQL Server® – Windows

Microsoft ODBC Driver For SQL Server 提供從 Windows 到 Microsoft SQL Server 的原生連線能力。

 

2015.8.29 新增免安裝整合包,下載解壓縮後執行xampp-control 即可運作。

按我下載

 

 

 

 

c#簡體版列印指令注意

簡體版列印指令注意
System.Text.Encoding.GetEncoding(“gb2312”).GetBytes(“简体文字测试”);
不能使用
System.Text.Encoding.Default.GetBytes(“简体文字测试”);
會依據作業系統的encoding~~

this.serialPort1.PortName = textBox1.Text;
this.serialPort1.Open();
byte[] bData = System.Text.Encoding.GetEncoding("gb2312").GetBytes("简体文字测试");
this.serialPort1.Write(bData, 0, bData.Length);
byte[] CutPaper = new byte[] { 0x1d, 0x56, 0x42, 0x00 };
this.serialPort1.Write(CutPaper, 0, CutPaper.Length);

使用SQLite Expert將access資料匯入SQLite

因為要撰寫PC轉到手機的程式,所以需要將手上的ACCESS轉到SQLite上。可以使用SQLite Expert這個工具來轉資料,不過需要付費的Professional才有。
sqliteaccess001
點選 Fiel -> New Database
sqliteaccess002
輸入要新建db的路徑,程式會根據database name建立對應的alias
sqliteaccess003

 

建立完成後就看到有新的Database

sqliteaccess004

 

接下來點選上面的 Import/Export->Data Transfer Wizard,會有對話框問你要Export匯出或Import匯入。然後下面是匯入的方式是使用SQL或是ADO data source

sqliteaccess006

接著會問你用什麼方式連線,可以 Use Connection String按Build

sqliteaccess007

 

點選Microsoft Jet 4.0 OLE DB Provider連結access

sqliteaccess008

選取我們要連的db

sqliteaccess009

接著開始匯入

sqliteaccess010

中間會出現login畫面直接按ok

sqliteaccess011

接著會問你要匯入那個table

sqliteaccess012

完成後系統使最後確認

sqliteaccess013

開始匯入資料

sqliteaccess014

匯入完畢後就可以看到塞進去的table跟資料了sqliteaccess015

 

 

Delphi透過odbc連結SQLite

Delphi5~7連接SQLite可以透過上述網站的SQLite ODBC Driver,透過ADO元件連結資料庫。

這樣一來,在開發行動裝置時。透過SQLite Expert建置完資料庫後,利用Delphi做資料整理~
再將資料放在Android 的asseets 或是iOS放在app document,core data初始化時再copy過去。

P.S Delphi 連線字串
DRIVER=SQLite3 ODBC Driver;Database=c:\test\test.db;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;

 

http://www.sqliteexpert.com/

http://www.ch-werner.de/sqliteodbc/

 

JAVA2OP更新

主要是修補缺少的二個檔案
bin\converters\java2op\bootclasses.jar
bin\converters\java2op\bootclasses.xml

下載之後將檔案copy到以下的路徑即可

bin\converters\java2op\bootclasses.jar
bin\converters\java2op\bootclasses.xml

下載路徑:
http://cc.embarcadero.com/Item/30326

Delphi 使用superobject分析JSON

ResizedImage600199-RADJson
http://superobject.googlecode.com

https://github.com/hgourvest/superobject

Delphi從2009才開始支援JSON格式,先前的版本需使用第三方函式庫才能解決。這邊提供不錯的SuperObject給大家。

使用方式很簡單,例如從台北市政府資料開放平台取得臺北市公廁點位資訊

[json]
[{“unit”:”台北市政府環境保護局”,”title”:”公廁坐落:士林官邸”,”dep_content”:”座數:8,特優級:2,優等級:6,普通級:0,加強級:0,無障礙設施”,”address”:”臺北市士林區福林路60號”,”lng”:”121.530152″,”lat”:”25.094898″,”modifydate”:”2013-03-25T17:58:20+08:00″},{“unit”:”台北市政府環境保護局”,”title”:”公廁坐落:天母公園”,”dep_content”:”座數
:1,特優級:0,優等級:1,普通級:0,加強級:0″,”address”:”臺北市士林區中山北路七段219號邊”,”lng”:”121.530071″,”lat”:”25.125855″,”modifydate”:”2015-08-06T00:00:00+08:00″}]
[/json]
[pascal]
uses superobject, supertypes, superxmlparser;

var vjson: Isuperobject;
vitem:Tsuperarray;
i,j:integer;
s:string;
begin
vjson:= so(‘[{"unit":"台北市政府環境保護局","address":"臺北市士林區福林路60號"},{"unit":"台北市政府環境保護局","address":"臺北市士林區中山北路七段219號邊"}]’);
vitem:=vjson.AsArray;
for i:=0 to vitem.Length-1 do begin
memo2.Lines.Add(vitem[i][‘unit’].AsString+’ ‘+vitem[i][‘address’].AsString);
end;
end;
[/pascal]

那如果格式如下
[json]
{“zoo”:”壽山動物園”,”animals”:[{“name”:”猴子”,”years”:”12″},{“name”:”猩猩”,”years”:”5″}]}
[/json]
[pascal]
var vjson: Isuperobject;
vitem:Tsuperarray;
i:integer;
begin
vjson:= so(‘{"zoo":"壽山動物園","animals":[{"name":"猴子","years":"12"},{"name":"猩猩","years":"5"}]}’);
memo2.lines.add(vjson[‘zoo’].asstring);
vitem:= vjson[‘animals’].AsArray;
for i:=0 to vitem.Length -1 do begin
memo1.Lines.Add(vitem[i][‘name’].AsString+’ ‘+vitem[i][‘years’].AsString );
end;
[/pascal]

Delphi XE8使用Microsoft Azure Translator微軟線上翻譯服務

在微軟的Microsoft Azure Marketplace有許多不錯的資料可以應用,今天就分享如果利用XE8搭配Microsoft Translator線上翻譯服務來做翻譯。
一、註冊Azure帳戶

點選 https://datamarket.azure.com/dataset/bing/microsofttranslator 上的登入,使用個人。然後依照步驗註冊就好。
tran002

二、訂閱服務
進入 https://datamarket.azure.com/dataset/bing/microsofttranslator ,點選2000000字元數/月的免費方案註冊。

tran001

tran004

 

tran005 tran006
三、註冊程式
程式中需要client_id跟client_secret ,所以到 https://datamarket.azure.com/developer/applications 註冊程式。

client_id就是用戶端識別碼

client_secret就是用戶端密碼

tran007
四、開始建立程式

新增一個Blank Application

001

接著在上面增加三個元件,TRESTClient、TRESTRequest跟TRESTResponse。重新命名為RESTClientAuthToken、RESTRequestAuthToken跟RESTResponseAuthToken.

002

 

RESTClientAuthToken的BaseURL設定 https://datamarket.accesscontrol.windows.net/v2

003

 

RESTRequestAuthToken的Method改為rmPOST、然後Resource設為OAuth2-13(參考 https://msdn.microsoft.com/en-us/library/hh454950.aspx)

 

004

 

然後在Params增加四個參數如下

 

005

 

在畫面上增加3個label、3個edit以及一個button

 

006

加上程式碼

[pascal]
var
token: string;
begin
RESTRequestAuthToken.Params.ParameterByName(‘client_secret’).Value := EditClient_Secret.Text;
RESTRequestAuthToken.Params.ParameterByName(‘client_id’).Value := EditClient_ID.Text;
RESTRequestAuthToken.Execute;
if RESTResponseAuthToken.GetSimpleValue(‘access_token’,token) then
begin
EditToken_value.Text := token;
end;
[/pascal]

取得Token值後我們可以開始進行翻譯,參考的文件為(https://msdn.microsoft.com/en-us/library/ff512387.aspx),一樣增加三個元件,TRESTClient、TRESTRequest跟TRESTResponse。重新命名為RESTClientTranslate、RESTRequestTranslate跟RESTResponseTranslate.。

RESTClientTranslate的BaseURL設為 http://api.microsofttranslator.com/v2/Http.svc

007

 

接著在RESTRequestTranslate的Resource設為Translate?text={text}&from={from}&to={to}

 

008

一樣在裡面增加四個Params,from跟to需要對應相關的語言代碼(參考https://msdn.microsoft.com/en-us/library/hh456380.aspx

009

在畫面上增加combobox二個,以及二個memo及button。

011

 

開啟view→LiveBindings Designer,將RESTRequestTranslate中的Params.text指到Memo1的Text(輸入),然後RESTResponseTranslate.的Content指向Memo2的Text(輸出)。

010

 

最後補上翻譯的程式碼如下。

[pascal]
RESTRequestTranslate.Params.ParameterByName(‘Authorization’).Value := ‘bearer ‘+EditToken_value.Text;
RESTRequestTranslate.Params.ParameterByName(‘from’).Value := cbFrom.Selected.Text;
RESTRequestTranslate.Params.ParameterByName(‘to’).Value := cbToo.Selected.Text;
RESTRequestTranslate.Execute;
[/pascal]

番外篇:
語音的部份(參考 https://msdn.microsoft.com/en-us/library/ff512420.aspx)
增加一個RESTRequestPlay,然後設定Resource為 speak?text={text}&language={language}&to={to}&format=audio/mp3&options=MinSize 。
三個Param為 Authorization、text、language
以及增加mediaplayer。
程式如下

[pascal]
var
MS: TMemoryStream;
TempFile: string;
begin
RESTRequestPlay.Params.ParameterByName(‘Authorization’).Value := ‘bearer ‘+EditToken_value.Text;
RESTRequestPlay.Params.ParameterByName(‘language’).Value := RESTRequestTranslate.Params.ParameterByName(‘to’).Value;
RESTRequestPlay.Params.ParameterByName(‘text’).Value := RESTResponseTranslate.Content;
RESTRequestPlay.Execute;
MS := TMemoryStream.Create;
try
MS.WriteData(RESTResponsePlay.RawBytes,Length(RESTResponsePlay.RawBytes));
TempFile := TPath.ChangeExtension(TPath.GetTempFileName,’.mp3′);
MS.SaveToFile(TempFile);
MediaPlayer1.FileName := TempFile;
MediaPlayer1.Play;
finally
MS.Free;
end;
end;
[/pascal]

API參考

https://msdn.microsoft.com/en-us/library/dd576287.aspx

程式碼下載

https://drive.google.com/file/d/0BxMN7KkA7p3NZlU5clItaGxiMzQ/view?usp=sharing

原文:
http://blogs.embarcadero.com/stephenball/2015/06/30/using-azure-translator-services-with-delphi/

 

CodeIgniter3.0將Session寫入DB

[sql]
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(40) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
PRIMARY KEY (id),
KEY `ci_sessions_timestamp` (`timestamp`)
);
[/sql]
修改 application/config/config.php
[php]
$config[‘sess_driver’] = ‘database’;
$config[‘sess_save_path’] = ‘ci_sessions’;
[/php]