Sign in Join
Wiki copytemporary

Oracle/es: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Oracle/es

OldNewLine
1+## Interfaz de bajo nivel del Servidor de BBDD Oracle
2+
3+   La interfaz de bajo nivel al servidor de BB.DD de Oracle existe en una unidad, **oraoci**, la cual es una traducción directa de los ficheros de cabecera del interfaz Oracle.
4+
5+   Hay dos programas de ejemplo:
6+
7+- **oraclew** contiene algunas rutinas para el interfaz Oracle, para un manejo más fácil del conjunto resultante. Necesita la unidad **classes** del FCL.
8+- **test01** es un simple programa para demostrar la interface.
9+
10+## Acceso OOP a Oracle
11+
12+   Construido sobre la interfaz de bajo nivel, el marco de trabajo SQLDB que viene con FPC soporta el acceso a Oracle (utilizando TOracleConnection); ver también [[Lazarus Database Overview|Lazarus_Database_Overview#Lazarus_and_Oracle]]
13+
14+   Lazarus dispone de un componente:
15+
16+<figure>
17+<img src="sqldbcomponents.png" title="sqldbcomponents.png" />
18+<figcaption>sqldbcomponents.png</figcaption>
19+</figure>
20+
21+- Hostname: igual que con otros conectores sqldb, utilizaremos el nombre de la máquina o la dirección IP. Dejaremos vacío si se utiliza el servicio de nombres de red TNSNAMES.ORA en DatabaseName.
22+- Username/password: igual que con otros conectores sqldb.
23+- DatabaseName:
24+ - Instancia/SID del servidor Oracle al que se necesita conectar **or**
25+ - servicio de nombres de red en un fichero TNSNAMES.ORA.
26+
27+. A fecha de realizar esta traducción de su versión en inglés no se si este inconveniente ha sido subsanado ya, si alguien lo sabe que corrija esto.
28+
29+## Resolución de problemas
30+
31+### Conjuntos de caracteres para Cliente y Servidor
32+
33+   Podemos arrancar el siguiente programa para obtener información sobre que conjunto de caracteres/NLS se encuentran activos. Por favor, no olvides rellenar correctamente los datos de nombre de servidor, nombre de base de datos, nombre de usuario y contraseña antes de compilar.
34+
35+``` pascal
36+ program oracharset;
37+
38+ { Muestra información del conjunto de caracteres/NLS (Soporte Nacional de Lenguaje) utilizado en Cliente y Servidor}
39+ { Por favor edita los datos de conexión primero: nombre usuario, contraseña, nombre de servidor y base de datos. }
40+
41+ {$mode objfpc}{$H+}
42+
43+ uses {$IFDEF UNIX} {$IFDEF UseCThreads}
44+ cthreads, {$ENDIF} {$ENDIF}
45+ Classes,
46+ SysUtils,
47+ sqldb,
48+ oracleconnection;
49+
50+ var
51+ Col: integer;
52+ Conn: TOracleConnection; { para la conexión }
53+ Tran: TSQLTransaction; { para la transacción }
54+ Q: TSQLQuery; { para la query o consulta }
55+ begin
56+ Conn := TOracleConnection.Create(nil); { Creamos Conexión reservando recursos }
57+ Tran := TSQLTransaction.Create(nil); {Creamos Transacción reservando recursos}
58+ Q := TSQLQuery.Create(nil); { Creamos consulta reservando recursos }
59+ try
60+ // * EDITAR INFORMACIÓN DE IDENTIFICACIÓN SEGÚN SEA NECESARIO *
61+ Conn.HostName := ''; { HostName: nombre del equipo al que conectamos }
62+ Conn.UserName := 'system'; { UserName: usuario de BB.DD con el que nos validamos }
63+ Conn.Password := ''; { Password: contraseña del usuario para conectar a la BB.DD }
64+ Conn.DatabaseName := 'XE'; { DatabaseName: nombre de la base de datos (BB.DD)a la que conectamos dentro del servidor }
65+ // * FIN INFORMACIÓN DE IDENTIFICACIÓN *
66+ Conn.Transaction := Tran;
67+ Q.DataBase := Conn; { Pasamos los datos de conexión a la Query }
68+ Conn.Open; { Abrimos conexión }
69+ Tran.Active := true;
70+
71+ writeln('Información del conjunto de caracteres del Servidor:');
72+ Q.SQL.Text := 'SELECT value$ FROM sys.props$ WHERE name like ''NLS_%'' ';
73+ Q.Open;
74+ Q.First;
75+ while not (Q.EOF) do { Mientras la query no nos devuelva final hacer esto... }
76+ begin
77+ writeln('*****************');
78+ for Col := 0 to Q.Fields.Count - 1 do { desde columna 0 hasta cuenta de campos-1...}
79+ begin
80+ try
81+ writeln(Q.Fields[Col].DisplayLabel + ':'); { Imprimimos en pantalla la etiqueta del campo con índice Col }
82+ writeln(Q.Fields[Col].AsString); { Imprimimos en pantalla el campo con índice Col de la query, retornado como cadena }
83+ except
84+ writeln('Error solicitando campo ', Col);
85+ end;
86+ end;
87+ Q.Next;
88+ end;
89+ Q.Close;
90+
91+ writeln('');
92+ writeln('Información del conjunto de caracteres del cliente:');
93+ Q.SQL.Text := 'SELECT * FROM NLS_SESSION_PARAMETERS ';
94+ Q.Open;
95+ Q.First;
96+ while not (Q.EOF) do
97+ begin
98+ writeln('*****************');
99+ for Col := 0 to Q.Fields.Count - 1 do
100+ begin
101+ try
102+ writeln(Q.Fields[Col].DisplayLabel + ':');
103+ writeln(Q.Fields[Col].AsString);
104+ except
105+ writeln('Error solicitando campo ', Col);
106+ end;
107+ end;
108+ Q.Next;
109+ end;
110+ Q.Close;
111+ // *FIN DE CÓDIGO DE EJEMPLO DE TESTEO DE ERROR*
112+ Conn.Close; { Cerramos la conexión }
113+ finally
114+ Q.Free; { Liberamos los recursos de la query }
115+ Tran.Free; { Liberamos los recursos de la transacción }
116+ Conn.Free; { Liberamos los recursos de la conexión }
117+ end;
118+ writeln('Programa completado. Presiona cualquier tecla para continuar.');
119+ readln;
120+ end.
121+```
122+
123+### ORA-00911 : invalid character
124+
125+   Si visualizas este mensaje de error (o su equivalente en español (carácter no válido), puedes probar lo siguiente:
126+
127+- Suprimiendo el punto y coma - ; - si lo has puesto en una sentencia SELECT.
128+- Añadiendo el punto y coma (e.g. en sentencias CALL o EXECUTE)
129+
130+   Ver este hilo que se aplica a .Net pero que se puede aplicar también a SQLDB: [1](http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/58a27505-a3fb-4cb1-9063-3946b3f26acd)
131+
132+   Volver a [[Package List|Packages List]]
133+
134+---
135+*From the Free Pascal wiki, page "Oracle/es", as it stood on 2020-02-23 after a change by Trev, out of the wiki's dump of 2024-05-26. 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](/wiki-contact).*

Back to history