jueves, agosto 23, 2012

Lazarus (freepascal), acceso a Oracle

 ACCESO A ORACLE DESDE LAZARUS (FREE PASCAL):

Desarrollar en Lazarus tiene un grave problema: Hoy en día se utiliza Google como herramienta de documentación para el desarrollo de aplicaciones. En el caso de Lazarus no hay más remedio ya que no hay ninguna ayuda integrada en el IDE. Sin embargo en Internet no hay muchos ejemplos de código freePascal cuando toca hacer algo en el entorno de trabajo (conexión a Oracle por ejemplo).

Digo esto en comparación con otros lenguajes o plataformas como C# o VB.NET por ejemplo. En estos casos el problema suele ser las diferencias que hay entre los diferentes framework, pero ese es otro asunto.

 1.-Forma gráfica: añadir control TORACLECONNECTION de la pestaña SQLdb de la barra de herramientas.

El problema es que no hay una ayuda clara para saber lo que hay que poner en los campos principales. Esto es lo que yo he necesitado:
  1. En DatabaseName ponemos la entrada TNS del fichero TNSNAMES.ORA del cliente Oracle.
  2. En UserName ponemos el usuario Oracle.
  3. En Password la password de ese usuario Oracle.
y nada más. En cuanto pongamos la propiedad CONNECTED a TRUE veremos si conecta bien o no.

2.-Forma no gráfica de hacer la conexión y una ejecución de una instrucción SQL.

NOTA IMPORTANTE: como antes he metido en control gráfico TORACLECONNECTION, este objeto se ha creado en la carga del formulario. Si no agregamos el control de forma gráfica, tendremos que declara la variable en la zona de VAR, y crearla después del BEGIN:

var
OracleConnection1: TOracleConnection;
...
begin
OracleConnection1 := TOracleConnection.Create(nil);
...



El código fuente para copia-pega:

procedure TForm1.Button1Click(Sender: TObject);
var
  SQLquery1: TSQLQuery;
  SQLtransaction1: TSQLTransaction;
begin
  SQLquery1 := TSQLQuery.Create(nil);
  SQLtransaction1 := TSQLTransaction.Create(nil);
  try
    try
      with OracleConnection1 do begin
           DatabaseName:='instancia.host.es';
           UserName:='xxxxxxx';
           Password:='xxxxxxx';
           Transaction := SQLtransaction1;
      end;
      OracleConnection1.Connected:=true;
      SQLtransaction1.Active:=true;
      SQLquery1.DataBase := OracleConnection1;
      SQLquery1.SQL.Text := 'select * from tabla1';
      SQLquery1.Open;
      SQLquery1.Last;
      ShowMessage (intToStr(SQLquery1.RecordCount));
      SQLquery1.First;
      while not SQLquery1.EOF do
      begin
        ShowMessage (SQLquery1.FieldByName('campo1').AsString);
        SQLquery1.Next;
      end;
    finally
      SQLtransaction1.Free;
      SQLquery1.Free;
      OracleConnection1.Free;
    end;
  except
    on E: Exception do
      writeln(E.message);
  end;
end;

Más información, aunque más orientada a la base de datos Firebird en el wiki de FreePascal, tema: SQLdb Tutorial.

Saludos.

2 comentarios:

José Torres dijo...

Muy buen artículo, soy un fanático de Lazarus, lo veo como una herramienta con gran futuro y me alegra que otros compartan esa opinión.
Respecto de la ayuda en línea, Lazarus sí tiene un excelente sisten=ma de ayuda, sólo hay que integrarlo. En mi artículo en http://pascalylazarus.blogspot.com/2012/05/como-integrar-la-ayuda-en-linea-en.html explico cómo hacerlo.

Mikelats dijo...

Hola José,
Me alegro de encontrarme con otro entusiasta de Pascal. Gracias por la información para integrar la ayuda. Me será muy útil.

He visitado tu blog y estoy de acuerdo en que la combinación freepascal-Lazarus es adecuada para la gestión empresarial, y no tiene nada que envidiar a otros entornos considerados más modernos.

Desde este sitio espero poner mi granito de arena para que al menos se conozca y se valore como opción seria de desarrollo.

Saludos.