Oracle/fr

From Free Pascal wiki
Jump to navigationJump to search

English (en) español (es) français (fr)

Portail de la base de données

Références:

Tutoriels/articles pratiques :

Bases de données

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

Interface de bas niveau du serveur Oracle

L'interface de bas niveau du serveur Oracle existe d'une unité, oraoci, qui est une traduction directe des fichiers d'en-tête de l'interface d'Oracle.

Il y a deux programmes exemples :

  • oraclew contient quelques routines utilitaire pour l'interface Oracle, pour une gestion plus facile des ensembles résultats. Nécessite l'unité Classes de la FCL.
  • test01 un simple programmme de test pour montrer l'interface.

Accès direct à Oracle

Vous pouvez connecter directement Lazarus et Oracle en utilisant Oracle Data Access Components (ODAC). C'est une bibliothèque de composants qui fournissent une connectivité native à Oracle depuis Lazarus (et Free Pascal) sur Windows, Mac OS X, iOS, Android, Linux, et FreeBSD pour les plates-formes 32-bit et 64-bit. La bibliothèque ODAC est conçue pour aider les programmeurs à développer plus facilement et de façon native des applications natives Oracle.

Ce composant Lazarus est libre en téléchargement.

Accès POO à Oracle

Construit par dessus l'interface de bas-niveau, le framework SQLdb fourni avec FPC prend en charge l'accès à Oracle (en utilisant TOracleConnection qui fonctionne aussi pour Lazarus), voir aussi Lazarus et Oracle.

  • Hostname : comme avec les autres connecteurs SQLdb, utilisez hostname ou l'adresse IP. Laissez vide si vous utilisez un nom de service réseau TNSNAMES.ORA dans le DatabaseName.
  • Username/password : comme avec les autres connecteurs SQLdb.
  • DatabaseName:
    • instance/SID du serveur Oracle auquel vous voulez vous connecter ou
    • le nom de service réseau dans le fichier TNSNAMES.ORA.
Light bulb  Remarque: Les versions FPC/Lazarus x64 sur Windows n'incluent pas de connecteur Oracle. Si vous l'activez et le testez avec succès, SVP veuillez soumettre un correctif avec le changement, il pourra être ainsi inclus.

Résolution de problèmes

Jeu de caractères Client et serveur

Pour obtenir de l'info quel jeu de caractères/réglages NLS est actif, vous pouvez exécuter le programme suivant : SVP, n'oubliez pas de remplir de manière correcte le nom de serveur, le nom d'utilisateur, le mot de passe et le nom de base de données avant de compiler.

program oracharset;

{ Shows client and server character set/NLS info}
{ PLEASE EDIT PASSWORDS ETC BELOW. }

{$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
    // * EDIT IDENTIFYING INFO AS NEEDED*
    Conn.HostName := '';
    Conn.UserName := 'system';
    Conn.Password := '';
    Conn.DatabaseName := 'XE';
    // *END IDENTIFIYING INFO*
    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;
    // *END EXAMPLE BUG TESTING CODE*
    Conn.Close;
  finally
    Q.Free;
    Tran.Free;
    Conn.Free;
  end;
  writeln('Program complete. Press a key to continue.');
  readln;
end.

ORA-00911 : invalid character

Si vous voyez ce message d'erreur, vous pourriez essayer :

  • de retirer un point-virgule terminal - ; - si vous en avez dans un ordre SELECT.
  • d'ajouter un point-virgule terminal (p.ex. dans des ordres CALL ou EXECUTE)

Voir ce fil de discussion qui s'applique à .Net mais qui pourrait s'appliquer aussi bien à SQLdb : [1]

Revenir vers Liste des paquets.