Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Debates (https://www.clubdelphi.com/foros/forumdisplay.php?f=29)
-   -   violation adress (https://www.clubdelphi.com/foros/showthread.php?t=67536)

tazluz 21-04-2010 23:12:15

violation adress
 
el problema es el siguiente: en una aplicacion utilizo un query para dar de alta y todo correcto, al actualizar la tabla con el query dinamico me provoca un error de violation de adrees xxxxx . y en tiempo de ejecuci0on me manda otro error ''la tabla no existe odbc de oracle" pero resulta que la tabla si existe, en la cual inserto antes de querer hacer update

Caral 22-04-2010 03:07:29

Hola
En cuando a lo que preguntas no se entiende mucho, seria bueno que aportaras el codigo que tienes y en que parte da el error.
Saludos

Neftali [Germán.Estévez] 22-04-2010 10:28:29

Ejecuta paso a paso e intenta saber qué línea da el "access violation". Normalmente se deben a intentar acceder a objetos liberados o no creados correctamente.
Eso te puede dar alguna pista más.

tazluz 22-04-2010 20:30:04

El problema es el siguiente: en una aplicacion utilizo un query para dar de alta y todo correcto, al actualizar la tabla con el query dinamico me provoca un error de violation de adrees xxxxx . y en tiempo de ejecucion me manda otro error ''la tabla no existe odbc de oracle" pero resulta que la tabla si existe, en la cual inserto antes de querer hacer update el codigo es el siguiente

Código Delphi [-]
   if BitBtnGuardar.Caption='&Modificar' then
    begin
      With DataModuleSubespec.QueryExp_Orbita  do
      begin
        Sql.Clear;
        Sql.Add('Update Expediente_Orbita Set ID_PACIENTE =:Param1,CVE_SERVICIO=:Param2,ID_MEDICO=:Param3,');
        Sql.Add('FECHA=:Param4,ATENDIDO=:Param5,SEC1_PADACT=:Param6,SEC1_HEREDOFA=:Param7,SEC1_APP=:Param8,'  );
        Sql.Add('SEC1_APNP=:Param9,SEC1_HEXT=:Param10,SEC1_OD_AV=:Param11,SEC1_OD_CONST=:Param12,SEC1_OI_AV=  :Param13,');
        Sql.Add('SEC1_OI_CONST=:Param14,SEC1_OD_QUERATOM=:Param15,SEC1_OI_QUERATOM=:Param16,SEC1_OD_COPT=:Pa  ram17,');
        Sql.Add('SEC1_OI_COPT=:Param18,SEC1_OD_LEJOS=:Param19,SEC1_OI_LEJOS=:Param20,SEC1_OD_AVL=:Param21,')  ;
        SQL.Add('SEC1_OI_AVL=:Param22,SEC1_OD_CERCA=:Param23,SEC1_OI_CERCA=:Param24,SEC1_OD_AVC=:Param25,');
        Sql.Add('SEC1_OI_AVC=:Param26,SEC1_OD_RPUPILA=:Param27,SEC1_OI_RPUPILA=:Param28,SEC1_OD_CROMATICO=:P  aram29,');
        Sql.Add('SEC1_OI_CROMATICO=:Param30,SEC1_OD_LUMINOSO=:Param31,SEC1_OI_LUMINOSO=:Param32,SEC1_OD_MOCU  L=:Param33,');
        SQL.Add('SEC1_OI_MOCUL=:Param34,SEC1_TONOME=:Param35,SEC1_APLANACION=:Param36,SEC1_SCH=:Param37,SEC1  _DIGITAL=:Param38,');
        Sql.Add('SEC1_DIGITEXTO=:Param39,SEC2_OBS_ORBITA=:Param40,SEC2_OBS_CORNIRIS=:Param41,SEC3_OBS_VITREO  =:Param42,');
        Sql.Add('SEC3_OBS_CPCRIS=:Param43,SEC5_EC_EXOF=:Param44,SEC5_EC_ECO=:Param45,SEC5_EC_TOMO=:Param46,'  );
        Sql.Add('SEC5_EC_ISHI=:Param47,SEC5_EC_EHISTOPATO=:Param48 Where id_paciente=:param49 and fecha=:param50');
        Params[0].AsString:=LabelId_paciente.Caption;Params[1].AsString:=cve_serv;
        Params[2].AsString:=FormLogin.Login; Params[3].AsString:=copy(Labelfecha.Caption,1,10);
        Params[4].AsString:='S';  Params[5].AsString:=MemoPadecimientoActual.Text;
        Params[6].AsString:=MemoHereditariosyFamiliares.Text; Params[7].AsString:= MemoPersonalesPatologicos.Text;
        Params[8].AsString:=MemoPersonalesnoPatologicos.Text;Params[9].AsString:=MemoHabitusExterior.Text;
        Params[10].AsString:=EditODAV.text;Params[11].AsString:=EditODConST.Text;
        Params[12].asstring:= EditOIAV.Text; Params[13].AsString:=EditOIConST.Text;
        Params[14].AsString:=EditODQueratom.Text;Params[15].AsString:=EditOIQueratom.Text;
        Params[16].AsString:=EditODCorreccionoptica.Text;Params[17].AsString:=EditOICorreccionoptica.Text;
        Params[18].AsString:=EditODLejos.Text; Params[19].AsString:=EditOILejos.Text;
        Params[20].AsString:=EditODLejosav.Text;Params[21].AsString:=EditOILejosav.Text;
        Params[22].AsString:=EditODCerca.Text; Params[23].AsString:=EditOICerca.Text;
        Params[24].AsString:=EditODCercaav.Text; Params[25].AsString:=EditOICercaav.Text;
        Params[26].AsString:=EditODRPupilares.Text;Params[27].AsString:=EditOIRPupilares.Text;
        Params[28].AsString:=EditODSCromatico.Text; Params[29].AsString:=EditOISCromatico.Text;
        Params[30].AsString:=EditODSLuminoso.Text;  Params[31].AsString:=EditODSLuminoso.Text;
        Params[32].AsString:=EditODMotOcular.Text;  Params[33].AsString:=EditOIMotOcular.Text;
        if CheckBoxAplanacion.State=cbChecked then   Params[34].AsString:='1' else  //tono
        if CheckBoxAplanacion.State=cbUnchecked then Params[34].AsString:='0';
        Params[35].AsString:=EditAplanacion.Text;
        if CheckBoxSHC.State=cbChecked then   Params[36].AsString:='1' else
        if CheckBoxSHC.State=cbUnchecked then Params[36].AsString:='0';
        if CheckBoxDigital.State=cbChecked then   Params[37].AsString:='1' else
        if CheckBoxDigital.State=cbUnchecked then Params[37].AsString:='0';
        Params[38].AsString:=EditDigital.Text;    Params[39].AsString:=MemoParpadoObservaciones.Text;
        Params[40].AsString:=MemoCorneaObservaciones.Text;  Params[41].AsString:=MemoPapilas.Text;
        Params[42].AsString:=MemoCamaraAnterior.Text; Params[43].AsString:=Memoexoftalmologia.Text;
        Params[44].AsString:=Memoecografia.Text;  Params[45].AsString:=Memotomografia.Text;
        Params[46].AsString:=Memoishiara.Text;  Params[47].AsString:=Memohistopato.Text;
        Params[48].AsString:=LabelId_paciente.Caption;  Params[49].AsString:=copy(Labelfecha.Caption,1,10);
        ExecSQL;
       end;

espero me puedan ayudar, en tiempo diseño me manda error violation acces (adrees) y en tiempo ejecucion me dice que la tabla no existe, y si existe trabajo con base de oracle y delphi6

Caral 23-04-2010 01:12:44

Hola
Que update mas complicado, nunca he visto algo asi.....
Lo unico que veo asi a simple vista y sin usar las etiquetas que ayudan mucho es:
Params[1].AsString:=cve_serv;
No se que es, de donde sale.
Es lo unico que veo, el parametro 3 tambien me tiene desconcertado, pero seguro es asi.
Saludos

Neftali [Germán.Estévez] 23-04-2010 09:59:27

Estoy con Caral. Las dos líneas donde utilizas el Copy son posibles para generar esos errores si los Label están vacíos o con cadenas pequeñas.

Lo que me desconcierta es que el error no te de en ejecución y sí en diseño. Deberías ser al revés. :(

Neftali [Germán.Estévez] 23-04-2010 10:00:15

taluz, deberías usar TAG's cuando coloques código delphi. Mejora la lectura del código considerablemente.

gatosoft 27-04-2010 00:56:00

Un error de Access Violation se produce (generalmente) cuando se está accesando a una posición de memoria no asignada o inicializada... Si la dirección que te retorna el error es algo como #FFFFFFF o #0000000 (no recuerdo cual de las dos) el error indica que estas accesando a un objeto que aun no está instanciado....

Por otro lado, si la dirección de memoria tiene un valor diferente, es muy probable que por error de codigo se esté accesando a una sección de memoria de otro objeto... suele suceder con arrays dinámicos cuyo subindice esta fuera de rango...

Ahora, como dice caral, sería bueno que hicieras un seguimiento paso a paso para identificar exactamente cual es la linea que te genera el error, para tener mas pistas.

Muy probablemente el segundo error sea fruto del segundo, para ello te recomiendo "proteger" el codigo con TRy..Except.... por ejemplo antes de hacer el ExecSQL, asi:

Try
ExecSQL;
Except
On E: TException do
ShowMessage('Error de ejecución: '+E.message);
end;

Suerte.


La franja horaria es GMT +2. Ahora son las 22:43:09.

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