Sign in Join
Wiki copytemporary

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つのプログラム例がある:

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 を持つ。

https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png Note: WindowsでリリースされているFPC/Lazarus x64バージョンはOracleコネクタを含んでいない。もしこれを有効にしたいのであれば、パッチを送られたい。そうすれば付属することになる

トラブルシューティング

クライアントとサーバのキャラクタセット

どのキャラクタセット/NLS設定が有効か知るために、以下のプログラムを実行することができる。

コンパイルの前に正しいサーバ名、ユーザー名、パスワード、データベース名が含まれているか忘れないでほしい。

pascal
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

もしこのエラーメッセージが出たら、以下を試すことができる

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