Ver Mensaje Individual
  #1  
Antiguo 21-12-2006
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Reputación: 20
Choclito Va por buen camino
Problema al ejecutar aplicacion cliente servidor

Hola amigos del foro antes que nada comentarles q trabajo con delphi 7 y firebird 1.5 decirles q gracias al foro pude solucionar un problema que tenia respecto a un sistema cliente servidor donde tenia q registrar el nombre de la PC que hacia de servidor, entonces lo que hice es los siguiente en el evento on create del modulo de la aplicacion hago el siguiente codigo:
Código Delphi [-]
modulo_bd.MDOBD_SAM.Connected:=false;
modulo_bd.MDOT_SAM.Active:=false;
modulo_bd.mdoq_listado_gral.Active:=false;
modulo_bd.mdoq_act_edad.Active:=false;
if FileExists('D:\P_SAM\Config\Config.txt') then
begin
 with TStringList.Create do
  try
    LoadFromFile('D:\P_SAM\Config\Config.txt');

modulo_bd.MDOBD_SAM.DatabaseName:=Strings[0]+':'+'D:\P_SAM\BD\P_SAM.FDB';
modulo_bd.MDOBD_SAM.Params.Add('user_name=SYSDBA');
modulo_bd.MDOBD_SAM.Params.Add('password=masterkey');
modulo_bd.MDOBD_SAM.Connected:=true;
modulo_bd.MDOT_SAM.Active:=true;
modulo_bd.mdoq_listado_gral.Active:=true;
modulo_bd.mdoq_act_edad.Active:=true;

    SaveToFile('D:\P_SAM\Config\Config.txt');
  finally
    Free;
  end;
end
else
begin
modulo_bd.MDOBD_SAM.Connected:=false;
modulo_bd.MDOT_SAM.Active:=false;
f_conectar.ShowModal;
end;
aqui es donde llamo a un archivo txt que tendra el dato de la PC servidora y si no lo tiene llamo a otro form donde registro el nombre de la PC servidora para que luego directamente me llame al archivo txt y la coneccion sea directa el codigo en el onclick del boton del form es el siguiente:
Código Delphi [-]
 function Guardar(Filename: string; Buffer: Pointer; Pos, Count: Cardinal): Boolean;
var
  F: File;
  Escritos: Cardinal;
begin
  Result:= FALSE;
  AssignFile(F,Filename);
  {$I-}
    Rewrite(F,1);
  {$I+}
  if IOResult=0 then
  begin
    inc(PByte(Buffer),Pos);
    Escritos:= 0;
    BlockWrite(F,Buffer^,Count,Escritos);
    Result:= Escritos = Count;
    CloseFile(F);
  end;
end;

procedure TF_Conectar.LMDSpeedButton1Click(Sender: TObject);
begin
modulo_bd.MDOBD_SAM.Connected:=false;
modulo_bd.MDOT_SAM.Active:=false;
modulo_bd.mdoq_listado_gral.Active:=false;
modulo_bd.mdoq_act_edad.Active:=false;
Guardar('D:\P_SAM\Config\Config.txt',PChar(login.Text),0,length(login.Text));
modulo_bd.MDOBD_SAM.DatabaseName:=login.Text+':'+'D:\P_SAM\BD\P_SAM.FDB';
modulo_bd.MDOBD_SAM.Params.Add('user_name=SYSDBA');
modulo_bd.MDOBD_SAM.Params.Add('password=masterkey');
modulo_bd.MDOBD_SAM.Connected:=true;
modulo_bd.MDOT_SAM.Active:=true;
modulo_bd.mdoq_listado_gral.Active:=true;
modulo_bd.mdoq_act_edad.Active:=true;
close;
end;
coloco tambien el codigo de la funcion guardar
Ahora bien una vez ejecutado el sistema todo bien el problema es cuando cierro la aplicacion me sale el sgte mensaje
Exception EAccessViolation in Module P_SAM at 001816E4
Read of Address
luego me marcha el siguiente codigo de la unidad Classes
Código Delphi [-]
  DestroyComponents;
  if FOwner <> nil then FOwner.RemoveComponent(Self);
  inherited Destroy;
La verdad nose como solucionarlo porfavor quisiera q me puedan dar sugerencias de como poder arreglar el problema q tengo puesto q cuando ejecuto desde delphi se detiene la aplicacion y tengo que resetearla y cuando ejecuto directamente el sistema me sale muchos informes de errores
Creo q es por la utilizacion de ttringlist como pudiera arreglarlo??? que es lo q estoy haciendo mal?? muchas gracias por toda la ayuda q me brinden amigos del foro
Responder Con Cita