.. index:: 
	single: ODBC 関数; はじめに

=========
ODBC 関数
=========

ODBC 関数の用法を学びます。

* odbc_init()
* odbc_drivers()
* odbc_datasources()
* odbc_close()
* odbc_connect()
* odbc_disconnect()
* odbc_execute()
* odbc_colcount()
* odbc_fetch()
* odbc_getdata()
* odbc_tables()
* odbc_columns()
* odbc_autocommit()
* odbc_commit()
* odbc_rollback()

この関数の使用前に odbclib.ring ライブラリを読み込みます。

.. code-block:: ring

	load "odbclib.ring"
	# ODBC 関数の使用

.. index:: 
	pair: ODBC 関数; odbc_init()

odbc_init() 関数
================

odbc_init() 関数はハンドルを作成します。

文法:

.. code-block:: ring

	odbc_init() ---> ODBC ハンドル

.. index:: 
	pair: ODBC 関数; odbc_drivers()

odbc_drivers() 関数
===================

odbc_drivers() 関数は ODBC ドライバのリストを取得します。

文法:

.. code-block:: ring

	odbc_drivers(ODBC ハンドル) ---> ドライバのリスト

.. index:: 
	pair: ODBC 関数; odbc_datasources()

odbc_datasources() 関数
=======================

odbc_datasources() 関数は ODBC データソースのリストを取得します。

文法:

.. code-block:: ring

	odbc_datasources(ODBC ハンドル) ---> データソースのリスト

.. index:: 
	pair: ODBC 関数; odbc_close()

odbc_close() 関数
=================

ODBC_Close() 関数は ODBC 関数の使用終了後にリソースを解放します。

文法:

.. code-block:: ring

	odbc_close(ODBC ハンドル)

.. index:: 
	pair: ODBC 関数; ODBC ドライバのリストを表示

ODBC ドライバのリストを表示
===========================

この用例は ODBC ドライバのリストを表示します。

.. code-block:: ring

	See "ODBC test 1" + nl
	oODBC = odbc_init()
	See "Drivers " + nl
	see odbc_drivers(oODBC)
	odbc_close(oODBC)

実行結果:

.. code-block:: ring

	ODBC test 1
	Drivers
	Microsoft Access-Treiber (*.mdb) - SQLLevel=0
	Driver do Microsoft Paradox (*.db ) - SQLLevel=0
	Driver do Microsoft Excel(*.xls) - SQLLevel=0
	Microsoft Text Driver (*.txt; *.csv) - SQLLevel=0
	Driver da Microsoft para arquivos texto (*.txt; *.csv) - SQLLevel=0
	Microsoft dBase-Treiber (*.dbf) - SQLLevel=0
	SQL Server - CPTimeout=60
	Microsoft Excel Driver (*.xls) - SQLLevel=0
	Driver do Microsoft dBase (*.dbf) - SQLLevel=0
	Microsoft Paradox-Treiber (*.db ) - SQLLevel=0
	Microsoft ODBC for Oracle - CPTimeout=120
	Microsoft Text-Treiber (*.txt; *.csv) - SQLLevel=0
	Microsoft Excel-Treiber (*.xls) - SQLLevel=0
	Microsoft Access Driver (*.mdb) - SQLLevel=0
	Driver do Microsoft Access (*.mdb) - SQLLevel=0
	Microsoft Paradox Driver (*.db ) - SQLLevel=0
	Microsoft dBase Driver (*.dbf) - SQLLevel=0
	Microsoft Access Driver (*.mdb, *.accdb) - UsageCount=3
	Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) - UsageCount=3
	Microsoft Access Text Driver (*.txt, *.csv) - UsageCount=3
	SQL Server Native Client 10.0 - UsageCount=1
	SQL Server Native Client 11.0 - UsageCount=1
	Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) - UsageCount=3
	Microsoft Access Paradox Driver (*.db) - UsageCount=3
	MySQL ODBC 5.3 ANSI Driver - UsageCount=1
	MySQL ODBC 5.3 Unicode Driver - UsageCount=1
	ODBC Driver 11 for SQL Server - UsageCount=1
	Lianja ODBC Driver - CPTimeout=60
	Microsoft Visual FoxPro Driver - UsageCount=1
	Microsoft Visual FoxPro-Treiber - UsageCount=1
	Driver para o Microsoft Visual FoxPro - UsageCount=1
	Microsoft FoxPro VFP Driver (*.dbf) - UsageCount=1

.. index:: 
	pair: ODBC 関数; ODBC データソースのリストを表示

ODBC データソースのリストを表示
===============================

この用例は ODBC データソースのリストを表示します。

.. code-block:: ring

	See "ODBC test 2" + nl
	pODBC = odbc_init()
	See "Data Sources " + nl
	see odbc_datasources(pODBC)
	odbc_close(pODBC)

実行結果:

.. code-block:: ring

	ODBC test 2
	Data Sources
	Excel Files - Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
	MS Access Database - Microsoft Access Driver (*.mdb, *.accdb)
	Customer - Microsoft Access Driver (*.mdb)
	IdCardData - Microsoft Access Driver (*.mdb)
	MyProjectData2 - Microsoft Access Driver (*.mdb)
	MyData - Microsoft Access Driver (*.mdb)
	MonprojetData - Microsoft Access Driver (*.mdb)
	dBASE Files - Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)
	myvfpdata - Microsoft Visual FoxPro Driver
	FACTORYDATA - Microsoft Access Driver (*.mdb)
	TRAININGSYSDATA - Microsoft Access Driver (*.mdb)
	RVCSYSDATASQLDB - SQL Server Native Client 11.0
	PWCTRVCDATA - Microsoft Access Driver (*.mdb)
	MyCompany - Microsoft Access Driver (*.mdb)
	HCS - Microsoft Access Driver (*.mdb)
	HCS2 - Microsoft Access Driver (*.mdb, *.accdb)
	MyProjectData - Microsoft Access Driver (*.mdb)
	Xtreme Sample Database 2008 - Microsoft Access Driver (*.mdb)
	Lianja_Southwind - Lianja ODBC Driver
	Visual FoxPro Database - Microsoft Visual FoxPro Driver
	Visual FoxPro Tables - Microsoft Visual FoxPro Driver

.. index:: 
	pair: ODBC 関数; odbc_connect()

odbc_connect() 関数
===================

odbc_connect() 関数はデータベースへ接続します。

文法:

.. code-block:: ring

	odbc_connect(ODBC ハンドル, cConnectionString)

.. index:: 
	pair: ODBC 関数; odbc_disconnect()

odbc_disconnect() 関数
======================

odbc_disconnect() 関数はデータベースの接続を閉じます。

文法:

.. code-block:: ring

	odbc_disconnect(ODBC ハンドル)

.. index:: 
	pair: ODBC 関数; 接続の開始と終了

接続の開始と終了
================

この用例はデータベースへ接続後にデータベースへの接続を閉じます。

.. code-block:: ring

	See "ODBC test 3" + nl
	pODBC = odbc_init()
	See "Connect to database" + nl
	see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
	See "disconnect" + nl
	odbc_disconnect(pODBC)
	See "Close database..." + nl
	odbc_close(pODBC)

実行結果:

.. code-block:: ring

	ODBC test 3
	Connect to database
	1
	disconnect
	Close database...

.. index:: 
	pair: ODBC 関数; odbc_execute()

odbc_execute() 関数
===================

odbc_execute() 関数はデータベースで SQL ステートメントを実行します。

文法:

.. code-block:: ring

	odbc_execute(ODBC ハンドル, cSQLStatement)

.. index:: 
	pair: ODBC 関数; odbc_colcount()

odbc_colcount() 関数
====================

odbc_colcount() 関数はクエリの結果にあるカラム数を取得します。

文法:

.. code-block:: ring

	odbc_colcount(ODBC ハンドル) ---> 数値によるカラム数

.. index:: 
	pair: ODBC 関数; odbc_fetch()

odbc_fetch() 関数
=================

odbc_fetch() 関数はクエリ結果から列をフェッチします。

文法:

.. code-block:: ring

	odbc_fetch(ODBC ハンドル)

.. index:: 
	pair: ODBC 関数; odbc_getdata()

odbc_getdata() 関数
===================

odbc_getdata() 関数はフェッチ済みの列からカラム値を取得します。

文法:

.. code-block:: ring

	odbc_getdata(ODBC ハンドル, nColumnNumber) ---> カラムの値

.. index:: 
	pair: ODBC 関数; クエリの実行と結果の表示

クエリの実行と結果の表示
========================

この用例はクエリの実行後にクエリの結果を表示します。

.. code-block:: ring

	See "ODBC test 4" + nl
	pODBC = odbc_init()
	See "Connect to database" + nl
	see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
	See "Select data" + nl
	see odbc_execute(pODBC,"select * from person") + nl
	nMax = odbc_colcount(pODBC)
	See "Columns Count : " + nMax + nl
	while odbc_fetch(pODBC)
		See "Row data:" + nl
		for x = 1 to nMax
			see odbc_getdata(pODBC,x) + " - "
		next
	end
	See "Close database..." + nl
	odbc_disconnect(pODBC)
	odbc_close(pODBC)

.. index:: 
	pair: ODBC 関数; odbc_tables()

odbc_tables() 関数
==================

odbc_tables() 関数はテーブル内にあるテーブルのリストを取得します。

この関数の結果はクエリ結果を取得するときにアクセスできます。

文法:

.. code-block:: ring

	odbc_tables(ODBC ハンドル)

用例:

.. code-block:: ring

	See "ODBC test - Get Database Tables" + nl
	pODBC = odbc_init()
	See "Connect to database" + nl
	odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
	See "Select data" + nl
	odbc_tables(pODBC) + nl
	nMax = odbc_colcount(pODBC)
	See "Columns Count : " + nMax + nl
	while odbc_fetch(pODBC)
		for x = 1 to nMax
			see odbc_getdata(pODBC,x) 
			if x != nMax see " - " ok
		next
		See nl
	end
	See "Close database..." 
	odbc_disconnect(pODBC)
	odbc_close(pODBC)

実行結果:

.. code-block:: ring

	ODBC test - Get Database Tables
	Connect to database
	Select data
	Columns Count : 5
	.\test - NULL - Customer - TABLE - NULL
	.\test - NULL - employee - TABLE - NULL
	.\test - NULL - person - TABLE - NULL
	.\test - NULL - tel - TABLE - NULL
	Close database...

.. index:: 
	pair: ODBC 関数; odbc_columns()

odbc_columns() 関数
===================

odbc_columns() 関数はテーブル内にあるカラムのリストを取得します。

文法:

.. code-block:: ring

	odbc_columns(ODBC ハンドル, cTableName)

用例:

.. code-block:: ring

	See "ODBC test - Get Table Columns" + nl
	pODBC = odbc_init()
	See "Connect to database" + nl
	odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
	See "Get Columns inside the Person Table" + nl
	odbc_columns(pODBC,"person") + nl
	while odbc_fetch(pODBC)
		see odbc_getdata(pODBC,4) + nl
	end
	See "Close database..." + nl
	odbc_disconnect(pODBC)
	odbc_close(pODBC)

実行結果:

.. code-block:: ring

	ODBC test - Get Table Columns
	Connect to database
	Get Columns inside the Person Table
	FIRST
	LAST
	STREET
	CITY
	STATE
	ZIP
	HIREDATE
	MARRIED
	AGE
	SALARY
	NOTES
	Close database...

.. index:: 
	pair: ODBC 関数; odbc_autocommit()

odbc_autocommit() 関数
======================

odbc_autocommit() 関数は自動コミット機能を有効または無効化します。

文法:

.. code-block:: ring

	odbc_autocommit(ODBC ハンドル, lStatus)   # lStatus には True または False を指定できます。


.. index:: 
	pair: ODBC 関数; odbc_commit()

odbc_commit() 関数
======================

odbc_commit() 関数はデータベースのコミット更新をします。

文法:

.. code-block:: ring

	odbc_commit(ODBC ハンドル)

.. index:: 
	pair: ODBC 関数; odbc_rollback()

odbc_rollback() 関数
====================

odbc_rollback() 関数はデータベースのロールバック更新をします。

文法:

.. code-block:: ring

	odbc_rollback(ODBC ハンドル)

.. index:: 
	pair: ODBC 関数; トランザクションおよびコミットとロールバックの用法

トランザクションおよびコミットとロールバックの用法
======================================================

用例:

.. code-block:: ring

	See "ODBC Test - Transactions and using Commit and Rollback" + nl
	pODBC = odbc_init()
	See "Connect to database" + nl
	see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
	see "insert data..." + nl
	odbc_autocommit(pODBC,0)
	for x = 1 to 10000
		odbc_execute(pODBC,"insert into tel values (" + x + ",'mahmoud')")
	next
	for x = 10001 to 15000
		odbc_execute(pODBC,"insert into tel values (" + x + ",'samir')")
	next
	odbc_commit(pODBC)

	for x = 15001 to 20000
		odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
	next

	ODBC_ROLLBACK(pODBC)
	odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
	odbc_commit(pODBC)

	See "Close database..." + nl
	odbc_disconnect(pODBC)
	odbc_close(pODBC)

実行結果:

.. code-block:: ring

	ODBC Test - Transactions and using Commit and Rollback
	Connect to database
	1
	insert data...
	Close database...

.. index:: 
	pair: ODBC 関数; イメージの保存と復元

イメージの保存と復元
====================

この用例ではデータベースのイメージを保存します。

.. code-block:: ring

	See "ODBC test - Save image in the database" + nl
	pODBC = odbc_init()
	See "Connect to database" + nl
	see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
	see "Read Image File..." + nl
	cFile = str2hex(read("tests\mahmoud.jpg"))
	see "size " + len(CFile)+nl
	see "Save image in the database..." + nl
	stmt = "insert into tel values (20000,'mahmoud','" + cFile + "');"
	odbc_execute(pODBC,stmt)
	See "Close database..." + nl
	odbc_disconnect(pODBC)
	odbc_close(pODBC)

この用例ではデータベースのイメージを復元します。

.. code-block:: ring

	See "ODBC Test - Restore image from the database" + nl
	pODBC = odbc_init()
	See "Connect to database" + nl
	see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
	See "Select data" + nl
	see odbc_execute(pODBC,"select * from tel where id = 20000") + nl
	nMax = odbc_colcount(pODBC)
	See "Columns Count : " + nMax + nl
	if odbc_fetch(pODBC)
		See "Write image file" + nl
		write("tests\great.jpg",hex2str( odbc_getdata(pODBC,3) ) )
	ok
	See "Close database..." + nl
	odbc_disconnect(pODBC)
	odbc_close(pODBC)

