Revision 2 of 2, by WikiArchive on 11-10-2026. The page as it is now.
Oracle/ja
データベースのポータル
参照: · Databases 概要 · ライブラリ · フィールドの型 · コントロール · FAQ · SqlDBHowto/ja · TSQLQuery の利用 · メモリ上で動作するデータベースの作り方 · チュートリアル/練習となる記事: · 概要 · 0 - データベースのセットアップ · 1 - 開始 · 2 - 編集 · 3 - クエリ · 4 - データモジュール · SQLdb Programming Reference/ja · 各種データベース · Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos
低階層 Oracle サーバインタフェース
低階層のOracleサーバインタフェースはoraoci という1つのユニットに存在し、それはOracleインタフェースヘッダファイルの直訳である。
2つのプログラム例がある:
- oraclew は結果セットのより簡便な取り扱いに向けた、Oracleインタフェースのためのいくつかのユーティリティルーチンを含む。FCLからのクラスユニットを必要とする。
- test01 はこのインタフェースのデモのための簡単なテストプログラムである。
Oracle へ直接接続
Oracle Data Access Component(ODAC)を用いてLazarusとOracleを直接接続することができる。
それはWindows、Mac OS X、Android、Linux、FreeBSDの32-bit、64-bitプラットフォーム双方のためにLazarus(およびFree Pascal)からOracleにネイティブな接続性を提供するコンポーネントのライブラリである。 ODACライブラリはプログラマにより迅速で、ネイティブなOracleデータベースアプリケーションを開発するために設計されている。
Oracle へのOOPアクセス
低レベルインタフェース上で構築され、SQLDBフレームワークはFPCに(TOracleConnectionを用いて)Oracleへのアクセスを提供する。以下も参照のこと Lazarus_Database_Overview#Lazarus_and_Oracle
Lazarusはまたコンポーネント: TOracleConnection を持つ。
- Hostname: 他のSQLDBコネクタ同様、ホスト名やIPアドレスを用いる。もし、DatabaseNameにTNSNAMES.ORAネットサービス名を使う場合は空にしておく
- Username/password: 他のSQLDBコネクタ同様である
- DatabaseName:
- 接続したいOracleサーバのインスタンス/SID または
- TNSNAMES.ORA ファイルのネットサービス名
https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png Note: WindowsでリリースされているFPC/Lazarus x64バージョンはOracleコネクタを含んでいない。もしこれを有効にしたいのであれば、パッチを送られたい。そうすれば付属することになる
トラブルシューティング
クライアントとサーバのキャラクタセット
どのキャラクタセット/NLS設定が有効か知るために、以下のプログラムを実行することができる。
コンパイルの前に正しいサーバ名、ユーザー名、パスワード、データベース名が含まれているか忘れないでほしい。
program oracharset;
{ クライアントとサーバの文字集合/NSL情報を表示する}
{ 以下のパスワードなどは適宜設定されたい。 }
{$mode objfpc}{$H+}
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes,
SysUtils,
sqldb,
oracleconnection;
var
Col: integer;
Conn: TOracleConnection;
Tran: TSQLTransaction;
Q: TSQLQuery;
begin
Conn := TOracleConnection.Create(nil);
Tran := TSQLTransaction.Create(nil);
Q := TSQLQuery.Create(nil);
try
// * 識別情報が必要であれば編集する*
Conn.HostName := '';
Conn.UserName := 'system';
Conn.Password := '';
Conn.DatabaseName := 'XE';
// * 識別情報の終わり*
Conn.Transaction := Tran;
Q.DataBase := Conn;
Conn.Open;
Tran.Active := true;
writeln('Server character set info:');
Q.SQL.Text := 'SELECT value$ FROM sys.props$ WHERE name like ''NLS_%'' ';
Q.Open;
Q.First;
while not (Q.EOF) do
begin
writeln('*****************');
for Col := 0 to Q.Fields.Count - 1 do
begin
try
writeln(Q.Fields[Col].DisplayLabel + ':');
writeln(Q.Fields[Col].AsString);
except
writeln('Error retrieving field ', Col);
end;
end;
Q.Next;
end;
Q.Close;
writeln('');
writeln('Client character set info:');
Q.SQL.Text := 'SELECT * FROM NLS_SESSION_PARAMETERS ';
Q.Open;
Q.First;
while not (Q.EOF) do
begin
writeln('*****************');
for Col := 0 to Q.Fields.Count - 1 do
begin
try
writeln(Q.Fields[Col].DisplayLabel + ':');
writeln(Q.Fields[Col].AsString);
except
writeln('Error retrieving field ', Col);
end;
end;
Q.Next;
end;
Q.Close;
// *バグテストコード例の終わり*
Conn.Close;
finally
Q.Free;
Tran.Free;
Conn.Free;
end;
writeln('Program complete. Press a key to continue.');
readln;
end.ORA-00911 : invalid character
もしこのエラーメッセージが出たら、以下を試すことができる
- もしSELECT文でセミコロンが用いられている場合は取り除いてみる
- 末尾にセミコロンを加えてみる (例えば CALL や EXECUTE文で)
.NETでどれを用いるかこのスレッドを参照されたい。SQLDBでも当てはまるかもしれない: 1(http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/58a27505-a3fb-4cb1-9063-3946b3f26acd)
Go back to Packages List
From the Free Pascal wiki, page "Oracle/ja", as the Internet Archive kept it on 2025-01-17, last changed on 2024-09-22. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
