Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-07-2017
carlosw1978 carlosw1978 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 31
Poder: 0
carlosw1978 Va por buen camino
No se crea variable stream

Un gran saludo a toda esta comunidad grandiosa y dios los bendiga... Ok se me presentó un problema con un desarrollo que estoy elaborando, el error me parece extraño o quizás falta de conocimiento, desde el formulario principal en oncreate llamo un método ConfigurarInteface que consiste simplemente en activar o desactivar botones de un menú ribbon, la data donde está registrada para activar estos botones es un campo blob con lo cual utilizo las técnicas de crear el stream (como se consigue en la red). Escribo parte del código del como elaboro el stream.

Código Delphi [-]
Blob := FieldByName('as_modulo') as TBlobField;
ST := CreateBlobStream(Blob, bmRead);
ST.Read(TablaAcc, SizeOf(MapAcceso));

La variable TablaAcc es de tipo récord del MapAcceso; lo más curioso es que ese mismo código lo tengo en el formulario de usuarios.

Bueno esto es lo que me está sucediendo espero que me puedan ayudar.
Responder Con Cita
  #2  
Antiguo 22-07-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Y cual es el error?
Responder Con Cita
  #3  
Antiguo 23-07-2017
carlosw1978 carlosw1978 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 31
Poder: 0
carlosw1978 Va por buen camino
Uy si perdón el error es un mensaje que dice access violation.
Responder Con Cita
  #4  
Antiguo 23-07-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Ok, y si le das a break, en que parte del codigo se para el depurador? Haz probado seguir la ejecucion para saber en que lugar exactamente "se rompe"?
Responder Con Cita
  #5  
Antiguo 23-07-2017
carlosw1978 carlosw1978 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 31
Poder: 0
carlosw1978 Va por buen camino
Si de hecho lo he ejecutado paso a paso y con el debug y la vista de variable local del debug; justamente cuando pasa por la linea ST.read() la variable TablaAcc pierde el registro y es ahí cuando explota.
Responder Con Cita
  #6  
Antiguo 23-07-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Un Access Violation indica que estas accediendo a memoria que no asignaste antes; en palabras simples, cuando le mandas un mensaje a un objeto que no fue asignado, por ejemplo, un nil. Hay casos mas complicados donde se crea un objeto, se libera y luego se le siguen mandando mensajes:

Código Delphi [-]
var
  obj: TMiClase;
begin
  obj := nil;
  obj.Algo; // EAccessViolation
  
  obj := TMiClase.Create;
  obj.Algo; // todo bien
  
  obj.Free; // liberar memoria, pero notese que obj es distinto de nil
  Assert(obj <> nil);
  obj.Algo; // EAccessViolation
end;

Cuales son los valores de todas las variables cuando rompe el programa? Estan todos los objetos creados e inicializados correctamente?

Cuando recuperas el campo blob 'as_modulo', este te devuelve un objeto de tipo TBlobField? Que dice el depurador del valor de esta variable?
Que ocurre cuando llamas a la funcion CreateBlobStream? Esta termina correctamente?

Cual es el valor del objeto TablaAcc?
Responder Con Cita
  #7  
Antiguo 23-07-2017
carlosw1978 carlosw1978 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 31
Poder: 0
carlosw1978 Va por buen camino
Código Delphi [-]
implementation

{$R *.dfm}

uses Funciones, U_Configdb, U_FormTablas, U_TUsuario, U_TBanco, U_TCXC, U_TCXP,
  U_TOtrosActivos, U_FormClave, U_ParaEmpresa, U_FormRespaldarBD;

type MapAcceso = record
  Modulo : String;
  Permiso,
  Nuevo,
  Buscar,
  Guardar,
  Eliminar,
  Modificar,
  Primero,
  Anterior,
  Siguiente,
  Ultimo : Boolean;
end;

var
  TablaAcc: MapAcceso;

•
•
•
•
procedure TForm_Principal.ConfigurarInterface;
var
  Blob: TBlobField;
  ST: TStream;
begin
  with dmPrincipal.FDQ_Mapas do
  begin
    Close;
    SQL.Clear;
    SQL.Add('Select AS_IDReng, AS_Usuario, AS_Modulo, AS_NombMod');
    SQL.Add('From AS_MapAcceso');
    SQL.Add('Where UCase(LTrim(RTrim(AS_Usuario))) = ' + QuotedStr(UpperCase(Usuario.Trim)));
    Open;
    First;
    while not Eof do
    begin
      if Eof then
        Exit;
      Blob := FieldByName('AS_Modulo') as TBlobField;
      ST := CreateBlobStream(Blob, bmRead);
      ST.Seek(0,0);
      ST.Read(TablaAcc, SizeOf(TablaAcc));
      MessageDlg(TablaAcc.Modulo,mtInformation,[mbOK],0);
      if UpperCase(TablaAcc.Modulo.Trim) = 'DOCUCAP' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'BANC' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'CXC' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'CXP' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'OACT' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'EMPR' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'USUA' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'PARABD' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'RESPBD' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'RESTBD' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      if UpperCase(TablaAcc.Modulo.Trim) = 'MANTBD' then
        Action_TBanco.Enabled := TablaAcc.Permiso;
      Next;
    end;
    Close;
  end;
end;
Responder Con Cita
  #8  
Antiguo 24-07-2017
carlosw1978 carlosw1978 is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 31
Poder: 0
carlosw1978 Va por buen camino
Agustín ya encontré el problema me guiaste con la última respuesta que chequeara las iniciaciones de variables y me di cuenta que el récord MapAcceso faltaba un campo adicional y por eso arrojaba el error y no me percataba de esto. Muchas gracias Agustín por tu apoyo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Asignar el valor de una variable de php a una variable js que puede no existir jandroruiz PHP 5 04-03-2013 12:23:02
Variable en Atributo [Edit(Variable).Text] martini002 Varios 9 21-06-2012 17:08:05
No me crea el SERVICIO MON___ API de Windows 5 09-01-2008 20:26:38
MD5 de un Stream. JXJ Varios 3 03-10-2007 18:52:40
No me crea la bd al instalar davgoncam Oracle 8 07-03-2004 14:31:26


La franja horaria es GMT +2. Ahora son las 11:42:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi