Curl Global Community
SQL Server - Printable Version

+- Curl Global Community (http://communities.curl.com)
+-- Forum: Discussions (http://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (http://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: SQL Server (/showthread.php?tid=346)



SQL Server - keennn - 11-17-2011

現在のシステムをcurlに移行できるか検討中です。
現在のシステムは、Access+SQLServerで構築されています。

しかし、curlにてSQLServerへの接続の情報が見つかりません。
不可能とういことはないと思いますが、サンプルコード等ありましたら教えて下さい。


RE: SQL Server - heavybugtracker - 11-18-2011

Curlのアプリから、ローカルDB(例えばSQLLite)以外のDBにアクセスする時に、大抵サーバ側のアプリケーション経由でアクセスしますので、普通のウェブアプリケーションからSQLServerにアクセスする方法と変わりません、ネット上にサンプルがたくさんあると思いますが...
また最新のSQLServerなら、標準のWebAPI(例えばReporting Services)などあるかと思います、それらを利用できれば、サーバ側でコードもいらないかもしれませんね。




RE: SQL Server - hokada - 11-21-2011

SQL serverにアクセスする際、通常はサーバサイドを介して、アクセスするケースが多いと思います。

例えば、
Curl -> SOAP/Curl ORBなど -> サーバサイドプログラム(Javaなど) -> JDBCなど ... -> SQL Server/Oracleなど

但し、クラサバのように直接CurlからSQL Serverなどにアクセスしたい場合は、
Curlではドライバを用意しておりませんが、ActiveXを利用することで、ADODBにアクセスできます。

例)
Code:
def con = {ActiveXObject ClsId = |"{00000514-0000-0010-8000-00AA006D2EA4}"|}
{con.Open " Driver=\{SQL Server\};Server=testsv01;Database=testdb;Uid=foo;Pwd=pass;" } || DSN
{con.Execute "SELECT * FROM HOGE;"}
.....
{con.Close}

また、ローカルのAccessファイル(.mdb)なども同様の方法を使ってアクセスできます。

--
CurlのActiveXObjectの使い方については、こちらも参考になるかもしれません。



RE: SQL Server - usami - 11-24-2011

参考までにCurlからActiveX経由でAccessのMDBを読むサンプルです。
使用しているMDBは
http://developers.curlap.com/gallery/apps/104
こちらのものを使用しています。SQLServerについてもこれを応用すればできると思います。

Code:
{curl 8.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}
{import * from CURL.GRAPHICS.ACTIVEX}

|| MDBのテーブル名
{let names:StringArray = {StringArray "name", "address", "phone", "number", "amount"}}
|| RecordSetのフィールド名
{let domains:StringArray = {StringArray "String","String", "String", "int", "int"}}
|| RecordSetのRecordField配列生成
{let fields : {Array-of RecordField} = {{Array-of RecordField}}}
{for i:int=0 below names.size do
    let domain: Domain = {Domain.from-type {evaluate domains[i]}}
    {fields.append {RecordField names[i],domain = domain,caption=names[i],nullable? = true}}
}
|| ADOのオープン
{let cn:ActiveXObject = {ActiveXObject ClsId = |"{00000514-0000-0010-8000-00AA006D2EA4}"|}}
|| Accessのファイル名を指定
{let mdb-file-url:Url = {url "sampledb.mdb"}}
{let cnstr:String = "Driver=\{Microsoft Access Driver (*.mdb)\};Dbq=" & mdb-file-url.local-filename} || Accessの場合
||{let cnstr:String = " Driver=\{SQL Server\};Server=testsv01;Database=testdb;Uid=foo;Pwd=pass;" } || SQLServerの場合
{cn.Open cnstr}
|| SQLの実行
{let sql:String = "SELECT name,address,phone,number,amount from testdb;"}
{let rs:ActiveXObject = {cn.Execute sql}}
|| データ格納
{let rds : {Array-of RecordData} = {{Array-of RecordData}}}
{while {rs.EOF} == false do
    let rd : RecordData = {RecordData}
    {for i:int=0 below fields.size do
||        {output {rs.Fields names[i]}.Value}
        let val:any = {rs.Fields names[i]}.Value
        {switch fields[i].domain.type
         case String do
            set rd[ fields[i].name] = val
         case int do
            set rd[ fields[i].name] = val
        }
    }
    {rds.append rd}
    {rs.MoveNext}
}
{rs.Close}
{cn.Close}
{rs.destroy-object}
{cn.destroy-object}
|| RecordField配列とRecordData配列を利用してRecordSetを生成
{let rsg : RecordSet = {RecordSet {RecordFields {splice fields}}, {splice rds} } }
|| レコードグリッドの定義
{let rg:RecordGrid = {RecordGrid width=16cm, height = 6cm, record-source = rsg } }
|| 画面表示
{value rg }