vetor record - urgente!!!

Delphi

24/07/2008

declarei o seguinte vetor:
type
r_vetor = class
west_produto, west_descri, west_un, west_ant, west_atual, west_entrada,west_saida: String;
end;

apos a variavel:
var
dados: array of r_vetor;

ai quando vou passar informações para o vetor
dados[x].west_produto := Query1Codigo.Asstring;
dados[x].west_descri := Copy(Query1Descricao.text,1,50);
me da um erro!!

Access Violation adress 006df46c ... read ...00..4
o que poder ser?


Aleriopreto

Aleriopreto

Curtidas 0

Respostas

Powerslave7

Powerslave7

24/07/2008

Não seria r_vetor = record ao inves de r_vetor = class?

Abraço.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

24/07/2008

Colega,

No fragmento de seu código não foi possível avaliar onde e como você está ´expandindo´ o vetor aberto. Além da tipificação erronea de classe ao invés de registro.
Veja se o exemplo abaixo ajuda:

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure AdicionaRegistro(A: array of string);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  Registro = record
  Codigo,
  Descricao: String;
  end;

var
  Form1: TForm1;
  Registros: array of Registro;
implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.AdicionaRegistro(A: array of string);
var N: Integer;
begin
  N := Length(Registros)+1;
  SetLength(Registros, N);
  Registros[N-1].Codigo     := A[0];
  Registros[N-1].Descricao  := A[1]
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  AdicionaRegistro([´001´,´Teste´]);
end;

end.




GOSTEI 0
Brunodsr

Brunodsr

24/07/2008

troque o class por record que vai dar certo.

class tem q criar em memoria veio. se vc quiser usar classe, tem q criar um objeto em memoria p/ cada indice do vetor. Blz?

Um abraco


GOSTEI 0
Aleriopreto

Aleriopreto

24/07/2008

e para pegar esses dados, caro amigo zanela...
visto que colocquei em uma unit com funções, ai chamo a procedure adicionaregistro, blz funcionou e para retornar dados em array?

ex. retornaregistro(x:integer):array of...

é possivel?


GOSTEI 0
Aleriopreto

Aleriopreto

24/07/2008

tem como deixar essa variavel registros (vetor) para que eu possa ler em ambas as units do sistema se precisar?

minha unit de funcoes esta assim

unit Unit144;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Qrctrls, ExtCtrls, SHELLAPI, FileCtrl, Buttons, MaskUtils;

function Agenda(Emp:integer; Ndias:integer):boolean;
function SerialNum(FDrive:string):string;
function Padl(S:string;t:integer):string;
function Space(n:integer):string;
Function Digito(mnumero : string):string;
Function DigitoBarra(mnumero : string):string;
Function DigitoLinha(mnumero : string):string;
Function DigitoBrad(mnumero:string):string;
function Datafinal(dataini:tdatetime; dias_uteis:integer):tdatetime;
Function DeleteDir(Nome : String; LeaveFolder:Boolean):boolean;
Function Acesso(Emp:integer; User:string; Pass:String):boolean;
Function Botoes(Formulario:TForm;wtipo:integer):boolean;
function Valida_CGC_CPF(var nDoc: String): Byte;
function VerifCGC_CPF(sCGC: String;eh_CPF: Boolean): Boolean;
Function GravaLog(Data:TDateTime;Usuario:Integer;Log:String): Boolean;
Function extenso(valor: real): string;
function serialativa(wserial:string):string;
function geraserialativa(wserial:string):string;
function limpastring(wstring:string;wtipo:string):string;
Function Encripta(const S: String; Key: Word): String;
Function Decripta(const S: String; Key: Word): String;
Function Checa_data(data:string):boolean;
procedure AdicionaRegistro(A: array of string);
procedure RetornaRegistro(x:integer):boolean
type
Registro = record
west_produto, west_descri, west_un, west_ant, west_atual, west_entrada,west_saida: String;
end;

var
entra,warq,mfprod,ldir,wversao:string;
wcarte,vez,memp,mdesp,wkey,wtotal_produtos:integer;
mdesc,mdesc2,mcomissao:real;
Registros: array of Registro;
implementation


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

24/07/2008

Colega,

Não entendi o que pretende ainda, mas não seria mais adequado o uso de uma banco de dados?

type
  TForm1 = class(TForm)
    btn1: TButton;
    btn2: TButton;
    procedure AdicionaRegistro(A: array of string);
    function RecuperaRegistro(R: Integer): TStrings;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  Registro = record
  Codigo,
  Descricao: String;
  end;

var
  Form1: TForm1;
  Registros: array of Registro;
  Contador: Integer;
implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.AdicionaRegistro(A: array of string);
var N: Integer;
begin
  N := Length(Registros)+1;
  SetLength(Registros, N);
  Registros[N-1].Codigo     := A[0];
  Registros[N-1].Descricao  := A[1]
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  Inc(Contador);
  AdicionaRegistro([FormatFloat(´000´,Contador),´Teste´]);
end;

procedure TForm1.btn2Click(Sender: TObject);
var Dados: TStringList;
    LocalizarRegistro: Integer;
begin
  LocalizarRegistro := 1;
  Dados             := TStringList.Create;
  Dados.Text        := RecuperaRegistro(LocalizarRegistro).Text;

  ShowMessage(Dados.Text);

end;

function TForm1.RecuperaRegistro(R: Integer): TStrings;
begin
  with Result.Create do
  begin
    Result.Add(Registros[R].Codigo);
    Result.Add(Registros[R].Descricao);
  end;
end;

end.



GOSTEI 0
POSTAR