PDA

Ver la Versión Completa : Base de datos SQL Server no se actualiza


Ramsay
30-05-2016, 00:05:34
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 :


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: TADOCommand;
begin

Conectar();

try
begin
comando := TADOCommand.Create(nil);

sql := StringReplace(sql, '"', c, [rfReplaceAll, rfIgnoreCase]);

comando.Connection := conexion_now;
comando.Parameters.Clear;
comando.CommandText := sql;
comando.Execute;

comando.Free;

Result := true;

end;
except
begin
Result := false;
end;
end;

Desconectar();

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 :


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 ?

Ramsay
30-05-2016, 02:03:49
Hola , ya eh solucionado los graficos solo me falta el reporte de quick report , tenia que volver a llamar la funcion de cargar grafico desde el form principal , llamo al reporte desde un boton con el codigo :


frmReporteListadoProductos.FormReporte.reporte.Update;
frmReporteListadoProductos.FormReporte.reporte.Preview;


En ese formulario nuevo estan los componentes ADOConnection,TADOQuery,TDataSource colocados desde el tool palette.

¿ Como puedo lograr que se vean los datos actualizados ?

Ramsay
18-06-2016, 02:38:29
Ya casi esta , ya se actualizan los datos con sus ediciones y borrados , pero no cuando se agrega un nuevo dato.

El codigo :

Form1.Conexion.BeginTrans();
Form1.Conexion.CommitTrans();

Form1.Datos.DataSet.Refresh;
Form1.Consulta.Refresh;

Form1.reporte.Update;
Form1.reporte.Preview;

¿ Que detalle me falta para terminar ? , Por favor alguien responda siempre hablo solo :(