Baza danych

0

Witam,
Od razu zaznaczam że nie jestem zbyt dobry z programowania.
Otóż mam problem- dostałem pracę zaliczeniową - bazę danych.
Napisałem cały program - tj. tworzę plik, usuwam, dodaje wpis, usuwam wpis, odczytuje zawartosc pliku, ale mam problem - jak podczas dodawania wpisu zamiast liczby wpiszę literę to wyskakuje błąd i program się sypie. poza tym wszystko jest dobrze. Co zrobić?

0

"Napisalem program, ale jak wpisze do niego litere to sie sypie", moze tak troche wiecej, jakis kod .... ?

0

Sorry, oto kod programu:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Menus;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Baza1: TMenuItem;
    Koniec1: TMenuItem;
    Nowyplik1: TMenuItem;
    Wprowadnowedane1: TMenuItem;
    Czytajdanezpliku1: TMenuItem;
    Kasujdanezpliku1: TMenuItem;
    StringGrid1: TStringGrid;
    Usuplik1: TMenuItem;
    procedure Koniec1Click(Sender: TObject);
    procedure Nowyplik1Click(Sender: TObject);
    procedure Usuplik1Click(Sender: TObject);
    procedure Wprowadnowedane1Click(Sender: TObject);
    procedure Czytajdanezpliku1Click(Sender: TObject);
    procedure Kasujdanezpliku1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 type
 spis=record
 nazwa:String[45];
 powierz:Integer;
 glebok:Integer;
 dno:String[50];
 dostep:Integer;
 brzegi:String[50];
 sprzet:String[50];
 miejscowosc:String[40];
 end;
 spis_2=file of spis;
var
  Form1: TForm1;
  jeziora, jeziora_pomoc:spis_2;
  rek:spis;
  kas_pozycja:string[50];
  znkon:string[1];
  ile,wynik:integer;
implementation

{$R *.dfm}

procedure TForm1.Koniec1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Nowyplik1Click(Sender: TObject);
begin
  AssignFile(jeziora,'jeziora.dat');
 {$i-}
 Reset(jeziora);
 CloseFile(jeziora);
 {$i+}
  if IORESULT = 0 then
  Showmessage ('Plik juz istnieje')
   else
  Begin
  Showmessage('Tworze plik');
   Rewrite(jeziora);
   CloseFile(jeziora);
  end;
end;

procedure TForm1.Usuplik1Click(Sender: TObject);
begin
AssignFile(jeziora,'jeziora.dat');
{$i-}
erase(jeziora);
{$i+}
 if ioResult=0 then
  Showmessage('Usunięto!')
 else
  Showmessage('Brak pliku do usunięcia!');
end;

procedure TForm1.Wprowadnowedane1Click(Sender: TObject);
begin
AssignFile(jeziora,'jeziora.dat');
{$i-}
Reset(jeziora);
{$i+}
 if IOResult<>0 then
 begin
 wynik:=Application.MessageBox('Czy stworzyc nowy?','Plik nie istnieje',
MB_YesNo+MB_IconStop+MB_DefButton1);
if wynik=6 then
begin
Rewrite(jeziora);
ShowMessage('Nowy plik został utworzony!');
end;
end;
Seek(jeziora, FileSize(jeziora));
repeat
with rek do
begin
 nazwa:=InputBox('Podaj dane','Podaj nazwe jeziora','');
 powierz:=StrToInt(InputBox('Podaj dane','Podaj wielkosc jeziora',''));
 glebok:=StrToInt(InputBox('Podaj dane','Podaj glebokosc',''));
 dno:=InputBox('Podaj dane','Podaj rodzaj dna','');
 dostep:=StrToInt(InputBox('Podaj dane','Ocen dostep do jeziora (1-6)',''));
 brzegi:=InputBox('Podaj dane','Podaj typ brzegów','');
 sprzet:=InputBox('Podaj dane','Podaj rodzaj wypozyczanego sprzetu','');
 miejscowosc:=InputBox('Podaj dane','Podaj nazwe najblizszej miejscowosci','');
 end;
 Write(jeziora,rek);
 wynik:=Application.MessageBox('czy wprowadzac dalej?','Wprowadzanie rekordu zakończono',MB_YesNo+MB_DefButton1);
 if wynik=6 then znkon:='K' else znkon:='N';
 until(znkon='N') or (znkon='n');
 CloseFile(jeziora);
end;

procedure TForm1.Czytajdanezpliku1Click(Sender: TObject);
begin
AssignFile(jeziora,'jeziora.dat');
{$I-}
Reset(jeziora);
CloseFile(jeziora);
{$I+}
if IOResult<>0 then
begin
ShowMessage('Plik nie istnieje!');
end
else
begin
Reset(jeziora);
ile:=0;
while not eof(jeziora) do
begin
Read(jeziora,rek);
ile:=ile+1;
end;
Reset(jeziora);
StringGrid1.ColCount:=9;
StringGrid1.RowCount:=ile+1;
StringGrid1.Cells[0,0]:='Nr. rek';
StringGrid1.Cells[1,0]:='Nazwa';
StringGrid1.Cells[2,0]:='Powierzchnia';
StringGrid1.Cells[3,0]:='Głębokosc';
StringGrid1.Cells[4,0]:='Rodzaj dna';
StringGrid1.Cells[5,0]:='Dostępnosc';
StringGrid1.Cells[6,0]:='Brzegi';
StringGrid1.Cells[7,0]:='Wyp. sprzętu';
StringGrid1.Cells[8,0]:='Miejscowosc';
ile:=0;
while not eof(jeziora) do
begin
ile:=ile+1;
Read(jeziora, rek);
with rek do
begin
StringGrid1.Cells[0,ile]:=IntToStr(ile);
StringGrid1.Cells[1,ile]:=nazwa;
StringGrid1.Cells[2,ile]:=IntToStr(powierz);
StringGrid1.Cells[3,ile]:=IntToStr(glebok);
StringGrid1.Cells[4,ile]:=dno;
StringGrid1.Cells[5,ile]:=IntToStr(dostep);
StringGrid1.Cells[6,ile]:=brzegi;
StringGrid1.Cells[7,ile]:=sprzet;
StringGrid1.Cells[8,ile]:=miejscowosc;
end;
end;
CloseFile(jeziora);
end;

end;

procedure TForm1.Kasujdanezpliku1Click(Sender: TObject);
begin
AssignFile(jeziora,'jeziora.dat');
{$I-}
Reset(jeziora);
{$I+}
if IOResult<>0 then
begin
ShowMessage('Plik nie istnieje!');
end
else
begin
Reset(jeziora);
ile:=0;
while not eof(jeziora) do
begin
Read(jeziora,rek);
ile:=ile+1;
end;
Reset(jeziora);
StringGrid1.ColCount:=9;
StringGrid1.RowCount:=ile+1;
StringGrid1.Cells[0,0]:='Nr. rek';
StringGrid1.Cells[1,0]:='Nazwa';
StringGrid1.Cells[2,0]:='Powierzchnia';
StringGrid1.Cells[3,0]:='Głębokosc';
StringGrid1.Cells[4,0]:='Rodzaj dna';
StringGrid1.Cells[5,0]:='Dostępnosc';
StringGrid1.Cells[6,0]:='Brzegi';
StringGrid1.Cells[7,0]:='Wyp. sprzętu';
StringGrid1.Cells[8,0]:='Miejscowosc';
ile:=0;
while not eof(jeziora) do
begin
ile:=ile+1;
Read(jeziora, rek);
with rek do
begin
StringGrid1.Cells[0,ile]:=IntToStr(ile);
StringGrid1.Cells[1,ile]:=nazwa;
StringGrid1.Cells[2,ile]:=IntToStr(powierz);
StringGrid1.Cells[3,ile]:=IntToStr(glebok);
StringGrid1.Cells[4,ile]:=dno;
StringGrid1.Cells[5,ile]:=IntToStr(dostep);
StringGrid1.Cells[6,ile]:=brzegi;
StringGrid1.Cells[7,ile]:=sprzet;
StringGrid1.Cells[8,ile]:=miejscowosc;
end;
end;
AssignFile(jeziora_pomoc,'pomoc.dat');
Reset(jeziora);
Rewrite(jeziora_pomoc);
kas_pozycja:=InputBox('','Podaj nazwe kasowanej pozycji','');
while not eof(jeziora) do
begin
Read(jeziora, rek);
if kas_pozycja<>rek.nazwa then Write(jeziora_pomoc,rek);
end;
CloseFile(jeziora);
CloseFile(jeziora_pomoc);
{$I-}
Erase(jeziora);
{$I+}
RenameFile('pomoc.dat','jeziora.dat');
end;
end;

end.
0

W którym miejscu jak wpiszesz literę?

0

np.

glebok:=StrToInt(InputBox('Podaj dane','Podaj glebokosc',''));

to ci spowoduje, jezeli chcesz przeprowadzic konwersje ze stringa na integera (StrToInt), a w stringu nie bedzie liczby to doataniesz taki rezultat.

A zeby tego uniknac to zmodyfikuj twoj rekord

 spis=record
  nazwa:String[45];
  powierz:Integer;
  glebok:Integer;
  dno:String[50];
  dostep:Integer;
  brzegi:String[50];
  sprzet:String[50];
  miejscowosc:String[40];
 end;

Czyli zamiast Integer zadeklaruj cos innego, np String;

0

Do LUDOMIRA:
Jak skompiluję program i zacznę dodawać wpis, wtedy jak np. mam podać głębokość jeziora (w liczbach) zamiast tego powiedzmy pomylę się i wpiszę literę to wyskakuje błąd i program się wiesza.

Do WOLVERINE:
Ale jak zadeklaruję zamiast integer stringa to będą to musiały być litery a nie liczby prawda? A ja jednak muszę mieć liczby:-/

0

Zrób własnego "InputBox" tak aby dało się wpisywać tylko liczby.
Albo
http://4programmers.net/Forum/viewtopic.php?id=51258

0

a może by tak użyć zmiennej variantowej? później dopiero sprawdzać czy jest liczba czy literka.

0

Ale jak zadeklaruję zamiast integer stringa to będą to musiały być litery a nie liczby prawda? A ja jednak muszę mieć liczby

Ale String to liczby + znaki... Wiec mozesz wpisac liczbe, tylko po prostu trudniej zrobin na tym jakies operacje np dodawanie.

0

trudniej nie trudniej. wystarczy zutowanie i zmiana typów i elegancko wychodzi, tyle, że trzeba w tedy uważać na wyjątki, które mogą przyspożyć kłopotu.

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