Difference between revisions of "Oracle/es"
Line 46: | Line 46: | ||
var | var | ||
Col: integer; | Col: integer; | ||
− | Conn: TOracleConnection; | + | Conn: TOracleConnection; { para la conexión } |
− | Tran: TSQLTransaction; | + | Tran: TSQLTransaction; { para la transacción } |
− | Q: TSQLQuery; | + | Q: TSQLQuery; { para la query o consulta } |
begin | begin | ||
− | Conn := TOracleConnection.Create(nil); | + | Conn := TOracleConnection.Create(nil); { Creamos Conexión reservando recursos } |
− | Tran := TSQLTransaction.Create(nil); | + | Tran := TSQLTransaction.Create(nil); {Creamos Transacción reservando recursos} |
− | Q := TSQLQuery.Create(nil); | + | Q := TSQLQuery.Create(nil); { Creamos consulta reservando recursos } |
try | try | ||
// * EDITAR INFORMACIÓN DE IDENTIFICACIÓN SEGÚN SEA NECESARIO * | // * EDITAR INFORMACIÓN DE IDENTIFICACIÓN SEGÚN SEA NECESARIO * | ||
Line 61: | Line 61: | ||
// * FIN INFORMACIÓN DE IDENTIFICACIÓN * | // * FIN INFORMACIÓN DE IDENTIFICACIÓN * | ||
Conn.Transaction := Tran; | Conn.Transaction := Tran; | ||
− | Q.DataBase := Conn; | + | Q.DataBase := Conn; { Pasamos los datos de conexión a la Query } |
− | Conn.Open; | + | Conn.Open; { Abrimos conexión } |
Tran.Active := true; | Tran.Active := true; | ||
Line 69: | Line 69: | ||
Q.Open; | Q.Open; | ||
Q.First; | Q.First; | ||
− | while not (Q.EOF) do | + | while not (Q.EOF) do { Mientras la query no nos devuelva final hacer esto... } |
begin | begin | ||
writeln('*****************'); | writeln('*****************'); | ||
− | for Col := 0 to Q.Fields.Count - 1 do | + | for Col := 0 to Q.Fields.Count - 1 do { desde columna 0 hasta cuenta de campos-1...} |
begin | begin | ||
try | try | ||
− | writeln(Q.Fields[Col].DisplayLabel + ':'); | + | writeln(Q.Fields[Col].DisplayLabel + ':'); { Imprimimos en pantalla la etiqueta del campo con índice Col } |
− | writeln(Q.Fields[Col].AsString); | + | writeln(Q.Fields[Col].AsString); { Imprimimos en pantalla el campo con índice Col de la query, retornado como cadena } |
except | except | ||
writeln('Error solicitando campo ', Col); | writeln('Error solicitando campo ', Col); | ||
Line 106: | Line 106: | ||
Q.Close; | Q.Close; | ||
// *FIN DE CÓDIGO DE EJEMPLO DE TESTEO DE ERROR* | // *FIN DE CÓDIGO DE EJEMPLO DE TESTEO DE ERROR* | ||
− | Conn.Close; | + | Conn.Close; { Cerramos la conexión } |
finally | finally | ||
− | Q.Free; | + | Q.Free; { Liberamos los recursos del query } |
− | Tran.Free; | + | Tran.Free; { Liberamos los recursos de la transacción } |
− | Conn.Free; | + | Conn.Free; { Liberamos los recursos de la conexión } |
end; | end; | ||
writeln('Programa completado. Presiona cualquier tecla para continuar.'); | writeln('Programa completado. Presiona cualquier tecla para continuar.'); |
Revision as of 12:44, 7 May 2015
Interface de bajo nivel del Servidor de BBDD Oracle
La interface 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 interface Oracle.
Hay dos programas de ejemplo:
- oraclew contiene algunas rutinas para el interface Oracle, para un manejo más fácil del conjunto resultante. Necesita la unidad classes del FCL.
- test01 es un simple programa para demostrar la interface.
OOP access to Oracle
Built over the low-level interface, the SQLDB framework supplied with FPC supports accessing Oracle (using TOracleConnection); see also Lazarus_Database_Overview#Lazarus_and_Oracle
Lazarus also has a component:
- Hostname: as with other sqldb connectors, use hostname or IP address. Leave empty if you use a TNSNAMES.ORA net service name in DatabaseName
- Username/password: same as with other sqldb connectors
- DatabaseName:
- instance/SID of the Oracle server you want to connect to or
- net service name in a TNSNAMES.ORA file
Resolución de problemas
Conjuntos de caracteres para Cliente y Servidor
To get info about what character set/NLS settings are active, you can run the following program. Podemos arrancar el siguiente programa para obtener información sobre que conjunto de caracteres/NLS se encuentran activos. Por favor, no olvides rellenar correctametne los datos de nombre de servidor, nombre de base de datos, nombre de usuario y contraseña antes de compilar.
program oracharset;
{ Muestra información del conjunto de caracteres/NLS (Soporte Nacional de Lenguaje) utilizado en Cliente y Servidor}
{ Por favor edita los datos de conexión primero: nombre usuario, contraseña, nombre de servidor y base de datos. }
{$mode objfpc}{$H+}
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes,
SysUtils,
sqldb,
oracleconnection;
var
Col: integer;
Conn: TOracleConnection; { para la conexión }
Tran: TSQLTransaction; { para la transacción }
Q: TSQLQuery; { para la query o consulta }
begin
Conn := TOracleConnection.Create(nil); { Creamos Conexión reservando recursos }
Tran := TSQLTransaction.Create(nil); {Creamos Transacción reservando recursos}
Q := TSQLQuery.Create(nil); { Creamos consulta reservando recursos }
try
// * EDITAR INFORMACIÓN DE IDENTIFICACIÓN SEGÚN SEA NECESARIO *
Conn.HostName := ''; { HostName: nombre del equipo al que conectamos }
Conn.UserName := 'system'; { UserName: usuario de BB.DD con el que nos validamos }
Conn.Password := ''; { Password: contraseña del usuario para conectar a la BB.DD }
Conn.DatabaseName := 'XE'; { DatabaseName: nombre de la base de datos (BB.DD)a la que conectamos dentro del servidor }
// * FIN INFORMACIÓN DE IDENTIFICACIÓN *
Conn.Transaction := Tran;
Q.DataBase := Conn; { Pasamos los datos de conexión a la Query }
Conn.Open; { Abrimos conexión }
Tran.Active := true;
writeln('Información del conjunto de caracteres del Servidor:');
Q.SQL.Text := 'SELECT value$ FROM sys.props$ WHERE name like ''NLS_%'' ';
Q.Open;
Q.First;
while not (Q.EOF) do { Mientras la query no nos devuelva final hacer esto... }
begin
writeln('*****************');
for Col := 0 to Q.Fields.Count - 1 do { desde columna 0 hasta cuenta de campos-1...}
begin
try
writeln(Q.Fields[Col].DisplayLabel + ':'); { Imprimimos en pantalla la etiqueta del campo con índice Col }
writeln(Q.Fields[Col].AsString); { Imprimimos en pantalla el campo con índice Col de la query, retornado como cadena }
except
writeln('Error solicitando campo ', Col);
end;
end;
Q.Next;
end;
Q.Close;
writeln('');
writeln('Información del conjunto de caracteres del cliente:');
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 solicitando campo ', Col);
end;
end;
Q.Next;
end;
Q.Close;
// *FIN DE CÓDIGO DE EJEMPLO DE TESTEO DE ERROR*
Conn.Close; { Cerramos la conexión }
finally
Q.Free; { Liberamos los recursos del query }
Tran.Free; { Liberamos los recursos de la transacción }
Conn.Free; { Liberamos los recursos de la conexión }
end;
writeln('Programa completado. Presiona cualquier tecla para continuar.');
readln;
end.
ORA-00911 : invalid character
Si visualizas este mensaje de error (o su equivalente en español (carácter no válido), puedes probar lo siguiente:
- Suprimiendo el punto y coma - ; - si lo has puesto en una sentencia SELECT.
- Añadiendo el punto y coma (e.g. en sentencias CALL o EXECUTE)
Ver este hilo que se aplica a .Net pero que se puede aplicar también a SQLDB: [1]
Volver a Packages List
Return To: LCL Components | — Previous: TPQTEventMonitor | Next: TODBCConnection |