Ok... me cogiste de buenas pulgas y pues...
Antes que leas el código recuerda:
Buscar siempre en google.
Aquí una entrada en Delphi FAQ's
temas relacionados en About.com
Ahora sí... una aproximación a lo que te sugerí. La implementación depende de tu programa.
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
function OpenDataset(DataSet : TDataSet; StrSQL : string; Parameters : array of Variant) : Boolean;
public
procedure MyOnException(Sender: TObject; E : Exception);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MyOnException(Sender: TObject; E: Exception);
begin
Application.ShowException(E);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := MyOnException;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lQry : TQuery;
begin
lQry := TQuery.Create(Self);
try
try
if lQry.Active then
lQry.Close;
lQry.Open;
except
on e : EDatabaseError do
begin
if Pos('NO SQL', UpperCase(E.Message)) > 0 then
raise Exception.Create('No ha establecido la cadena de consulta.')
else
raise Exception.Create('Ha ocurrido un error en el acceso a datos. Error: '+e.Message);
end;
on e : exception do
begin
raise Exception.Create('Ha ocurrido un error general al ejecutar la consulta. Error: '+e.Message);
end;
end;
finally
lQry.Free;
end;
end;
function TForm1.OpenDataset(DataSet: TDataSet; StrSQL: string;
Parameters: array of Variant): Boolean;
var
i : Integer;
begin
if DataSet.Active then
DataSet.Close;
if DataSet is TQuery then
begin
TQuery(DataSet).SQL.Text := StrSQL;
for i := 0 to Length(Parameters) - 1 do
begin
TQuery(DataSet).Params[i].Value := Parameters[i];
end;
end;
try
DataSet.Open;
except
on e : Exception do
begin
raise;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
lQry : TQuery;
begin
lQry := TQuery.Create(Self);
try
OpenDataset(lQry, 'select * from tabla where id = :id', [123456]);
finally
lQry.Free;
end;
end;
end.