Witam forumowiczów. Chciałbym was prosić o pomoc związaną z moją bazą danych w Delphi. Jest to wypożyczalnia filmów. Mam problem z dodawaniem i edycją rekordów. Wszystko połączone przez ODBC.Bardzo proszę o pomoc. W załącznikach wysyłam moją bazę w Access oraz w Delphi ;) Z góry dzięki wam za pomoc. Pozdro
a jaki to masz ten problem?
Gdy wypełniam w tym moim skromnym edytorze dane klienta i klikam dodaj to wyskakuje błąd którego nie rozumiem, a co do aktualizowania rekordów przez UPDATE to niby jest wszystko OK ale jak edytuje np. imie i klikam zapisz to nie aktualizuje się rekord. Używam DBGrida do odczytu tabel z Accessa
<ironia>
myślę, że jakbyś ten błąd wkleił tutaj to jest szansa, że ktoś go "zrozumie"</ironia>
. Nie masz podstawowej umiejętności umieszczania w zadawanych pytaniach wiedzy potrzebnej do ich rozwiązania. Nikomu się też nie będzie chciało otwierać Twojego projektu, sprawdzać co nie działa i tego naprawiać bo ktoś może nie mieć jakichś komponentów albo mieć inną wersję delphi czy jeszcze coś innego. Zauważ, że to Ty chcesz pomocy i to Ty musisz się wysilić aby zapewnić potencjalnemu "odpowiadaczowi" jak najwięcej informacji o Twoim problemie. Do takich informacji bezwzględnie należą:
- komunikaty błędów, jeśli jakieś występują, wraz z kawałkiem kodu, który je powoduje
- kawałki kodu, które powinny działać a nie działają z opisem co mają robić a co robią
- jeśli program dotyczy bazy danych to DDL problematycznych tabel/procedur/inne
A więc kod do dodawania nowego klienta do mojej bazy poprzez Delphi:
//DODAWANIE NOWEGO KLIENTA
procedure TForm2.BDodajClick(Sender: TObject);
var id:string;
begin
id:=FormatDateTime('yyyymmdd_hhmmss',Now);
ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('INSERT INTO Klient(ID_Klienta,Imie,Nazwisko,Pesel,Miasto,Ulica,Aktywny) '+
'VALUES('''+id+''','''+EImie.Text+''','''+ENazwisko.Text+''','''+EPesel.Text+''','''+CBUlica.Items.Strings[CBUlica.ItemIndex]+''','''+CBm.Items.Strings[CBm.ItemIndex]+''','''+CBAktywny.Items.Strings[CBAktywny.ItemIndex]+''')');
ADOQuery4.ExecSQL;
ADOConnection1.Connected:=False;
ADOConnection1.Connected:=True;
BDodaj.Click;
end;
Nie wiem w czym tkwi błąd. Po odpaleniu programu wyskakuję oto taki błąd:
dodanie znacznika <code class="delphi"> - furious programming
jeśli win vista lub nowszy to odpal program jako admin i zobacz czy zadziała
Wiesz co to akurat robię na XP - wirtualna maszyna. Normalnie mam Win 7 ;)
Najczęstszą przyczyną tego błędu jest brak uprawnień do pliku bazy danych
Nie mam czasu grzebać ale po zerknięciu na bazę wygląda że ona jest źle zaprojektowana wszystkie pola typu Tekst (łącznie z tymi ID) nie ma pola Ulica, Miasto są pola ID_Ulicy i ID_Miasta z (nazwy ulic są w innej tabeli) a nie ma utworzonych relacji, kwerend ... normalnie jakaś masakra.
ADOConnection1.Connected:=False;
ADOConnection1.Connected:=True; <- czy to ta linia generuje błąd ????
nie znam ADO , ale z tego co wiem z doświadczenia to w Delphi w innych bazodanowych komponentach metoda '.execsql' jest skojarzona z 'UPDATE" lub 'INSERT'
a '.open' lub inaczej '.connecetd=true' związane jest z 'SELECT'
w Twoim kodzie zamykasz połączenie i ponownie je otwierasz nie przebudowując zapytania , które wciąż jest typu 'insert' , moim zadaniem to może generować wyjątek
@kAzek słuchaj, facet ( nauczyciel ) kazał nam pousuwać relacje i klucze główne które były ustawione na autonumer kazał zmienić na tekst bo wyskakiwał błąd jakiś że nie zgadzają się typy
Mozliwe. Ale potrzebuje z tym pomocy bo nie mam pojecia jak to zrobic a mam to na zaliczenie mozna powiedziec.
chodziło mi że facet od informatyki ( nauczyciel ) przepraszam że to tak wyglądało @_13th_Dragon . Dziękuję @grzegorz_so