Difference between revisions of "Oracle/es"

From Free Pascal wiki
Jump to navigationJump to search
Line 22: Line 22:
  
 
{{Note|Released FPC/Lazarus x64 versions on Windows do not include an Oracle connector. If you enable it and test successfully, please submit a patch with the changes so it can be included}}
 
{{Note|Released FPC/Lazarus x64 versions on Windows do not include an Oracle connector. If you enable it and test successfully, please submit a patch with the changes so it can be included}}
 +
 +
== Troubleshooting ==
 +
=== Client and server character sets ===
 +
To get info about what character set/NLS settings are active, you can run the following program.
 +
 +
Please don't forget to fill out correct server name, username, password and database name before compiling.
 +
 +
<syntaxhighlight>
 +
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.
 +
</syntaxhighlight>
 +
 +
=== ORA-00911 : invalid character ===
 +
If you see this error message, you might want to try
 +
* removing a trailing semicolon - ; - if you have it in a SELECT statement
 +
* adding a trailing semicolon (e.g. in CALL or EXECUTE statements)
 +
See this thread which applies to .Net but may apply to SQLDB as well: [http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/58a27505-a3fb-4cb1-9063-3946b3f26acd]
 +
 +
Go back to [[Package_List|Packages List]]
 +
 +
{{LCL Components Footer |TPQTEventMonitor|TODBCConnection}}
 +
{{LCL Components}}
 +
 +
[[Category:Databases]]
 +
[[Category:Components]]
 +
[[Category:FPC]]
 +
[[Category:LCL]]
 +
[[Category:Tutorials]]

Revision as of 11:38, 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:

sqldbcomponents.png

  • 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
Light bulb  Nota: Released FPC/Lazarus x64 versions on Windows do not include an Oracle connector. If you enable it and test successfully, please submit a patch with the changes so it can be included

Troubleshooting

Client and server character sets

To get info about what character set/NLS settings are active, you can run the following program.

Please don't forget to fill out correct server name, username, password and database name before compiling.

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

If you see this error message, you might want to try

  • removing a trailing semicolon - ; - if you have it in a SELECT statement
  • adding a trailing semicolon (e.g. in CALL or EXECUTE statements)

See this thread which applies to .Net but may apply to SQLDB as well: [1]

Go back to Packages List


Return To: LCL Components  — Previous: TPQTEventMonitor Next: TODBCConnection


LCL Components
Component Tab Components
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TTaskDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TCSVDataSet • TSdfDataSet • TBufDataset • TFixedFormatDataSet • TDbf • TMemDataset
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TJSONPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TLvlGraphControl • TShortPathEdit • TSpinEditEx • TFloatSpinEditEx • TTreeFilterEdit • TExtendedTabControl •
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TMySQL57Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TSynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHtmlDataProvider • TIpHttpDataProvider • TIpHtmlPanel
Virtual Controls TVirtualDrawTree • TVirtualStringTree • TVTHeaderPopupMenu