WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT 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.90 for WideStudio/MWT ver 3.90, Jul 2005


WideStudio/MWT documents index | 目次

Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005