Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ayuda con este procedimiento (https://www.clubdelphi.com/foros/showthread.php?t=67128)

microbiano 30-03-2010 19:51:15

ayuda con este procedimiento
 
tengo el siguiente procedimiento que cual se supone tendria que cargar los registros de una columna en un combo segun el numero de liitacion.

Código Delphi [-]
procedure llena_claves();
  var licitac: variant;
begin
     licitac:='00641321-030-09';//trim(fpropuestas.txtlicitacion.Text);
     with fmodulo.Q_licitac2 do
      begin
       sql.Clear;
       sql.Add('select * from requerimiento');
       sql.Add('where licitacion=:licit');
       Parameters.ParamByName('licit').Value:=Trim(licitac);
       try
         ExecSQL;
        while fmodulo.Q_licitac2.Eof do
          begin
            fpropuestas.cb_clave.Items.Add(fmodulo.Q_licitac2.Recordset.Fields['gpo'].value);
            fmodulo.Q_licitac2.Next;
            exit;
          end;
       except
         on E:EOleException do begin
         MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        end;
      end;
      end;
end;

el problema es que me manda el siguiente error:

proyect fallo.exe raised exception class EAccesViolation with messaje 'Acces violation at
address 004c942b in module


y en pantalla me muestra este otro.

'Acces violation at
address 004c942b in module 'fallo.exe' Read Of address 000000


alguien tiene una idea del porque puede ser?

espero su ayuda muchas gracias

cloayza 30-03-2010 22:49:57

Me tome algunas libertades y realize unas modificaciones...
1) Verifica que el formulario fPropuestas, ya este creado al momento de llamar a este procedimiento.
2) En vez de usar ExecSQL utiliza Open, las razones las coloque como comentario.

Eso por ahora, espero que de algo te sirva a solucionar el problema.

Código Delphi [-]
Procedure Llena_Claves(Licitac:String);
  var licitac: variant;
begin
     licitac:='00641321-030-09'; //trim(fpropuestas.txtlicitacion.Text);
     With fModulo.Q_licitac2 Do
     Begin
          Sql.Clear;
          Sql.Add('select * from requerimiento');
          Sql.Add('where licitacion=:licit');
          ParamByName('licit').Value:=Trim(Licitac);
          Try
             Open; //ExecSQL es utilizado para ejecutar sentencias sql que no retornan registros como por ejemplo INSERT, DELETE, UPDATE, CREATE TABLE...
             While Not Eof Do
             Begin
                 //Asegurate que el fpropuestas esta creado al llegar a esta linea...
                 fPropuestas.cb_clave.Items.Add(Fields['gpo'].value);
                 Next;
             End;
             Close;
          Except
             On E:EOleException Do
             Begin
                MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
             End;
          End;
     End;
end;

microbiano 31-03-2010 00:11:51

envio mensaje de error
 
hice las modificaciones que comentas sin embargo al ejecutar el programa me manda el sigueinte error:

[Error] f_propuestas.pas(110): Incompatible types: 'Integer' and 'String'


el campo de la base de datos es varchar de 30.


espero comentarios

Caro 31-03-2010 00:59:39

Cita:

Empezado por microbiano (Mensaje 358881)
hice las modificaciones que comentas sin embargo al ejecutar el programa me manda el sigueinte error:

[Error] f_propuestas.pas(110): Incompatible types: 'Integer' and 'String'


el campo de la base de datos es varchar de 30.

Hola microbiano, debes indicarnos la línea de codigo donde te marca el error, yo supongo que es esta, cambia Value por AsString:

Código Delphi [-]
   fpropuestas.cb_clave.Items.Add(fmodulo.Q_licitac2.Recordset.Fields['gpo'].AsString);

Saluditos

microbiano 31-03-2010 06:23:05

gracias
 
efectivamente es el la siguiente linea que mencionas sin embargo al cambiar el value por AsString me sigue mostrando el mismo mensaje.

microbiano 06-04-2010 16:59:43

no he podido resolver el problema de este procedimiento
 
tengo el procedimiento que se supone tendria que cargar los datos en un combobox, para ello tengo el siguiente codigo.
Código Delphi [-]
procedure llena_claves();
  var licitac: variant;
begin
     licitac:='00641321-030-09'; //trim(fpropuestas.txtlicitacion.Text);
     With fModulo.Q_licitac2 Do
     Begin
          Sql.Clear;
          Sql.Add('select licitacion,gpo,gen,esp,dif,var from requerimiento');
          Sql.Add('where licitacion=:licit');
          Parameters.ParamByName('licit').Value:=Trim(Licitac);
          Try
             Open;
             While Not Eof Do
             Begin
                 fPropuestas.cb_clave.Items.Add(Fields['gpo'].Value);
                 Next;
             End;
             Close;
          Except
             On E:EOleException Do
             Begin
                MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
             End;
          End;
     End;

sin embargo al ejecutar el programa me muestra el siguiente error, en la linea de color rojo es decir:

fPropuestas.cb_clave.Items.Add(Fields['gpo'].Value); y este es el error:

[Error] f_propuestas.pas(109): Incompatible types: 'Integer' and 'String'

ya verifique y el tipo de dato de la tabla es varchar de 3, no entiendo por que el error alguien podria ayudarme.

ya intenten con

fPropuestas.cb_clave.Items.Add(Fields['gpo'].AsString);
fPropuestas.cb_clave.Items.Add(Fields['gpo'].asVariant);

pero nada funciona

rgstuamigo 06-04-2010 21:53:52

El problema que veo es que en la linea que tienes con rojo debes poner el numero de columna y no el nombre , algo así:
Código Delphi [-]
...
While Not Eof Do
 Begin
  {La primer columna tiene indice cero(0),
  la segunda columna tiene indice uno (1)y asi sucesivamente,
  como se quiere cargar el campo "gpo" entonces hacemos asi:}
  fPropuestas.cb_clave.Items.Add(Fields[1].AsString);//se debe cargar como string y no como variant;)
  Next;
 End;
...
Saludos...:)

microbiano 06-04-2010 23:31:33

ya lo solucione.
 
despues de tanto batallar el problema lo solucione de la siguiente manera por si alguna vez a alguien le puede ayudar este codigo:
Código Delphi [-]
procedure llena_claves();
  var licitac: variant;
begin
     licitac:=trim(fpropuestas.txtlicitacion.Text);
     With fModulo.Q_licitac2 Do
     Begin
          Sql.Clear;
          Sql.Add('select gpo,gen,esp,dif,var from requerimiento');
          Sql.Add('where licitacion=:licit');
          sql.Add('group by gpo,gen,esp,dif,var');
          Parameters.ParamByName('licit').Value:=Trim(Licitac);
          Try
             Open;
             While Not Eof Do
             Begin
                 fpropuestas.cb_clave.Items.Add((fieldByname('gpo').AsString) + ' ' + (fieldByname('gen').AsString) + ' ' + (fieldByname('esp').AsString)+ ' ' + (fieldByname('dif').AsString)+' '+(fieldByname('var').AsString));
                 Next;
             End;
             Close;
          Except
             On E:EOleException Do
             Begin
                MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
             End;
          End;
     End;

end;


Gracias a Todos los que dieron respuesta en su momento. alguien sabe como cerrar este hilo?


La franja horaria es GMT +2. Ahora son las 13:13:04.

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