Hola, asi esta la cosa: Tengo un programa que es sobre un biblioteca, hago un reporte del cual el codigo es el siguiente:
Código Delphi
[-]
modulodedatos.FiltradoL;
modulodedatos.ADOQuery2.Open;
modulodedatos.ADOQuery2.First;
ComboBox1.Items.Clear;
while not modulodedatos.ADOQuery2.Eof do
begin
ComboBox1.Items.Add(modulodedatos.ADOQuery2['Titulo']);
modulodedatos.ADOQuery2.Next;
end;
modulodedatos.ADOQuery2.Close;
El de FiltradoL es el siguiente:
Código Delphi
[-]
ADOQUERY2.SQL.Clear;
ADOQUERY2.SQL.add('select distinct Titulo from libros order by Titulo');
Esos procedimientos para llenar un ComboBox de los registros detitulos diferentes de titulos de libros, de ahi, hago la union de DBGrid con el Adoquery
Código Delphi
[-]
titulo:=ComboBox1.Text;
modulodedatos.ConsultaLibroTitulo(titulo);
modulodedatos.midatasource3.DataSet:=modulodedatos.ADOQuery1;
modulodedatos.ADOQuery1.Open;
DBGrid1.DataSource:=modulodedatos.midatasource3;
Imprimo el reporte
Código Delphi
[-]
pformareporte.Preview;
close;
limpiar;
modulodedatos.ADOQuery1.Close;
modulodedatos.miadotable.Active:=False;
De ahi me voy a actualizar usuario,primero lo busco
Código Delphi
[-]
if modulodedatos.BuscaUsuario(id)=true then
begin
edit1.Enabled:=false;
Button1.Enabled:=false;
Button4.Enabled:=true;
Button2.Enabled:=true;
Button3.Enabled:=true;
Button5.Enabled:=true;
edit2.Enabled:=true;
edit3.Enabled:=true;
edit4.Enabled:=true;
edit5.Enabled:=true;
edit8.Enabled:=true;
edit9.Enabled:=true;
edit8.Text:=modulodedatos.miadotable2['ApellidoPaterno'];
edit9.Text:=modulodedatos.miadotable2['ApellidoMaterno'];
edit2.Text:=modulodedatos.miadotable2['Nombre'];
edit3.Text:=modulodedatos.miadotable2['Direccion'];
edit4.Text:=modulodedatos.miadotable2['Telefono'];
edit5.Text:=modulodedatos.miadotable2['Email'];
if modulodedatos.miadotable2['Status']='0' then RadioButton1.Checked:=true
else radiobutton2.Checked:=true;
El codigo de BuscaUsuario es
Código Delphi
[-]
modulodedatos.miadotable2.TableName:='usuarios';
modulodedatos.midatasource2.DataSet:=miadotable2;
modulodedatos.miadotable2.Active:=true;
if modulodedatos.miadotable2.Locate('IdUsuario',id,[]) = true then
BuscaUsuario:=true
else
BuscaUsuario:=false;
Hasta ahi todo va bien, pero ya que cambie algunos campos de datos, le doy actualizar que hace lo siguente:
Código Delphi
[-]
id:=StrToint(edit1.Text);
apaterno:=edit8.Text;
amaterno:=edit9.Text;
nombre:=edit2.Text;
dir:=edit3.Text;
tel:=edit4.Text;
mail:=edit5.Text;
if (RadioButton1.Checked= true) then
status:='0'
else
status:='1';
modulodedatos.ActualizaUsuario (id,apaterno,amaterno,nombre,dir,tel,mail,status);
Y ActualizaUsuario tiene
Código Delphi
[-]
modulodedatos.ADOQuery1.SQL.Clear;
modulodedatos.ADOQuery1.SQL.Add('update usuarios set ');
modulodedatos.ADOQuery1.SQL.Add('ApellidoPaterno=:apaterno,');
modulodedatos.ADOQuery1.SQL.Add('ApellidoMaterno=:amaterno,');
modulodedatos.ADOQuery1.SQL.Add('Nombre=:nombre,');
modulodedatos.ADOQuery1.SQL.Add('Email=:mail,');
modulodedatos.ADOQuery1.SQL.Add('Direccion=:dir,');
modulodedatos.ADOQuery1.SQL.Add('Telefono=:tel,');
modulodedatos.ADOQuery1.SQL.Add('Status=:status');
modulodedatos.ADOQuery1.SQL.Add(' where usuarios.IdUsuario=:id');
modulodedatos.ADOQuery1.Parameters.ParamByName('id').Value := id;
modulodedatos.ADOQuery1.Parameters.ParamByName('apaterno').Value := apaterno;
modulodedatos.ADOQuery1.Parameters.ParamByName('amaterno').Value:= amaterno;
modulodedatos.ADOQuery1.Parameters.ParamByName('nombre').Value := nombre;
modulodedatos.ADOQuery1.Parameters.ParamByName('mail').Value := mail;
modulodedatos.ADOQuery1.Parameters.ParamByName('dir').Value := dir;
modulodedatos.ADOQuery1.Parameters.ParamByName('tel').Value := tel;
modulodedatos.ADOQuery1.Parameters.ParamByName('status').Value := status;
modulodedatos.ADOQuery1.ExecSQL;
modulodedatos.miadotable2.Refresh;
Pero al momento de pasar al Refresh me manda el error:
Código PHP:
...EAccessViolation with message AccessViolation at adress 1F453E7E in module msado15.dll. Write of address 00CD1010. Process stopped...
No se que tengo mal, tal vez hay algo mal en el reporte o algo asi, espero no abrumarlos tanto, que le entiendan al codigo y que me puedan ayudar. Por separado los hace bien, pero cuando sigo esa secuencia de funciones falla, gracias por su tiempo y atencion