WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index 目次

> ## データーベースクラスを利用したデータベースアクセス

> ### ODBC を通じたデータベースアクセス

> WSCvdb クラスを利用すると ODBC インターフェースを通じてデータベースに アクセスすることができます。
> ODBC にアクセスするには、プロパティ WSNtype に WS_DB_ODBC を指定し、 WSCvdb::open 関数にDSN 、ユーザー名、パスワードを指定して実行します。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvdb.h>
>     extern WSCvdb* newvdb_000;

>     void db_ep(WSCbase* object){
>       long ret = newvdb_000->open("dn","user","passwd");
>       if (ret == WS_NO_ERR){
>         //接続。
>       }else{
>         //接続失敗、エラーメッセージを取得。
>         char buffer[1024];
>         newvdb_000->getErrorMsg(buffer,1024);
>       }
>     }

> ODBC にアクセスするには、プロパティ WSNhostname に DSN、WSNusername に ユーザ名、WSNpassword にパスワードを指定し、引数無しで WSCvdb::open 関 数を実行します。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvdb.h>
>     extern WSCvdb* newvdb_000;

>     void db_ep(WSCbase* object){
>       long ret = newvdb_000->open();
>       if (ret == WS_NO_ERR){
>         //接続。
>       }else{
>         //接続失敗、エラーメッセージを取得。
>         char buffer[1024];
>         newvdb_000->getErrorMsg(buffer,1024);
>       }
>     }

> ### PostgreSQL インターフェースを通じたデータベースアクセス

> WSCvdb クラスを利用すると PostgreSQL インターフェースを通じて直接 PostgreSQL データベースにアクセスすることができます。
> PostgreSQL インターフェースを通してアクセスする場合は、プロパティ WSNtype に WS_DB_POSTGRES を指定し、WSCvdb::open 関数にホスト名、ユー ザー名、パスワード、データーベース名、ポート番号を文字列で指定して実行 します。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvdb.h>
>     extern WSCvdb* newvdb_000;

>     void db_ep(WSCbase* object){
>       long ret = newvdb_000->open("dn","user","passwd","dbname","5432");
>       if (ret == WS_NO_ERR){
>         //接続。
>       }else{
>         //接続失敗、エラーメッセージを取得。
>         char buffer[1024];
>         newvdb_000->getErrorMsg(buffer,1024);
>       }
>     }

> PostgreSQL にアクセスするには、プロパティ WSNhostname にデータベースの 存在するホスト名、WSNusername にユーザ名、WSNpassword にパスワード、 WSNdbname にデータベース名、WSNport にポート番号を指定し、引数無しで WSCvdb::open 関数を実行します。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvdb.h>
>     extern WSCvdb* newvdb_000;

>     void db_ep(WSCbase* object){
>       long ret = newvdb_000->open();
>       if (ret == WS_NO_ERR){
>         //接続。
>       }else{
>         //接続失敗、エラーメッセージを取得。
>         char buffer[1024];
>         newvdb_000->getErrorMsg(buffer,1024);
>       }
>     }

> ### テーブルの作成

> WSCvdb::open を実行してデータベースへの接続が成功した場合、SQL を発行 してデータベースを操作することができます。次の例は、データベース上に shinamono というテーブルを一つ作成する例です。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvdb.h>
>     extern WSCvdb* newvdb_000;

>     void db_ep(WSCbase* object){
>       char buf1[512];
>       strcpy(buf1, "create table shinamono(code int, hinmei char(20), nedan float)");
>       newvdb_000->sqlExecute(buf1);

>       if (ret == WS_NO_ERR){
>         //成功
>       }else{
>         //接続失敗、エラーメッセージを取得。
>         char buffer[1024];
>         newvdb_000->getErrorMsg(buffer,1024);
>       }
>     }

> ### テーブルへのデータの格納

> WSCvdb::open を実行してデータベースへの接続が成功し、操作可能なテーブ ルが存在する場合、SQL を発行してテーブルにデータを確報することができま す。次の例は、データベース上に shinamono というテーブルに品物のデータ を格納する例です。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvdb.h>
>     extern WSCvdb* newvdb_000;

>     void db_ep(WSCbase* object){
>       newvdb_000->beginTran();
>       strcpy(buf1, "insert into shinamono values(1, 'みかん', 100)");
>       newvdb_000->sqlExecute(buf1);
>       strcpy(buf1, "insert into shinamono values(2, 'りんご', 200)");
>       newvdb_000->sqlExecute(buf1);
>       strcpy(buf1, "insert into shinamono values(3, 'バナナ', 300)");
>       newvdb_000->sqlExecute(buf1);
>       strcpy(buf1, "insert into shinamono values(4, 'メロン', 0)");
>       newvdb_000->sqlExecute(buf1);

>       newvdb_000->commitTran();

>     }

> ### テーブル上のデータの参照

> WSCvdb::open を実行してデータベースへの接続が成功し、参照可能なテーブ ルが存在する場合、SQL を発行してテーブル上のデータを確報することができ ます。次の例は、データベース上に shinamono というテーブルから品物のデー タを参照し、そしてデータを更新する例です。

>     #include <WScom.h>
>     #include <WSCfunctionList.h>
>     #include <WSCbase.h>
>     //----------------------------------------------------------
>     //Function for the event procedure
>     //----------------------------------------------------------
>     #include <WSCvdb.h>
>     #include <WSCdb.h>
>     extern WSCvdb* newvdb_000;

>     void db_ep(WSCbase* object){
>       WSCvariant var;
>       WSCstring outp;
>       newvdb_000->beginTran();
>       WSCdbRecord rs(newvdb_000);
>       if(rs.open("select * from shinamono order by code") == WS_NO_ERR) {
>         while (!rs.isEOF()) {
>           outp ="";
>           rs.getColValue("code", &var);
>           int code = (int)var;
>           outp << "code:" << (int)var << " ";
>           rs.getColValue("hinmei", &var);
>           outp << "hinmei:" << (char*)var << " ";
>           rs.getColValue("nedan", &var);
>           char buf[80];
>           char buf1[80];
>           double nedan = (float)var + 10;

>           sprintf(buf, "%f", (float)var);
>           outp << "nedan:" << buf << "\n";
>           printf((char*)outp);

>           if(nedan != 0) {
>             sprintf(buf1, "update shinamono set nedan = %f where code = %d", nedan, code);
>           } else {
>             sprintf(buf1, "delete from shinamono where code = %d", code);
>           }
>           newvdb_000->sqlExecute(buf1);
>           rs.moveNext();
>         }
>       }
>       rs.close();
>       newvdb_000->commitTran();
>     }

Document Release 3.70 for WideStudio ver 3.70, Feb 2004

WideStudio documents index | 目次

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004