Wide Studio Programmer's Guide

Wide Studio Home
Up to


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



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>
extern WSCvdb* newvdb__000;

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

      sprintf(buf, "%f", (float)var);
      cout << "nedan:" << buf << "\n";

      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.00

For Use with Wide Studio Release 3.00, Summper 2002


Wide Stuido Home | Up to

Copyright(C) T. Hirabayashi, 1999-2002 Last modified: June 10, 2002