Hola , tengo un serio problema , tengo un programa en delphi que usa sql server para leer,agregar,editar y borrar registros de una base de datos , en la aplicacion todo funciona perfecto , agrega,lee,edita y borra sin ningun problema , el tema comienza cuando uso los reportes y los graficos , cuando los cargo solo se ven los datos viejos , cuando reinicio toda la aplicacion recien ahi se actualizan los registros de los reportes y los graficos , siempre uso las mismas funciones , esta es la unit :
Código Delphi
[-]
unit Conexion;
interface
uses Windows, SysUtils, Data.SqlExpr,
Data.DBXMSSQL, Data.DB, Data.Win.ADODB, Classes;
type
TConexion = class
private
public
conexion_now: TADOConnection;
c: string;
Constructor Create; overload;
function Conectar(): boolean;
function Desconectar(): boolean;
function EjecutarComando(sql: string): boolean;
function CargarComando(sql: string): integer;
implementation
constructor TConexion.Create;
begin
inherited;
conexion_now := TADOConnection.Create(nil);
c := '''';
end;
function TConexion.Conectar(): boolean;
begin
try
begin
conexion_now.LoginPrompt := false;
conexion_now.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=test;Password=test;Initial Catalog=test;Data Source=localhost\SQLEXPRESS';
conexion_now.Connected := true;
Result := true;
end;
except
begin
Result := false;
end;
end;
end;
function TConexion.Desconectar(): boolean;
begin
try
begin
conexion_now.Connected := false;
Result := true;
end;
except
begin
Result := false;
end;
end;
end;
function TConexion.EjecutarComando(sql: string): boolean;
var
comando: TADOQuery;
begin
Conectar();
try
begin
comando := TADOQuery.Create(nil);
comando.Connection := conexion_now;
sql := StringReplace(sql, '"', c, [rfReplaceAll, rfIgnoreCase]);
comando.Parameters.Clear;
comando.sql.Text := sql;
comando.Open;
comando.Edit;
comando.ExecSQL;
comando.Post;
comando.Free;
Result := true;
end;
except
begin
Result := false;
end;
end;
Desconectar();
end;
function TConexion.CargarComando(sql: string): integer;
var
comando: TADOQuery;
count: integer;
begin
Conectar();
count := 0;
comando := TADOQuery.Create(nil);
sql := StringReplace(sql, '"', c, [rfReplaceAll, rfIgnoreCase]);
comando.Connection := conexion_now;
comando.sql.Add(sql);
comando.Open;
while not comando.eof do
begin
Inc(count);
comando.Next;
end;
comando.Free;
Desconectar();
Result := count;
end;
end.
Este es el codigo de uno de los graficos :
Código Delphi
[-]
procedure TFormGrafico.FormCreate(Sender: TObject);
var
Conexion: TConexion;
comando: TADOQuery;
sql: string;
c: string;
producto: string;
precio: integer;
begin
Conexion := TConexion.Create();
Conexion.Conectar();
comando := TADOQuery.Create(nil);
sql := 'select nombre_producto,precio from productos prod,proveedores prov where prod.id_proveedor=prov.id_proveedor';
sql := StringReplace(sql, '"', c, [rfReplaceAll, rfIgnoreCase]);
comando.Connection := Conexion.conexion_now;
comando.sql.Add(sql);
comando.Open;
Chart1.Series[0].Clear;
while not comando.eof do
begin
producto := comando.FieldByname('nombre_producto').AsString;
precio := comando.FieldByname('precio').AsInteger;
Chart1.Series[0].AddY(precio, producto);
comando.Next;
end;
comando.Free;
Conexion.Desconectar();
Conexion.Free;
end;
Aunque es lo mismo , porque en el reporte quick report no uso estas funciones pero aun asi es el mismo tema , en la aplicacion no se ven los datos nuevos pero si cuando reinicio toda la aplicacion.
Nota : Intente tanto con ADOQuery como con ADOCommand.
¿ Alguien me podria ayudar ?