BDE -praca Magisterska Pomocy

0

Witam
Na wstępie chciałbym zaznaczyć, że nie zadaje na forum zbędnych pytań, zawsze staram się sam rozwiązać problem ale ten najwidoczniej mnie przerósł.
Napisałem program który korzysta z BDE (użyłem komponentów: IBDatabase, IBQuery, IBTransaction, DataSource,DBgrid- u mnie wszystko działa bez zarzutów, natomiast gdy uruchamiam go na innym komputerze dostaje błąd-dokładnie taki sam jak kolega:

http://forum.unit1.pl/index.php?showtopic=1325&mode=threaded&pid=9175

Szukałem na google i próbowałem wielu sposobów np:

'Wystarczy że zainstalujesz BDE.

lub:
W katalogu
C:\Program Files\Common Files\Borland Shared\BDE znajdziesz plik
bdeinst.cab
rozpakj go np. komendą cabarc x BDEINST.CAB
powstały po rozpakowaniu plik BDEINST.DLL zarejestruj na innym komputerze wydając polecenie:
regsvr32.exe BDEINST.DLL'

Robiłem dokładnie tak i mimo to nie działa. W internecie znalazłem równierz różnego typu instalki między innymi bdeinstall501.exe która robi w zasadzie to samo co wyżej, mimo to nie działa- cały czas ten sam błąd. Próbowałem przy kompilacji zaznaczyć /odznaczyć opcję Build with runtime packages - też nic. Naprawdę przeszukałem internet i wszyscy piszą że wystarczy zainstalować BDEINST.DLL

Czemu zatem nie działa, Bardzo proszę o pomoc albo jakieś wskazówki :)
Dzięki.

0

to nie jest BDE!! To jest FireBird/InterBase!! BDE Ci nie jest potrzebne - potrzebny jest Ci klient FB/IB - gds32.dll lub fbclient.dll

0

Zainstalowałem Klienta FireBird ze strony:
http://gskoczylas.rekord.pl/index.php?page=http://gskoczylas.rekord.pl/Firebird/SetupFB.php
gdy przewijnie się niżej widać pliki ja wybrałem Biblioteka klienta Firebird 1.5.5, owszem pliki o których mówisz są po instalacji ale błąd nadal ten sam.

0

Zainstalowałem InterBase sprawdziłem w panelu sterowania czy jest uruchomiony, zarejestrowałem bazę (tak na wszelki wypadek w IBconsole) uruchomiłem swój program i dalej ten sam błąd...
Jest ktoś wstanie mi pomóc ?
Z góry dzięki za wszelkie wskazówki

0

panel sterowania->narzędzia administracyjne->podgląd zdarzeń
i poszukaj tam błędu z godziną, kiedy się Twój program wysypał - powinno być jakiej mu biblioteki brakuje

0

moduł powodujący błąd kernel32.dll
dziwna sprawa...

0

napisz dokładnie z jakich NIESTANDARDOWYCH komponentów korzystasz

0

A więc konkretnie tak:
Jest to zwykła aplikacja klient-serwer, pisałem wcześniej tego typu aplikacje i niebyło problemu. Jedyna różnica polega na tym że Serwer otrzymuje pewne informacje od klienta np co godzinę (adresip, otwarte procesy,data,czas itd) i wrzuca je do bazy danych która znajduje się na dysku C:\DATATIME.GDB (bazę tą stworzyłem w IBconsol) W programie by połączyć się z tą bazą korzystam z:
-IBDatabase wskazałem bazę c:\DATATIME.GDB (Gdy uruchamiam na innym komputerze również bazę kopiuję w tą lokalizację.

-IBQuery
-IBTransaction
-DataSource
-DBGrid

prócz tego korzystam ze standardowych komponentów jak ClientSocket i ServerSocket.
Jest to problem z bazą danych na 100% ponieważ gdy uruchamiam ten program (w wersji archiwalnej gdzie nie bylo jeszcze bazy to działa)
Program na moim komputerze działa świetnie, gdy zainstaluje klientów na innych komputerach również jest wszystko ok, łączą się z serwerem a ten na moim komputerze zapisuje do bazy informację i pokazuje je w programie. Gdy jednak próbuje odwrócić sytuację i swój komputer zrobić klientem a np siostry serwerem gdy tylko uruchamiam ten program Od razu się wyłącza (do na samej górze jest link do błędu który mi wyskakuje) Zainstalowałem u niej InterBase sprawdziłem czy jest uruchomiony (pisałem o tym wyżej). Adresy IP oczywiście się zgadzają i niechodzi tu o jakieś konflikty itd. Sprawdzałem też na innych komputerach -ten sam błąd.

0

czekaj bo się pogubiłem :)

  1. NA KLIENCIE MUSZĄ być: aplikacja i klient IB (gds32.dll)
  2. NA SERWERZE MUSZĄ być: zainstalowany i uruchomiony serwer IB/FB, plik z bazą *.gdb, otwarty port|wyłączony firewall

Program na moim komputerze działa świetnie, gdy zainstaluje klientów na innych komputerach również jest wszystko ok, łączą się z serwerem a ten na moim komputerze zapisuje do bazy informację i pokazuje je w programie. Gdy jednak próbuje odwrócić sytuację i swój komputer zrobić klientem a np siostry serwerem gdy tylko uruchamiam ten program Od razu się wyłącza (do na samej górze jest link do błędu który mi wyskakuje) Zainstalowałem u niej InterBase sprawdziłem czy jest uruchomiony (pisałem o tym wyżej). Adresy IP oczywiście się zgadzają i niechodzi tu o jakieś konflikty itd. Sprawdzałem też na innych komputerach -ten sam błąd.

tego za bardzo nie rozumiem :p
w punktach jeśli możesz działa jak co gdzie jest a nie działa jak co gdzie jest

0

Zagmatwałem trochę :)
Zapomnijmy o tym co pisałem wyżej.
Generalnie pytanie sprowadza się do tego:
Napisałem sobie program który korzysta z bazy danych na dysku C:... oraz z komponentów które wymieniłem. Po uruchomieniu programu wyświetla się np DBGRID i co 10s wrzuca do bazy aktualną godzinę. U mnie to działa w 100%, natomiast jeśli ten sam program wraz z bazą wrzucę na inny komputer nie działa, Od razu wyskakuje błąd.
Nakierowałeś mnie na to że musi być zainstalowany klient. Więc instaluje na tym innym komputerze program InterBase,wchodzę Panel sterowania->InterBaseManager i sprawdzam czy jest uruchomiony, jest (Running) Teraz kopiuje swoją bazę na dysk C (by był w tej samej lokalizacji) i na końcu uruchamiam program. Co robię źle ? A w zasadzie czego nie robię ?

0

jeśli nie masz tam nic poza standardowymi komponentami to pomysły mi się skończyły :/
a możesz podesłać exe i bazę na maila albo na jakiś hosting dać?

0

Dzięki w ogóle że próbujesz pomóc, podaj maila a wyślę i bazę i exe, próbowałem znaleźć Twojego maila na portalu ale jest dla mnie ukryty.

0

Jeszcze jedną rzecz zaobserwowałem:) - To na 100% coś z bazą, gdy w tych niestandardowych komponentach zaznaczyłem aktywność na false skompilowałem i uruchomiłem u kogoś, program wyrzucił oczywiście parę błędów że niewidzi bazy ale włączył się :)- oczywiście nie można dodawać nic do bazy bo komponenty są nieaktywne, ale chociaż się włączył, bo normalnie w ogóle nie da się go uruchomić-wyskakuje błąd i program sie zamyka

0

A jakie błędy wyskakują?
Po mojemu nie łączy się z bazą z jakiegoś powodu. Może firewall, może coś innego, ale najpewniej jakaś głupota.

0

wysłałem Ci maila

0

na wstępie dostaje błąd, dynamic SQL error, nieznana kolumna komunikatory.id, a potem co ok sekundę kolejne okienko z AV :p
jak możesz to podeślij też kod

0
Ccobras napisał(a)

Zagmatwałem trochę :)
Zapomnijmy o tym co pisałem wyżej.
Generalnie pytanie sprowadza się do tego:
Napisałem sobie program który korzysta z bazy danych na dysku C:... oraz z komponentów które wymieniłem. Po uruchomieniu programu wyświetla się np DBGRID i co 10s wrzuca do bazy aktualną godzinę. U mnie to działa w 100%, natomiast jeśli ten sam program wraz z bazą wrzucę na inny komputer nie działa, Od razu wyskakuje błąd.
Nakierowałeś mnie na to że musi być zainstalowany klient. Więc instaluje na tym innym komputerze program InterBase,wchodzę Panel sterowania->InterBaseManager i sprawdzam czy jest uruchomiony, jest (Running) Teraz kopiuje swoją bazę na dysk C (by był w tej samej lokalizacji) i na końcu uruchamiam program. Co robię źle ? A w zasadzie czego nie robię ?

Jeśli baza danych jest na tym samym komputerze co program, to serwer też powinien być zainstalowany. Zainstaluj serwer na tym drugim komputerze.

0

No, to może testowałeś na jakiejś innej wersji niż na tej, co jest u klientów?

0

Wiesz to jest praca baaaardzo rozbudowana, i myślę że cały kod programu za dużo by zajoł by przeanalizować.
Czemu wyskakuje taki błąd ? Teraz ja służe odpowiedzią:D
Nadal nie widzi bazy:

procedure TForm2.FormCreate(Sender: TObject);

begin
zmiennapomocnicza:=0;  //zmienna pomocnicza ustawiona jako 0
Form2.Combobox1.Items.LoadFromFile('work\Ip.txt');    //Laduje do Combobox IP
Form2.Combobox3.Items.LoadFromFile('work\Nazwisko.txt'); //Laduje do Nazwiska
//Gdy uruchamia sie to okno to automatycznie czysci wszystkie tabele bazy
with Form2.IBQuery1, SQL do
     begin
      Close;
       Clear;
       Add('DELETE FROM Komunikatory');
       ExecSQL;
      Form2.IBTransaction1.Commit;
     end;
with Form2.IBQuery1, SQL do
     begin
      Close;
       Clear;
       Add('DELETE FROM AktywneOkna');
       ExecSQL;
      Form2.IBTransaction1.Commit;
     end;
with Form2.IBQuery1, SQL do
     begin
      Close;
       Clear;
       Add('DELETE FROM Internet');
       ExecSQL;
      Form2.IBTransaction1.Commit;
     end;
with Form2.IBQuery1, SQL do
     begin
      Close;
       Clear;
       Add('DELETE FROM Pracownicy');
       ExecSQL;
      Form2.IBTransaction1.Commit;
     end;
     end;

Po starcie program usuwa wszystkie rekordy z wszystkich tabel, akurat pierwsza jest komunikatory więc dlatego dostajesz błąd. Program nie może się połączyć z bazą więc oczywiście nie może także usunąć tych rekordów. Jeśli by bylo połączenie z bazą danych błąd ten oczywiście by nie wyskoczył :)

0
procedure TForm2.FormCreate(Sender: TObject);

begin
zmiennapomocnicza:=0;  //zmienna pomocnicza ustawiona jako 0
Form2.Combobox1.Items.LoadFromFile('work\Ip.txt');    //Laduje do Combobox IP
Form2.Combobox3.Items.LoadFromFile('work\Nazwisko.txt'); //Laduje do Nazwiska
//Gdy uruchamia sie to okno to automatycznie czysci wszystkie tabele bazy
if IBTransaction1.InTransaction then //nmie pamiętam czy tak się to nazywa
  IBTransaction1.Rollback;
IBTransaction1.BeginTransaction;
try
  with IBQuery1, SQL do
  begin
    Clear;
    Add('DELETE FROM Komunikatory');
    ExecSQL;
    Clear;
    Add('DELETE FROM AktywneOkna');
    ExecSQL;
    Clear;
    Add('DELETE FROM Internet');
    ExecSQL;
    Clear;
    Add('DELETE FROM Pracownicy');
    ExecSQL;
  end;
  IBTransaction1.Commit;
except
  IBTransaction1.Rollback;
  Msg('błąd');
end;

NIGDY nie pisz Form1 w metodach klasy tform1

0

Z ciekawości zapytam czemu?

Udało się, wszystko działa. Dla innych którzy kiedyś będą mieli ten sam problem:
Gdy korzystamy z komponentów IBDatabase itd na innym komputerze na którym uruchamiamy musimy w to samo miejsce skopiować plik z bazą oraz zainstalować InterBase. Teraz należy sprawdzić
Panel Sterowania->InterBaseManager czy jest w tyrbie Run

Niby nic nowego nie odkryłem, zatem czemu wcześniej mi niedziałał?:
Bardzo prosty i zarazem glupi błąd. Przed instalacją radzę wszystkich sprawdzić czy na ich komputerach znajduję się już plik GDS32.DLL (może być to wynik wcześniejszych instalacji itd)- ja po prostu tyle razy kombinowałem że ten plik już miałem :)
W pliku intsll.txt InterBase znalazłem taki wpis:

GDS32.DLL

There must be one and only one copy of
gds32.dll on the server where InterBase is
running. If gds32.dll exists on the server
because you have previously installed Borland
Database Engine as part of Delphi, C++Builder,
or another Borland product, or because
InterBase 5 or earlier was installed on the
server, you must remove the older gds32.dll
file prior to installing this Field Test.

Usunołem ten plik i jeszcze raz zainstalowałem InterBase- teraz wszystko działa i śmiga :)

Chciałem podziękować bardzo użytkownikowi Misiekd za to że zainteresował się i bardzo mi pomógł. Naprawdę można na was liczyć :)
Jeszcze raz dzięki :)

0
Ccobras napisał(a)

Z ciekawości zapytam czemu?

bo wtedy nie odwołujesz się do bierzącej instancji klasy tylko do konkretnej

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