Problem...[jak masz problem to go zasłoń - mL]

0

Dlaczego występuje tu błąd : <font color="red"> Operator not applicable to this operand type </span> ?? (Miejsce występowania błedu zaznaczyłem na niebiesko )

for i:=Low(Dane) to High(Dane) do
begin
if Dane[i].Imie=AImie.Text and <font color="blue">Dane[i].Nazwisko=ANazwisko.Text </span>then
begin
MessageDlg('Podana osoba już istnieje !', mtInformation, [mbOk], 0);
next2:=false;
end;

0

Nawiasy.. nawiasy..
(Dane[i].Imie=AImie.Text) and (Dane[i].Nazwisko=ANazwisko.Text)

to co ty zrobiłeś kompilator traktuje tak :
Dane[i].Imie = (AImie.Text and Dane[i].Nazwisko) = ANazwisko.Text

0

Dlaczego występuje tu błąd : <font color="red"> Illegal type in Write/Writeln statment </span> ?? (Miejsce występowania błedu zaznaczyłem na niebiesko )

var
Plik: TextFile;
i :integer;
begin
AssignFile(Plik,'recordsdane.txt');
Rewrite(Plik);
for i:= Low(Dane) to High(Dane) do
<font color="blue">Writeln(Plik,Dane[i]);</span>

CloseFile(Plik);

0

napisz jaki typ to Dane. bo z kodu nie widać (string czy co?)

0

type
TDane = record
Imie : String;
Nazwisko : String;
Wiek : Integer;

end;

var
Main : TMain;
Dane : array[0..100] of TDane;

0

Powinno być:
[code] plik : file of TDane;[/code]

0

Nieidzie !

Pisze :
[Error] Unit1.pas(137): Type 'TDane' needs finalization - not allowed in file typ

0

Hmm.. może to wina tego, że piszesz writeln zamiast write?

//DOPISANE
A poza tym musisz ograniczyć wielkość stringa w rekordzie :
[code]
imie : string[20];
[/code]
I będzie działać. Przez ciebie musiałem włączyć Dephi [krzyk]

0

działa !!
ograniczyłem Imie i Nazwisko i zmieniłem writeln na write

0

A dało się zaoszczędzić czas kilku ludzi i 2-3kb bazy danych. Wystarczyło nacisnąć F1 i włączyć mózg. Na przyszłość - rób tak.

0

var
Plik: file of TDane;
S: String;
I: Integer;
Li:Tlistitem;
begin
AssignFile(Plik, 'records\dane.ls');
Reset(Plik);

while not Eof(Plik) do
begin
For I:=Low(Dane) to High(Dane) do
begin
Read(Plik, dane[i]);

Li:=TListItem.Create(Lista.Items);
Li.Caption:=Dane[i].Imie;
Li.SubItems.Add(Dane[i].Nazwisko);
Li.SubItems.Add(IntToStr(Dane[i].Wiek));
Lista.Items.Add.Caption:=Li.Caption;
Lista.Items[1].SubItems:=Li.SubItems;
end;
end;
CloseFile(Plik);

end;

To jest procedura odpowiedzialna z wczytanie pliku . W czasie wczytywania ostatnia kokumna ma 100 subitemów Dane.Wiek (integer) czyli tyle co wielkość tablicy ,chociaŻ zapisałem tylko jedną tablice . . Dlaczego tak jest i jak mam doprowadzić to do porządku.

0

No jak dlaczego? Bo wielkość tablicy ile byś nie wczytał to dalej jest 100. Możesz dynamicznie zdefiniować tablicę :
[code]
dane : array of TDane;
[/code]
a potem w tej pętli co wczytuje, przed wczytaniem zwiększać jej rozmiar o 1:
[code]
SetLength(dane, length(dane) + 1);
[/code]

0

Nie działa ! Tworzy niekończącą się pętle która zawiesza program...

0

Zamiast :

[code]
while not Eof(Plik) do
begin
For I:=Low(Dane) to High(Dane) do
begin
Read(Plik, dane[i]);

Li:=TListItem.Create(Lista.Items);
Li.Caption:=Dane[i].Imie;
Li.SubItems.Add(Dane[i].Nazwisko);
Li.SubItems.Add(IntToStr(Dane[i].Wiek));
Lista.Items.Add.Caption:=Li.Caption;
Lista.Items[1].SubItems:=Li.SubItems;
end;
end;
CloseFile(Plik);

end;
[/code]

zrób tak :
[code]
reset(plik);
for i := 1 to filesize(plik) do begin
SetLength(dane, length(dane) + 1);
read(plik, dane[i]);
//tu można od razu tymi danymi uzupełniać listę
end;
closefile(plik);
[/code]

0

Wyskakuje bład : Program wykonał nieprawidłową operacje i zostanie zamknięty ble ble ble !

0

No jasne, że wyskakuje, przecież tablica jest numerowana od zera, a ty wywołujesz od jednego (zresztą sam ci tak napisałem, pomyliłem się, sorry). Wystarczy pętlę zrobić :
[code]
for i := 0 to filesize(plik) - 1 do begin
[/code]

1 użytkowników online, w tym zalogowanych: 0, gości: 1